我正在尝试使用scala从spark应用程序访问HIVE。
我的代码:
val hiveLocation = "hdfs://master:9000/user/hive/warehouse"
val conf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[*]").set("spark.sql.warehouse.dir",hiveLocation)
val sc = new SparkContext(conf)
val spark = SparkSession
.builder()
.appName("SparkHiveExample")
.master("local[*]")
.config("spark.sql.warehouse.dir", hiveLocation)
.config("spark.driver.allowMultipleContexts", "true")
.enableHiveSupport()
.getOrCreate()
println("Start of SQL Session--------------------")
spark.sql("select * from test").show()
println("End of SQL session-------------------")
但最终会出现错误消息
未找到表格或视图
但是当我在hive控制台下运行show tables;
时,我可以看到该表并可以运行Select * from test
。所有都在" user / hive / warehouse"地点。仅仅是为了测试我也尝试使用来自spark的create table,只是为了查找表位置。
val spark = SparkSession
.builder()
.appName("SparkHiveExample")
.master("local[*]")
.config("spark.sql.warehouse.dir", hiveLocation)
.config("spark.driver.allowMultipleContexts", "true")
.enableHiveSupport()
.getOrCreate()
println("Start of SQL Session--------------------")
spark.sql("CREATE TABLE IF NOT EXISTS test11(name String)")
println("End of SQL session-------------------")
这段代码也正确执行(有成功说明),但奇怪的是我可以从hive控制台找到这个表。
即使我在mysql中使用select * from TBLS;
(在我的设置中我将mysql配置为hive的Metastore),我也没有找到那些由spark创建的表。
火花位置是否与蜂巢控制台不同?
如果我需要从spark访问配置单元中的现有表,我该怎么办?
答案 0 :(得分:2)
: (我强调了相关部分)
通过放置您的hive-site.xml 来完成配置Hive, core-site.xml(用于安全性配置)和hdfs-site.xml(用于 conf /.
中的HDFS配置文件使用Hive时,必须使用Hive实例化SparkSession 支持,包括连接到持久性Hive Metastore, 支持Hive serdes和Hive用户定义的函数。做的用户 没有现有的Hive部署仍然可以启用Hive支持。 当未由hive-site.xml配置时,自动上下文 在当前目录中创建metastore_db 并创建一个目录 由spark.sql.warehouse.dir配置,默认为该目录 Spark应用程序所在的当前目录中的spark-warehouse 开始
您需要向hive-site.xml
目录添加resource
配置文件。
这是使用hive工作的spark所需的最小值(将主机设置为配置单元的主机):
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://host:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
</configuration>