apache flink + Paimon 快速搭建指南

兰丰岐發表於2024-08-31

Apache Paimon是一種湖格式,可以使用Flink和Spark構建實時湖屋架構,用於流式和批處理操作。Paimon創新性地將lake格式和LSM(日誌結構合併樹)結構相結合,將實時流式更新引入lake架構。

Paimon提供以下核心功能:

*實時更新:
*主鍵表支援寫入大規模更新,具有很高的更新效能,通常透過Flink Streaming。
*支援定義合併引擎,以您喜歡的方式更新記錄。重複資料刪除以保留最後一行、部分更新、聚合記錄或第一行,由您決定。
*支援定義變更日誌生成器,為合併引擎生成正確完整的變更日誌更新,簡化您的流式分析。
*海量附加資料處理:
*附加表(無主鍵)提供大規模批處理和流處理能力。自動小檔案合併。
*支援資料壓縮和z順序排序,以最佳化檔案佈局,使用minmax等索引提供基於資料跳過的快速查詢。
*資料湖功能:
*可擴充套件後設資料:支援儲存Petabyte大規模資料集和儲存大量分割槽。
*支援ACID事務、時間旅行和模式演化。

the environment includes:

  • minio
  • pamion
  • flink

Centos 更換 tencent 的yum源

備份系統舊配置檔案

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

獲取對應版本的CentOS-Base.repo 到/etc/yum.repos.d/目錄

各版本源配置列表

CentOS7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
CentOS8
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos8_base.repo

更新快取

yum clean all
yum makecache

Centos 安裝Java環境(flink使用)

wget --no-check-certificate https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz

mkdir /usr/local/java/
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/java

echo "export JAVA_HOME=/usr/local/java/jdk1.8.0_202" >> /etc/profile
echo "export JRE_HOME=${JAVA_HOME}/jre" >> /etc/profile
echo "export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib" >> /etc/profile
echo "export PATH=${JAVA_HOME}/bin:$PATH" >> /etc/profile

source /etc/profile
ln -s /usr/local/java/jdk1.8.0_202/bin/java /usr/bin/java

java -version

install Minio

使用以下命令下載安裝最新版本的穩定 MinIO二進位制包, 並設定 $PATH:

wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/

設定minio linux服務

sudo tee /etc/systemd/system/minio.service <<-'EOF'
[Unit]
Description=Minio Service

[Service]
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=password"
ExecStart=/usr/local/bin/minio server /mnt/minio --console-address ":9001"
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
StandardOutput=/mnt/minio/logs/minio.log
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

啟動 minio linux服務

systemctl start minio
systemctl enable minio

手動 建立Buckets warehouse ,設定Access Policy: Public

download jdk filnk 1.18.1

wget https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.18.1/flink-1.18.1-bin-scala_2.12.tgz

tar zxvf flink-1.18.1-bin-scala_2.12.tgz -C /opt/

download dll ,copy to flink-1.18.1/lib folder

wget https://repo1.maven.org/maven2/org/apache/paimon/paimon-s3/0.8.0/paimon-s3-0.8.0.jar
wget https://repo1.maven.org/maven2/org/apache/paimon/paimon-flink-1.18/0.8.0/paimon-flink-1.18-0.8.0.jar
wget https://repo1.maven.org/maven2/org/apache/flink/flink-connector-jdbc/3.1.2-1.18/flink-connector-jdbc-3.1.2-1.18.jar
wget https://repo1.maven.org/maven2/org/apache/flink/flink-shaded-hadoop-2-uber/2.8.3-10.0/flink-shaded-hadoop-2-uber-2.8.3-10.0.jar
wget https://repo1.maven.org/maven2/org/apache/flink/flink-s3-fs-hadoop/1.18.0/flink-s3-fs-hadoop-1.18.0.jar

cp ./*.jar /opt/flink-1.18.1/lib/

start flink

cd /opt/flink-1.18.1/

bash ./bin/start-cluster.sh

bash flink 客戶端:

cd /opt/flink-1.18.1/

./bin/sql-client.sh embedded

建立 Iceberg Catalog 和表

```sql
-- if you're trying out Paimon in a distributed environment,
-- the warehouse path should be set to a shared file system, S3 minio
CREATE CATALOG my_catalog WITH (
    'type' = 'paimon',
    'warehouse' = 's3://warehouse/wh',
    's3.endpoint'='http://192.168.116.130:9000',
    's3.access-key' = 'admin',
    's3.secret-key' = 'password',
    's3.region' = 'us-east-1'
);

USE CATALOG my_catalog;

-- create a word count table
CREATE TABLE word_count (
    word STRING PRIMARY KEY NOT ENFORCED,
    cnt BIGINT
);

建立完表,可以登入 minio:9001地址進行檢視資料檔案;
插入資料

USE CATALOG my_catalog;
-- insert data into word count table
insert into word_count values ('hello',2);

後面, 根據你的業務建立 flink job任務,進行資料寫入;

相關文章