作者:李继武

1文档编写目的

在Hive On Spark的模式下,无论是通过Beeline还是hive CLI访问Hive,使用Spark引擎执行SQL语句时,都会在/tmp目录下生成一个spark_submit.*.properties文件。Hive CLI方式会在当前节点/tmp目录生成,使用Beeline方式则会在HiveServer2所在节点的/tmp目录下生成。




Java 指定目录文件 生成下载url java生成文件到指定目录_Java 指定目录文件 生成下载url


一般情况下spark-submit.xxx.properties文件生成在/tmp目录下并没有问题,该文件主要是用向集群提交Spark作业时指定作业的运行参数。


Java 指定目录文件 生成下载url java生成文件到指定目录_spark_02


但在一些场景中,由于各种原因不允许往/tmp目录写入文件时,就需要修改生成该文件的目录,本文档主要介绍如何修改该目录。

  • 测试环境:CDH6.1.0

2控制台配置

尝试通过控制台在hive或者spark组件的配置中进行修改

1.查看hive组件,搜索/tmp


Java 指定目录文件 生成下载url java生成文件到指定目录_Java 指定目录文件 生成下载url_03


从图上可以得知hive组件的配置中原来有关/tmp的配置只有两项,一项为heapdump输出目录,另一项为配置审计过滤条件,均不是配置spark-submit.xxx.properties的生成目录。

2.查看spark组件,搜索/tmp


Java 指定目录文件 生成下载url java生成文件到指定目录_spark_04


从图上可以得知hive组件的配置中原来有关/tmp的配置只有一项,为heap dump输出目录,不是配置spark-submit.xxx.properties的生成目录。

从以上可知,控制台上并没有显著可直接配置该目录的配置项。

3查看官网

1.查看hive官网配置介绍地址如下

https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

为默认情况下该文件生成在/tmp目录下,因此仍然直接搜索”/tmp”,得到以下几个与“/tmp”目录有相关的配置项,依次查看。


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_05


Java 指定目录文件 生成下载url java生成文件到指定目录_spark_06


Java 指定目录文件 生成下载url java生成文件到指定目录_Java 指定目录文件 生成下载url_07


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_08


从以上配置项的描述中,可以看到并没有相符合的配置项存在。

2.查看spark官网配置介绍

http://spark.apache.org/docs/latest/configuration.html

同样直接搜索”/tmp”,得到以下几个与“/tmp”目录有相关的配置项,依次查看。


Java 指定目录文件 生成下载url java生成文件到指定目录_Java 指定目录文件 生成下载url_09


Java 指定目录文件 生成下载url java生成文件到指定目录_spark_10


Java 指定目录文件 生成下载url java生成文件到指定目录_配置项_11


从以上配置项的描述中,可以看到并没有相符合的配置项存在。

4Hive源码查看

通过hive2源代码,查看spark-submit.xxx.properties文件生成时目录的选择。生成该配置文件所在的类为org.apache.hive.spark.client.AbstractSparkClient,在该类的startDriver()方法中通过如下代码生成该配置文件:


Java 指定目录文件 生成下载url java生成文件到指定目录_spark_12


查看调用关系


Java 指定目录文件 生成下载url java生成文件到指定目录_Java 指定目录文件 生成下载url_13


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_14


Java 指定目录文件 生成下载url java生成文件到指定目录_Java 指定目录文件 生成下载url_15


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_16


通过调用关系我们可以看到,该文件生成在java.io.tmpdir配置的目录当中,默认情况下,不同的系统该默认值不同,window系统下该值是C:甥敳獲登录用户~1AppDataLocalTemp,而Linux系统该值是/tmp。

因此,通过在hiveserver2的启动配置内,添加“-Djava.io.tmodir=目标目录”,就能修改该文件生成的目录。

5验证

这里我们通过将该目录修改到/data0/tmp目录下为例进行测试

1.在hiveserver2所在节点上,创建/data0/tmp目录,并赋予1777权限

mkdir -p /data0/tmpchmod 1777 /data0/tmp


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_17


2.在控制台上打开hive组件的配置界面,搜索“JavaConfiguration Options for HiveServer2”,在末尾添加:

-Djava.io.tmpdir=/data0/tmp


Java 指定目录文件 生成下载url java生成文件到指定目录_java生成excel文件到指定目录_18


保存并根据提示重启Hive服务。

3.打开beeline连接hiveserver2


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_19


在未执行需要spark参与的sql之前,未生成spark-submit.xxx.properties文件:


Java 指定目录文件 生成下载url java生成文件到指定目录_配置项_20


4.执行count()操作


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_21


Java 指定目录文件 生成下载url java生成文件到指定目录_配置项_22


5.查看spark-submit.xxx.properties文件生成情况


Java 指定目录文件 生成下载url java生成文件到指定目录_hive_23


可以看到,现在该文件已不再生成在/tmp目录下,而是生成在新配置的/data0/tmp目录下。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。