2016-08-19 2 views
4

Ich bin Funke 2, Bienenstock, Hadoop am lokalen Rechner, und ich möchte mit Spark sql Daten aus Bienenstock Tabelle zu lesen.sparkSession/sparkContext kann nicht Hadoop-Konfiguration

Es funktioniert alles gut, wenn ich hadoop bei Standard ausgeführt haben hdfs://localhost:9000, aber wenn ich an einen anderen Port in Kern-site.xml ändern:

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

Ausführen eines einfachen SQL-spark.sql("select * from archive.tcsv3 limit 100").show(); in funken Shell geben mir der Fehler:

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; 
..... 

ich die AlreadyExistsException vor erhalten, die offenbar nicht um das Ergebnis zu beeinflussen.

Ich kann es machen arbeiten, um eine neue sparkContext erstellen:

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() 

Meine Frage ist, warum die anfängliche sparkSession/sparkContext nicht die richtige Konfiguration bekommen haben? Wie kann ich es reparieren? Vielen Dank!

+0

Denkanstösse importieren ... Der Kontext wurde vorher erstellt und kann nicht geändert werden ... – jgp

Antwort

1

Wenn Sie SparkSession verwenden und Sie wollen Konfiguration auf dem der Funke Zusammenhang 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") 

Sie brauchen nicht dann einstellen verwenden SparkContext oder erstellt sie vor dem SparkSession