【发布时间】:2018-04-02 10:12:49
【问题描述】:
我正在尝试使用 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。所有都在“用户/配置单元/仓库”位置。只是为了测试,我也尝试从 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-------------------")
此代码也正确执行(带有成功说明),但奇怪的是我可以从 hive 控制台找到此表。
即使我在 mysql 中使用select * from TBLS;(在我的设置中,我将 mysql 配置为 hive 的元存储),我也没有找到从 spark 创建的那些表。
spark 位置是否与 hive 控制台不同?
如果我需要从 spark 访问 hive 中的现有表,我该怎么办?
【问题讨论】:
标签: scala apache-spark hive apache-spark-sql