【问题标题】:howto add hive properties at runtime in spark-shell如何在运行时在 spark-shell 中添加配置单元属性
【发布时间】:2019-03-28 16:57:09
【问题描述】:

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

【问题讨论】:

  • 您可以在 .hql 查询中使用 set <property.you.want.to.set>;
  • 我试过这个,但这似乎没有效果。同样设置 sqlContext.setConf("hive.metastore.warehouse.dir", "/path") 不起作用
  • 可以看到spark-sql其实有一个--hiveconf参数。这在 spark-shell 中不可用
  • @hbogert 你能解决这个问题吗?我遇到了类似的事情:stackoverflow.com/questions/37061544/…
  • 嗨@hbogert 你有机会在下面尝试我的建议吗?我很好奇这是否对你有用

标签: apache-spark hive


【解决方案1】:

我遇到了同样的问题,对我来说,它通过从 Spark (2.4.0) 设置 Hive 属性来工作。请在下面通过 spark-shell、spark-submit 和 SparkConf 找到所有选项。

选项 1(火花壳)

spark-shell --conf spark.hadoop.hive.metastore.warehouse.dir=some_path\metastore_db_2

最初我尝试使用 spark-shell 并将 hive.metastore.warehouse.dir 设置为 some_path\metastore_db_2。然后我收到下一个警告:

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

虽然当我创建一个 Hive 表时:

bigDf.write.mode("overwrite").saveAsTable("big_table")

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

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

选项 2(火花提交)

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

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

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)

接下来我提交了作业:

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 

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

选项 3 (SparkConf)

通过 Spark 代码中的 SparkSession。

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 扩展属性才能按预期工作?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多