首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在运行时在spark-shell中添加配置单元属性

如何在运行时在spark-shell中添加配置单元属性
EN

Stack Overflow用户
提问于 2015-09-15 21:00:33
回答 1查看 10.1K关注 0票数 7

如何在运行时设置像:hive.metastore.warehouse.dir这样的配置单元属性?或者至少采用一种更动态的方式来设置类似上面的属性,而不是将其放入spark_home/conf/hive-site.xml这样的文件中

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-02 22:54:26

我也面临着同样的问题,对我来说,它是通过设置Spark (2.4.0)中的Hive属性来实现的。请在下面通过spark-shell、spark-submit和SparkConf找到所有选项。

选项1 (spark-shell)

代码语言:javascript
复制
spark-shell --conf spark.hadoop.hive.metastore.warehouse.dir=some_path\metastore_db_2

最初,我尝试在hive.metastore.warehouse.dir设置为some_path\metastore_db_2的情况下使用spark-shell。然后我会得到下一个警告:

spark警告:忽略非spark配置属性: hive.metastore.warehouse.dir=C:\winutils\hadoop-2.7.1\bin\metastore_db_2

尽管当我使用以下命令创建配置单元表时:

代码语言:javascript
复制
bigDf.write.mode("overwrite").saveAsTable("big_table")

蜂窝元数据正确存储在metastore_db_2文件夹下。

当我使用spark.hadoop.hive.metastore.warehouse.dir时,警告消失了,结果仍然保存在metastore_db_2目录中。

选项2(火花提交)

为了在使用spark-submit提交作业时使用hive.metastore.warehouse.dir,我遵循了以下步骤。

首先,我用Hive写了一些代码来保存一些随机数据:

代码语言:javascript
复制
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

val sparkConf = new SparkConf().setAppName("metastore_test").setMaster("local")
val spark = SparkSession.builder().config(sparkConf).getOrCreate()

import spark.implicits._
var dfA = spark.createDataset(Seq(
      (1, "val1", "p1"),
      (2, "val1", "p2"),
      (3, "val2", "p3"),
      (3, "val3", "p4"))).toDF("id", "value", "p")

dfA.write.mode("overwrite").saveAsTable("metastore_test")

spark.sql("select * from metastore_test").show(false)

接下来,我使用以下命令提交作业:

代码语言:javascript
复制
spark-submit --class org.tests.Main \
        --conf spark.hadoop.hive.metastore.warehouse.dir=C:\winutils\hadoop-2.7.1\bin\metastore_db_2 
        spark-scala-test_2.11-0.1.jar 

已在C:\winutils\hadoop-2.7.1\bin\metastore_db_2文件夹下正确创建了metastore_test表。

选项3 (SparkConf)

通过火花代码中的SparkSession。

代码语言:javascript
复制
val sparkConf = new SparkConf()
      .setAppName("metastore_test")
      .set("spark.hadoop.hive.metastore.warehouse.dir", "C:\\winutils\\hadoop-2.7.1\\bin\\metastore_db_2")
      .setMaster("local")

这种尝试也是成功的。

仍然存在的问题是,为什么我必须用spark.hadoop扩展属性才能按预期工作?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32586793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档