2016-08-19 2 views
4

Я запускаю искру 2, куст, hadoop на локальной машине, и я хочу использовать искровой 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(); в свече скорлупе даст me the error:

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

Пища для размышлений ... Контекст был создан ранее, и поскольку он не может быть изменен ... – 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") 

Вам не нужно импортировать SparkContext или создать его перед SparkSession

Смежные вопросы