通过Apache Livy提交Hudi Delta Streamer作业时如何传递--props等参数
通过Livy API提交Hudi Delta Streamer作业的配置方法
你可以直接调用Livy的批量作业提交接口POST <livy服务地址>/batches,把原spark-submit的参数映射到Livy请求体的对应字段即可,核心映射规则如下:
- spark-submit的
--class参数对应请求体的className字段 - spark-submit的
--master、--deploy-mode、--conf、--packages等Spark配置项,统一放到conf字段中 - Hudi Delta Streamer自身的业务参数(包括
--source-class、--props等)统一按顺序放到args数组中,参数名和参数值要拆分为两个独立的数组元素
完整请求示例
{ "className": "org.apache.hudi.utilities.deltastreamer.HoodieDeltaStreamer", "conf": { "spark.master": "yarn", "spark.submit.deployMode": "cluster", "spark.jars.packages": "org.apache.hudi:hudi-utilities-bundle_2.11:0.5.3,org.apache.spark:spark-avro_2.11:2.4.4", "spark.sql.shuffle.partitions": "100", "spark.driver.extraClassPath": "$HADOOP_CONF_DIR" }, "args": [ "--table-type", "MERGE_ON_READ", "--source-class", "org.apache.hudi.utilities.sources.JsonKafkaSource", "--source-ordering-field", "tst", "--target-base-path", "/user/hive/warehouse/stock_ticks_mor", "--target-table", "test", "--props", "/var/demo/config/kafka-source.properties", "--schemaprovider-class", "org.apache.hudi.utilities.schema.FilebasedSchemaProvider", "--continuous" ] }
发送请求时需要将请求头的Content-Type设置为application/json。
关键注意事项
- 参数拆分规则:不要把参数名和参数值拼接成同一个字符串,比如
["--source-class org.apache.hudi.utilities.sources.JsonKafkaSource"]这种写法是错误的,必须拆成两个独立元素。 - --props路径可用性:你填写的配置文件路径必须保证Livy服务节点、YARN集群所有NodeManager节点都能正常访问,推荐将配置文件上传到HDFS,填写HDFS协议路径(例如
hdfs:///path/to/kafka-source.properties),避免本地路径只存在于单个节点导致作业启动失败。 - 依赖可用性:如果集群无法访问公共Maven仓库,可以提前把hudi-utilities-bundle、spark-avro的jar包上传到HDFS,用
jars字段指定HDFS路径,替换spark.jars.packages配置。
内容的提问来源于stack exchange,提问作者codek
相关产品推荐
相关产品推荐

