无法通过Spark加载Hive表

时间:2015-07-23 18:32:55

标签: apache-spark apache-spark-sql apache-spark-1.3

我是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行运行配置单元查询,没有任何问题。这包括运行命令:

    LOAD DATA INPATH 'hdfs://quickstart.cloudera:8020/user/cloudera/test_table/result.parquet/' INTO TABLE test_spark.test_table PARTITION(part = '2015-08-21');
    
  4. 问题:

    我正在编写一个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();
      
    3. 所以,这很有效。我可以将数据加载到Hive中。除了我重新启动我的VM后,它已停止工作。

      当我运行show databases Hive查询时,我得到的结果是

      result
      default
      

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

      default
      test_spark
      

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

      我错过了什么?

0 个答案:

没有答案