我是 Spark 的新手,需要帮助来弄清楚为什么我的 Hive 数据库无法通过 Spark 执行数据加载。
背景:
我在一台机器上运行 Hive、Spark 和我的 Java 程序。它是 VirtualBox 上的 Cloudera QuickStart VM,CDH5.4x。
我已经下载了预构建的 Spark 1.3.1。
我正在使用与 VM 捆绑在一起的 Hive,并且可以通过 Spark-shell 和 Hive cmd 行运行 hive 查询而没有任何问题。这包括运行命令:
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 文件夹。
- 我对此xml进行了更改。我注意到我有两个 hive-site.xml - 一个是自动生成的,另一个具有 Hive 执行参数。我将两者合并为一个 hive-site.xml。
使用的代码(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 中。除了,在我重新启动我的虚拟机后,它已经停止工作。
当我运行show databases
Hive 查询时,我得到一个结果说
result
default
而不是 Hive 中的数据库,它们是
default
test_spark
我还注意到在我的项目文件夹中创建了一个名为 metastore_db 的文件夹。通过谷歌搜索,我知道当 Spark 无法连接到 Hive 元存储时会发生这种情况,因此它会创建一个自己的元存储。我以为我已经解决了这个问题,但显然没有。
我错过了什么?