写点什么

Iceberg0.11 与 Spark3.0 结合

发布于: 2021 年 05 月 13 日
Iceberg0.11与Spark3.0结合

1.安装编译 Iceberg0.11

此处我下载的是 Iceberg0.11.1 版本需要提前安装 gradle,iceberg 的编译,此处使用的是 gradle5.4.1 版本


wget https://downloads.gradle.org/distributions/gradle-5.4-bin.zipunzip -d /opt/gradle gradle-5.4-bin.zipvim /etc/profile# 加入下面的#GREDLEexport GRADLE_HOME=/opt/gradle/gradle-5.4export PATH=$PATH:$GRADLE_HOME/bin
source /etc/profile
复制代码


编译 Iceberg,github 上下载源码进行编译,此处略过下载过程直接进行编译


cd iceberg-apache-iceberg-0.11.1gradle build -x test
复制代码

2. Iceberg 编译与 SparkSQL 相结合

2.1 上述编译成功后到 spark3 目录下取出我们所需的 jar 包

cd spark3-runtime/build/libsll
复制代码



iceberg-spark3-runtime-0.11.1.jar 为我们所需的插件包

2.2 将插件包放入到 spark 目录下

cd $SPARK_HOME/jarscp iceberg-apache-iceberg-0.11.1/spark3-runtime/build/libs/iceberg-spark3-runtime-0.11.1.jar .
复制代码

2.3 修改 spark 相应的配置

模式一:用 hadoop 当元数据在 spark-defaults.confspark.sql.catalog.iceberg=org.apache.iceberg.spark.SparkCatalogspark.sql.catalog.iceberg.type=hadoopmapreduce.output.fileoutputformat.outputdir=/tmpspark.sql.catalog.iceberg.warehouse=hdfs://mycluster/iceberg/warehouse 模式二:元数据共用 hive.metastore 在 spark-defaults.confspark.sql.catalog.hive_iceberg = org.apache.iceberg.spark.SparkCatalogspark.sql.catalog.hive_iceberg.type = hivespark.sql.catalog.hive_iceberg.uri = thrift://node182:9083 模式二:元数据自定义,可以是 S3


下面的例子都是按模式二:元数据共用 hive.metastore 进行。


  1. spark 进行安装完毕,此处不再详述,conf 目录下需要有 hdfs-site.xml,core-site.xml,mared-reduce.xml,hive-site.xml,yarn-site.xml,这里就不多描述了

  2. 在 spark-defaults.conf 下加入下面的语句


spark.sql.catalog.iceberg = org.apache.iceberg.spark.SparkCatalogspark.sql.catalog.iceberg.type = hivespark.sql.catalog.iceberg.uri = thrift://node182:9083
复制代码


其中 spark.sql.catalog.iceberg.uri 是参照 hive-site.xml 中配置 spark.sql.catalog.iceberg,其中的 iceberg 为 namespace 的意思命名空间,下面我们创建 database 都要在此命名空间之下。


 <property>    <name>hive.metastore.uris</name>        <value>thrift://172.16.129.182:9083</value>    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>  </property>
复制代码

2.4 启动 Spark

1)启动 Spark 的 thriftserver 服务


sh start-thriftserver.sh --master yarn
复制代码


2)用 beeline 进行连接


bin/beeline!connect jdbc:hive2://node182:25001 spark spark
复制代码



此处连接的端口号从 hive-site.xml 中配置读取


 <property>    <name>hive.server2.thrift.port</name>    <value>25001</value>    <description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.</description>  </property>
复制代码

2.5 创建 iceberg 源表

1)创建 database


create database iceberg.jzhou_test;
复制代码



想看当前 namespace 用下面命令


show current namespace;
复制代码



2)创建 iceberg 源的表


 use iceberg.jzhou_test;create table iceberg_spark(id int, name string) using iceberg;
复制代码



可以修改底层 file_format,此处默认为 parquet,但是我想修改为 orc,两种方法:方法一:


ALTER TABLE iceberg_spark SET TBLPROPERTIES('write.format.default' = 'orc');
复制代码


方法二:


create table iceberg_spark(id int, name string) using iceberg TBLPROPERTIES ('write.format.default' = 'orc');
复制代码


3)插入数据,并看 hdfs 上表的元数据



元数据所在 hdfs 目录可以从 hive-site.xml 的配置中得到:


 <property>    <name>hive.metastore.warehouse.dir</name>    <value>/user/hive/warehouse</value>    <description>location of default database for the warehouse</description>  </property>
复制代码


看到 hdfs 上数据与元数据





发布于: 2021 年 05 月 13 日阅读数: 35
用户头像

还未添加个人签名 2019.02.22 加入

还未添加个人简介

评论

发布
暂无评论
Iceberg0.11与Spark3.0结合