Spark2 Dataset<Row> saveAsTable 没有更新 HIVE 元数据
Spark2 Dataset<Row> saveAsTable didn't update HIVE metadata
我正在使用 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 中没有记录 table。
但是如果我打开 spark-shell
来执行类似的代码,它就可以了。
发生这种情况是因为 spark-submit
吗?请帮忙。
找到原因了,我的hadoop和spark部署在不同的docker容器里,我把hive-site.xml放在spark容器里,所以当我运行 spark的时候就可以了-shell.
但是depoly模式为"cluster"时,driver在yarn上运行ning,所以这个driver看不到spark容器中的hive-site.xml,解决方法是把hive -site.xml 进入 hadoop conf 文件夹 (etc/hadoop).
我正在使用 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 中没有记录 table。
但是如果我打开 spark-shell
来执行类似的代码,它就可以了。
发生这种情况是因为 spark-submit
吗?请帮忙。
找到原因了,我的hadoop和spark部署在不同的docker容器里,我把hive-site.xml放在spark容器里,所以当我运行 spark的时候就可以了-shell.
但是depoly模式为"cluster"时,driver在yarn上运行ning,所以这个driver看不到spark容器中的hive-site.xml,解决方法是把hive -site.xml 进入 hadoop conf 文件夹 (etc/hadoop).