2

我是 Spark 的新手,需要帮助来弄清楚为什么我的 Hive 数据库无法通过 Spark 执行数据加载。

背景:

  1. 我在一台机器上运行 Hive、Spark 和我的 Java 程序。它是 VirtualBox 上的 Cloudera QuickStart VM,CDH5.4x。

  2. 我已经下载了预构建的 Spark 1.3.1。

  3. 我正在使用与 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 中。为此,我

  1. 将 Hive-site.xml 复制到 Spark conf 文件夹。

    • 我对此xml进行了更改。我注意到我有两个 hive-site.xml - 一个是自动生成的,另一个具有 Hive 执行参数。我将两者合并为一个 hive-site.xml。
  2. 使用的代码(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 databasesHive 查询时,我得到一个结果说

result
default

而不是 Hive 中的数据库,它们是

default
test_spark

我还注意到在我的项目文件夹中创建了一个名为 metastore_db 的文件夹。通过谷歌搜索,我知道当 Spark 无法连接到 Hive 元存储时会发生这种情况,因此它会创建一个自己的元存储。我以为我已经解决了这个问题,但显然没有。

我错过了什么?

4

0 回答 0