【Spark案例】本地访问cdh集群不将配置文件放入resource目录方式
背景故事
今天我领导,他想用pyspark 连接集群中的hive ,作数据分析用。于是这变成了一个在本地集群中如何访问远程集群的问题。 在python 环境中使用pyspark 构建sparkSession 的过程当中,config 参数选项里面配置了一个hive.metastore.uris 的时候,sparkSession 能够访问hive 的数据库,及表信息。但是读取数据的时候会发生报错。
问题分析
在java中
如果是maven 构建的java 项目当中,使用spark 远程连接集群的话,需要在项目中的resource 文件目录下面将hadoop 的配置文件如hdfs-site.xml,core-site.xml,mapred-site.xml,yarn-site.xml 文件放置进resource 目录中。接下来运行的时候,maven 会将这些配置文件打包到classpath 中。然后源代码中,就会加载这些配置文件,相关的代码如下: 代码路径:org/apache/hadoop/conf/Configuration.java
在python中
那么python 中没有似乎没有resource 文件夹,好像也不能像java 一样package ,那么我们如何做呢? 我们将里面这些xml 里面的配置文件,用文本编辑器打开。提取出所有的键值对,然后在启动sparkSession 的时候调用config(key,value) 添加这些键值对,在每个键的前面加上spark.hadoop 前缀,该代码写在这里: 代码路径:org/apache/spark/deploy/SparkHadoopUtil.scala 返回来的SparkSession 就可以访问正常调用sql 方法访问数据啦。
总结:
这样实现了不通过将core-site.xml ,hdfs-site.xml 文件就能够访问集群读取数据 了。如果各位路过的大佬有什么更好的方法,欢迎在下方留言!谢谢大家~
|