2016-08-19 143 views
4

我在本地機器上運行spark 2,hive,hadoop,並且我想使用spark sql從配置單元表中讀取數據。sparkSession/sparkContext無法獲得hadoop配置

它工作一切正常,當我的Hadoop在默認hdfs://localhost:9000運行,但如果我更改爲不同的端口核心-site.xml中:

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

火花外殼運行一個簡單的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沒有得到正確的配置?我該如何解決它?謝謝!

+0

深思之前導入SparkContext或創建它...上下文創建之前,因爲它不能改變... – jgp

回答

1

如果您正在使用SparkSession,你要設置的火花上下文配置,然後使用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") 

你不需要SparkSession