apache-spark - 如何在 Spark-Shell 中运行时添加 Hive 属性

标签 apache-spark hive

如何在运行时设置 Hive 属性,例如:hive.metastore.warehouse.dir?或者至少有一种更动态的方式来设置如上所述的属性,而不是将其放入像 spark_home/conf/hive-site.xml

这样的文件中

最佳答案

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

选项 1(spark-shell)

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。然后我收到下一个警告:

Warning: Ignoring non-spark config property: 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)

为了在使用 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 扩展该属性才能按预期工作?

关于apache-spark - 如何在 Spark-Shell 中运行时添加 Hive 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32586793/

相关文章:

apache-spark - 在 Spark 2.1.0 中启用 _metadata 文件

regex - hive 正则表达式不工作

maven - java.lang.IllegalArgumentException:实例化 'org.apache.spark.sql.hive.HiveSessionState'时出错:使用spark session 读取csv文件时

hadoop - 使用单台机器时发生Spark RDD联合OOM错误

scala - 如果列表中存在,则从列中删除单词

scala - 'new HiveContext' 需要 X11 显示? com.trend.iwss.jscan?

hadoop - Apache hive : LOAD DATA vs INSERT OVERWRITE OUTPUT FILE SIZE

hadoop - 如何使 hive 返回行更快? (例如,限制10)

java - Apache Spark 连接具有相同列名(具有不同数据)的表的数据集

python - 使用 reducebykey 错误 : int object is unsubscriptable