Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何访问配置单元中的现有表?_Scala_Apache Spark_Hive_Apache Spark Sql - Fatal编程技术网

Scala 如何访问配置单元中的现有表?

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)

我正在尝试使用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控制台下,我可以看到该表,并可以运行
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>