Flink on YARN提交任务时如何指定Hive配置的HDFS路径?
在YARN上用Flink创建Hive分区时指定HDFS路径的Hive配置
答案是可以,你完全可以指定HDFS路径的Hive配置文件夹来解决YARN容器找不到本地配置的问题,下面是具体的实现方法和注意事项:
具体步骤
第一步:上传Hive配置到HDFS
先把你的hive-site.xml、hive-env.sh等Hive配置文件上传到HDFS的一个固定路径,比如你示例里的hdfs:///warehousestore/hive/warehouse/db/hive_conf/,确保这个路径的权限能让YARN容器正常访问。第二步:提交任务时指定配置参数
在通过YARN提交Flink任务的时候,通过-yD参数传递Hive配置的HDFS路径,Flink会自动把配置文件下载到容器本地并加载。示例命令如下:flink run -m yarn-cluster \ -yD hive.conf.dir=hdfs:///warehousestore/hive/warehouse/db/hive_conf/ \ -yD fs.hdfs.hadoopconf=/etc/hadoop/conf \ your-partition-creation-job.jar这里的
hive.conf.dir直接指向HDFS上的配置目录;fs.hdfs.hadoopconf指定本地的Hadoop配置目录,保证Flink能正常连接HDFS。第三步:代码无需额外调整
因为你只是创建Hive表分区,只要Flink正确加载了Hive配置,不管是用SQL的ALTER TABLE ... ADD PARTITION还是Table API的相关方法,都能正常和Hive元数据交互,不需要修改代码里的路径配置。
额外补充:通过HiveCatalog指定配置
如果你在代码中使用了Flink的HiveCatalog来连接Hive,也可以直接在Catalog的初始化参数里指定HDFS的配置路径,效果一致:
import org.apache.flink.table.catalog.hive.HiveCatalog; // 初始化HiveCatalog HiveCatalog hiveCatalog = new HiveCatalog( "hive_catalog", // Catalog名称 "default", // 默认数据库 "hdfs:///warehousestore/hive/warehouse/db/hive_conf/" // HDFS上的Hive配置目录 ); // 注册并使用Catalog tableEnv.registerCatalog("hive_catalog", hiveCatalog); tableEnv.useCatalog("hive_catalog");
这样配置后,Flink在YARN容器中运行时会自动从HDFS拉取配置文件到本地,完美解决本地路径找不到的问题。
内容的提问来源于stack exchange,提问作者patel akash




