环境
- hadoop客户端
- hivemetastore
- spark包
1.hadoop环境
- 如果使用hdfs,则需要hadoop环境;如果仅使用s3,则需要hadoop客户端即可。
2.metastore环境
- 非必须。如果没有metastore环境,iceberg仍然可以选择hadoop环境。
3.spark的配置
- 关于iceberg-runtime包最好也放到jars下。
- 在$SPARK_HOME/conf/spark-env.sh中配置:
HADOOP_HOME=/home/xxx/hadoop-current
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop/
- 如果使用metastore,需要在$SPARK_HOME/conf/hive-site.xml(新建)中配置metastore的地址。
<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
<property>
<name>hive.metastore.uris</name>
<value>thrift://xxx:9083</value>
</property>
</configuration>
运行
debug iceberg:
[hadoop@10 ~]$ spark-sql --master local \
--driver-java-options "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5060" \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog \
--conf spark.sql.catalog.spark_catalog.type=hadoop \
--conf spark.sql.catalog.spark_catalog.warehouse=hdfs://ns1/user/wanghongbing/db
Listening for transport dt_socket at address: 5060
扩展Spark Catalyst
使得用户可以在Spark session中自定义自己的parser,analyzer,optimizer以及physical planning stragegy rule。Spark Catalyst扩展点:
SparkSessionExtensions
获取自定义规则
SparkSessionExtensions对应每一种自定义规则也都有一个build开头的方法用于获取对应类型的自定义规则,Spark session在初始化的时候,通过这些方法获取自定义规则并传递给parser,analyzer,optimizer以及planner等对象。
- buildOptimizerRules
- buildParser
- buildPlannerStrategies
- buildResolutionRules
- buildPostHocResolutionRules
- buildCheckRules