我是Spark的新手,需要帮助找出为什么我的Hive数据库无法通过Spark执行数据加载。
背景:
我在一台机器上运行Hive,Spark和我的Java程序。它是VirtualBox上的Cloudera QuickStart VM,CDH5.4x。
我已经下载了预先构建的Spark 1.3.1。
我正在使用与VM捆绑在一起的Hive,可以通过Spark-shell和Hive cmd行运行配置单元查询,没有任何问题。这包括运行命令:
LOAD DATA INPATH 'hdfs://quickstart.cloudera:8020/user/cloudera/test_table/result.parquet/' INTO TABLE test_spark.test_table PARTITION(part = '2015-08-21');
问题:
我正在编写一个Java程序来从Cassandra读取数据并将其加载到Hive中。我已将Cassandra的结果以镶木地板格式保存在名为' result.parquet'的文件夹中。
现在我想把它加载到Hive中。为此,我
将Hive-site.xml复制到Spark conf文件夹。
使用的代码(Java):
HiveContext hiveContext = new
HiveContext(JavaSparkContext.toSparkContext(sc));
hiveContext.sql("show databases").show();
hiveContext.sql("LOAD DATA INPATH
'hdfs://quickstart.cloudera:8020/user/cloudera/test_table/result.parquet/'
INTO TABLE test_spark.test_table PARTITION(part = '2015-08-21')").show();
所以,这很有效。我可以将数据加载到Hive中。除了我重新启动我的VM后,它已停止工作。
当我运行show databases
Hive查询时,我得到的结果是
result
default
而不是Hive中的数据库,它们是
default
test_spark
我还注意到在我的项目文件夹中创建了一个名为metastore_db的文件夹。从谷歌搜索,我知道当Spark无法连接到Hive Metastore时会发生这种情况,所以它创建了自己的一个。我想我已经解决了这个问题,但显然没有。
我错过了什么?