Spark2数据集<row> saveAsTable未更新HIVE元数据

时间:2017-07-13 11:15:29

标签: apache-spark hive hadoop2

我正在使用spark 2.1.0,这是最简单的代码:

public static void main(String[] args) {
    SparkSession spark = SparkSession.builder().enableHiveSupport().appName("Spark Test").getOrCreate();
    List<Employee> employees = ImmutableList.of(new Employee("a"), new Employee("b"), new Employee("c"));
    Dataset<Row> df = spark.createDataFrame(employees, Employee.class);
    df.write().saveAsTable("Employee_" + new Random().nextInt(100));
}

我通过spark-submit CLI提交它:

spark-submit --class test.spark.Driver --master yarn --deploy-mode cluster

我可以看到数据保存在HDFS上:/usr/hive/warehouse/Employee_23,但是当我运行spark.sql("select * from Employee_23")时,出现了错误:

Table or view not found

我可以在hive Metastore数据库中看到,TBLS表中没有记录。

但是,如果我打开spark-shell来执行类似的代码,它就会起作用。

这是因为spark-submit而发生的吗?请帮忙。

1 个答案:

答案 0 :(得分:0)

我发现原因,我的hadoop和spark部署在不同的docker容器中,我把hive-site.xml放在spark容器中,所以当我运行spark-shell时它就可以工作。

但是当depoly模式是&#34; cluster&#34;时,驱动程序在yarn上运行,所以这个驱动程序无法在spark容器中看到hive-site.xml,解决方案是放在hive-site.xml进入hadoop conf文件夹(etc / hadoop)。