【问题标题】:sparkSession/sparkContext can not get hadoop configurationsparkSession/sparkContext 无法获取 hadoop 配置
【发布时间】:2016-08-19 11:02:54
【问题描述】:

我在本地机器上运行 spark 2、hive、hadoop,我想使用 spark sql 从 hive 表中读取数据。

当我在默认 hdfs://localhost:9000 下运行 hadoop 时一切正常,但如果我在 core-site.xml 中更改为不同的端口:

<name>fs.defaultFS</name>
<value>hdfs://localhost:9099</value>

在 spark-shell 中运行一个简单的 sql spark.sql("select * from archive.tcsv3 limit 100").show(); 会给我错误:

ERROR metastore.RetryingHMSHandler: AlreadyExistsException(message:Database default already exists)
.....
From local/147.214.109.160 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused;
.....

我之前得到了 AlreadyExistsException,这似乎不会影响结果。

我可以通过创建一个新的 sparkContext 来使其工作:

import org.apache.spark.SparkContext
import org.apache.spark.sql.SparkSession
sc.stop()
var sc = new SparkContext()
val session = SparkSession.builder().master("local").appName("test").enableHiveSupport().getOrCreate()
session.sql("show tables").show()

我的问题是,为什么最初的 sparkSession/sparkContext 没有得到正确的配置?我该如何解决?谢谢!

【问题讨论】:

  • 深思熟虑...上下文是事先创建的,因为它无法更改...

标签: hadoop apache-spark


【解决方案1】:

如果您使用的是SparkSession,并且您想在 spark 上下文中设置配置,请使用 session.sparkContext

val session = SparkSession
  .builder()
  .appName("test")
  .enableHiveSupport()
  .getOrCreate()
import session.implicits._

session.sparkContext.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")

您无需导入SparkContext 或在SparkSession 之前创建它

【讨论】:

  • 另外,您也可以将.config() 插入到构建器方法链中:SparkSettion.builder().appName("app-name").config("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem").getOrCreate() 这比编写另一个语句更简单。 (我测试了 Apache Spark v2.4.3)
猜你喜欢
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2016-11-08
  • 2018-08-20
  • 2017-08-13
相关资源
最近更新 更多