spark2数据集< row>saveastable没有更新配置单元元数据

hc8w905p  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(363)

我使用的是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

我可以在配置单元元存储数据库中看到,tbls表中没有记录。
但如果我打开 spark-shell 为了执行类似的代码,它可以工作。
这是因为 spark-submit ? 请帮忙。

ac1kyiln

ac1kyiln1#

我找到了原因,我的hadoop和spark部署在不同的docker容器中,我把hive-site.xml放在spark容器中,所以在运行sparkshell时它可以工作。
但是当depoly模式为“cluster”时,驱动程序运行在yarn上,因此这个驱动程序在spark容器中看不到hive-site.xml,解决方案是将hive-site.xml放入hadoop conf文件夹(etc/hadoop)。

相关问题