Scala 如何访问配置单元中的现有表?
我正在尝试使用scala从spark应用程序访问HIVE 我的代码:Scala 如何访问配置单元中的现有表?,scala,apache-spark,hive,apache-spark-sql,Scala,Apache Spark,Hive,Apache Spark Sql,我正在尝试使用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 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控制台下,我可以看到该表,并可以运行Select*fromtest
。所有都位于“用户/蜂巢/仓库”位置。为了进行测试,我还尝试了使用spark创建表,只是为了找到表的位置
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-------------------")
这段代码也正确执行(带有成功注释),但奇怪的是我可以从配置单元控制台找到这个表
即使我使用select*fromtbls
在mysql中(在我的设置中,我将mysql配置为配置单元的metastore),我没有找到从spark创建的表
spark的位置与蜂巢控制台不同吗
如果需要从spark访问配置单元中的现有表,我必须做什么?从:
(我强调了相关部分)
配置配置单元是通过放置您的配置单元站点.xml来完成的,
core-site.xml(用于安全配置)和hdfs-site.xml(用于
在conf/中的HDFS配置文件
使用配置单元时,必须使用配置单元实例化SparkSession
支持,包括与持久配置单元元存储的连接,
支持配置单元服务器和配置单元用户定义函数。用户谁做
没有现有配置单元部署仍可以启用配置单元支持。
当未通过hive-site.xml配置时,上下文将自动
在当前目录中创建metastore_db并创建一个目录
由spark.sql.warehouse.dir配置,默认为目录
spark应用程序所在的当前目录中的spark仓库
开始
您需要将hive site.xml
config文件添加到resource
dir。
以下是spark使用配置单元(将主机设置为配置单元的主机)所需的最小值:
hive.metastore.uris
thrift://host:9083
metastore主机的IP地址(或完全限定的域名)和端口
非常感谢,你救了我一天,如果是这样的话,我可以在spark conf中处理好hive-site.xml后运行并连接现有的配置单元设置。但是当我从IDE运行代码时,intellij在我的情况下,(不提交),我如何在代码中添加hive-site.xml,你有两个选择。您可以将该文件添加到资源目录(与配置文件位于同一位置),或将该值设置为系统属性(在初始化spark会话之前),即system.setProperty(“hive.metastore.uris”thrift://host:9083“”
<?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>