数据湖之 Flink Spark 集成 iceberg
一、iceberg优点
- 提供ACID事物,上游数据写入即可见,提供了 upsert、merge into 能力
- 支持计算引擎有 Spark、Flink、Presto 以及 Hive
- 支持 Parquet、Avro 以及 ORC 等存储格式
- 增量读取处理能力:支持通过流式方式读取增量数据,支持 Structed Streaming 以及 Flink table Source
二、安装部署
版本: hadoop 2.7.7 hive 2.3.9 flink 1.11.1 spark 3.0.2 iceberg 0.11.1
下载依赖jar包:
iceberg-flink-runtime-0.11.1.jar
iceberg-hive-metastore-0.11.1.jar
iceberg-hive-runtime-0.11.1.jar
iceberg-spark3-0.11.1.jar
iceberg-spark3-runtime-0.11.1.jar
iceberg-spark3-extensions-0.11.1.jar
根据各自名字分别移到spark , hive . flink lib目录下
加入全局配置: HADOOP_HOME HIVE_HOME .并配置path 环境变量
export PATH= HADOOP_HOME/bin: HIVE_HOME/conf
加入全局配置:
export HADOOP_CLAASSPATH=$(hadoop classpath)
三、iceberg集成flink
1.为了方便演示,使用flink 的 sql-client.sh conf目录下面 sql-client-defaults.yaml 加入配置;
catalogs:
# 默认 catalog 名字
- name: myhive
# 默认catalog的类型
type: hive
default-database: default
# hive配置文件地址
hive-conf-dir: /opt/server/apache-hive-2.3.9-bin/conf
将core-site.xml hdfs-site.xml hive-site.xml 拷贝到 conf目录下面
2.将core-site.xml hdfs-site.xml hive-site.xml 拷贝到 conf目录下面
export HADOOP_CLASSPATH=`hadoop classpath`
3.并启动本地flink集群,bin目录下面执行 :
./sql-client.sh embedded -j /opt/server/flink-1.11.1/lib/iceberg-flink-runtime-0.11.1.jar
-j /opt/server/flink-1.11.1/lib/flink-sql-connector-hive-2.3.6_2.11-1.11.2.jar shell
# 需要在启动参数中添加 -noverify 跳过字节码校验
# # start client without jar
exec $JAVA_RUN $JVM_ARGS -noverify "${log_setting[@]}" -classpath "`manglePathList
"$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" org.apache.f
link.table.client.SqlClient "$@"
# check if SQL client jar is in /opt
elif [ -n "$FLINK_SQL_CLIENT_JAR" ]; then
# start client with jar
exec $JAVA_RUN $JVM_ARGS -noverify "${log_setting[@]}" -classpath "`manglePathList
"$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS:$FLINK_SQL_CLIE
NT_JAR"`" org.apache.flink.table.client.SqlClient "$@" --jar "`manglePath
$FLINK_SQL_CLIENT_JAR`"
4.flink集成iceberg
flink 黑窗口中执行sql命令
./sql-client.sh embedded -j /opt/server/flink-1.11.1/lib/iceberg-flink-runtime-0.11.1.jar -j /opt/server/flink-1.11.1/lib/flink-sql-connector-hive-2.3.6_2.11-1.11.2.jar shell
①.创建catalog 指定iceberg存放位置
CREATE CATALOG hadoop_catalog WITH (
'type'='iceberg',
'catalog-type'='hadoop',
'warehouse'='hdfs://xxx:8020/user/hive/warehouse/',
'property-version'='1'
);
use catalog hadoop_catalog