简而言之:我在hdp3上有一个可配置的配置单元,我无法从pyspark到达,它在纱线下运行(在同一hdp上)。如何让pyspark查找我的桌子?
spark.catalog.listDatabases()
仅显示默认值,任何查询运行都不会显示在我的配置记录中。
这是我的代码,带有spark 2.3.1
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
settings = []
conf = SparkConf().setAppName("Guillaume is here").setAll(settings)
spark = (
SparkSession
.builder
.master('yarn')
.config(conf=conf)
.enableHiveSupport()
.getOrCreate()
)
print(spark.catalog.listDatabases())
请注意,settings
为空。我就足够了,因为在日志中我看到了
加载配置单元配置文件:文件:/etc/spark2/3.0.1.0-187/0/hive-site.xml
更有趣的是
注册函数intersectgroups io.x.x.IntersectGroups
这是我编写并手动添加到配置单元的UDF。这意味着已完成某种连接。
我得到的唯一输出(日志除外)是:
[数据库(名称= u'默认',description = u'默认数据库',locationUri = u'hdfs:// HdfsNameService / apps / spark / warehouse')]
我知道我应该在设置中设置spark.sql.warehouse.dir
。不管我是否将其设置为在hive-site中找到的值,我感兴趣的数据库的路径(不在默认位置),它的父级,都没有改变。
我在设置中添加了许多其他配置选项(包括节俭uri),没有任何更改。
我也看到我应该将hive-site.xml复制到spark2 conf目录中。我是在群集的所有节点上完成的,没有任何更改。
我要运行的命令是:
HDP_VERSION = 3.0.1.0-187 PYTHONPATH =。:/ usr / hdp / current / spark2-client / python /:/ usr / hdp / current / spark2-client / python / lib / py4j-0.10.7-src .zip SPARK_HOME = / usr / hdp / current / spark2-client HADOOP_USER_NAME = hive spark-submit --master yarn --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-1.0.0.3.0.1。 0-187.jar --py文件/usr/hdp/current/hive_warehouse_connector/pyspark_hwc-1.0.0.3.0.1.0-187.zip --files /etc/hive/conf/hive-site.xml ./subjanal /anal.py