wake-up-neo.net

Warum meldet Spark beim Arbeiten mit DataFrames "Java.net.URISyntaxException: Relativer Pfad in absoluter URI"?

Ich verwende Spark lokal auf einem Windows-Computer. Ich konnte die Spark-Shell erfolgreich starten und auch Textdateien als RDDs einlesen. Ich konnte auch die verschiedenen Online-Tutorials zu diesem Thema mitverfolgen und verschiedene Operationen an den RDDs durchführen.

Wenn ich jedoch versuche, eine RDD in einen DataFrame zu konvertieren, erhalte ich eine Fehlermeldung. Das mache ich:

val sqlContext = new org.Apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._

//convert rdd to df
val df = rddFile.toDF()

Dieser Code generiert eine lange Reihe von Fehlermeldungen, die sich auf die folgenden beziehen:

Caused by: Java.lang.IllegalArgumentException: Java.net.URISyntaxException: Relative path in absolute URI: file:C:/Users/spark/spark-warehouse
        at org.Apache.hadoop.fs.Path.initialize(Path.Java:205)
        at org.Apache.hadoop.fs.Path.<init>(Path.Java:171)
        at org.Apache.hadoop.Hive.metastore.Warehouse.getWhRoot(Warehouse.Java:159)
        at org.Apache.hadoop.Hive.metastore.Warehouse.getDefaultDatabasePath(Warehouse.Java:177)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB_core(HiveMetaStore.Java:600)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.Java:620)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.Java:461)
        at org.Apache.hadoop.Hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.Java:66)
        at org.Apache.hadoop.Hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.Java:72)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.Java:5762)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.Java:199)
        at org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.Java:74)
        ... 85 more
Caused by: Java.net.URISyntaxException: Relative path in absolute URI: file:C:/Users/spark/spark-warehouse
        at Java.net.URI.checkPath(URI.Java:1823)
        at Java.net.URI.<init>(URI.Java:745)
        at org.Apache.hadoop.fs.Path.initialize(Path.Java:202)
        ... 96 more

Die gesamte Stapelverfolgung folgt.

16/08/16 12:36:20 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException
16/08/16 12:36:20 WARN Hive: Failed to access metastore. This class should not accessed in runtime.
org.Apache.hadoop.Hive.ql.metadata.HiveException: Java.lang.RuntimeException: Unable to instantiate org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient
        at org.Apache.hadoop.Hive.ql.metadata.Hive.getAllDatabases(Hive.Java:1236)
        at org.Apache.hadoop.Hive.ql.metadata.Hive.reloadFunctions(Hive.Java:174)
        at org.Apache.hadoop.Hive.ql.metadata.Hive.<clinit>(Hive.Java:166)
        at org.Apache.hadoop.Hive.ql.session.SessionState.start(SessionState.Java:503)
        at org.Apache.spark.sql.Hive.client.HiveClientImpl.<init>(HiveClientImpl.scala:171)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
        at org.Apache.spark.sql.Hive.client.IsolatedClientLoader.createClient(IsolatedClientLoader.scala:258)
        at org.Apache.spark.sql.Hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:359)
        at org.Apache.spark.sql.Hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:263)
        at org.Apache.spark.sql.Hive.HiveSharedState.metadataHive$lzycompute(HiveSharedState.scala:39)
        at org.Apache.spark.sql.Hive.HiveSharedState.metadataHive(HiveSharedState.scala:38)
        at org.Apache.spark.sql.Hive.HiveSharedState.externalCatalog$lzycompute(HiveSharedState.scala:46)
        at org.Apache.spark.sql.Hive.HiveSharedState.externalCatalog(HiveSharedState.scala:45)
        at org.Apache.spark.sql.Hive.HiveSessionState.catalog$lzycompute(HiveSessionState.scala:50)
        at org.Apache.spark.sql.Hive.HiveSessionState.catalog(HiveSessionState.scala:48)
        at org.Apache.spark.sql.Hive.HiveSessionState$$anon$1.<init>(HiveSessionState.scala:63)
        at org.Apache.spark.sql.Hive.HiveSessionState.analyzer$lzycompute(HiveSessionState.scala:63)
        at org.Apache.spark.sql.Hive.HiveSessionState.analyzer(HiveSessionState.scala:62)
        at org.Apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49)
        at org.Apache.spark.sql.Dataset$.ofRows(Dataset.scala:64)
        at org.Apache.spark.sql.SparkSession.baseRelationToDataFrame(SparkSession.scala:382)
        at org.Apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:143)
        at org.Apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:401)
        at org.Apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:342)
        at $line14.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:24)
        at $line14.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:29)
        at $line14.$read$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:31)
        at $line14.$read$$iw$$iw$$iw$$iw$$iw.<init>(<console>:33)
        at $line14.$read$$iw$$iw$$iw$$iw.<init>(<console>:35)
        at $line14.$read$$iw$$iw$$iw.<init>(<console>:37)
        at $line14.$read$$iw$$iw.<init>(<console>:39)
        at $line14.$read$$iw.<init>(<console>:41)
        at $line14.$read.<init>(<console>:43)
        at $line14.$read$.<init>(<console>:47)
        at $line14.$read$.<clinit>(<console>)
        at $line14.$eval$.$print$lzycompute(<console>:7)
        at $line14.$eval$.$print(<console>:6)
        at $line14.$eval.$print(<console>)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:498)
        at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:786)
        at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:1047)
        at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:638)
        at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:637)
        at scala.reflect.internal.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
        at scala.reflect.internal.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:19)
        at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:637)
        at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:569)
        at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:565)
        at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:807)
        at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:681)
        at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:395)
        at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:415)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:923)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
        at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
        at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:909)
        at org.Apache.spark.repl.Main$.doMain(Main.scala:68)
        at org.Apache.spark.repl.Main$.main(Main.scala:51)
        at org.Apache.spark.repl.Main.main(Main.scala)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:498)
        at org.Apache.spark.deploy.SparkSubmit$.org$Apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:729)
        at org.Apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
        at org.Apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
        at org.Apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
        at org.Apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: Java.lang.RuntimeException: Unable to instantiate org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient
        at org.Apache.hadoop.Hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.Java:1523)
        at org.Apache.hadoop.Hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.Java:86)
        at org.Apache.hadoop.Hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.Java:132)
        at org.Apache.hadoop.Hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.Java:104)
        at org.Apache.hadoop.Hive.ql.metadata.Hive.createMetaStoreClient(Hive.Java:3005)
        at org.Apache.hadoop.Hive.ql.metadata.Hive.getMSC(Hive.Java:3024)
        at org.Apache.hadoop.Hive.ql.metadata.Hive.getAllDatabases(Hive.Java:1234)
        ... 74 more
Caused by: Java.lang.reflect.InvocationTargetException
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
        at org.Apache.hadoop.Hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.Java:1521)
        ... 80 more
Caused by: Java.lang.IllegalArgumentException: Java.net.URISyntaxException: Relative path in absolute URI: file:C:/Users/spark/spark-warehouse
        at org.Apache.hadoop.fs.Path.initialize(Path.Java:205)
        at org.Apache.hadoop.fs.Path.<init>(Path.Java:171)
        at org.Apache.hadoop.Hive.metastore.Warehouse.getWhRoot(Warehouse.Java:159)
        at org.Apache.hadoop.Hive.metastore.Warehouse.getDefaultDatabasePath(Warehouse.Java:177)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB_core(HiveMetaStore.Java:600)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.Java:620)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.Java:461)
        at org.Apache.hadoop.Hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.Java:66)
        at org.Apache.hadoop.Hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.Java:72)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.Java:5762)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.Java:199)
        at org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.Java:74)
        ... 85 more
Caused by: Java.net.URISyntaxException: Relative path in absolute URI: file:C:/Users/spark/spark-warehouse
        at Java.net.URI.checkPath(URI.Java:1823)
        at Java.net.URI.<init>(URI.Java:745)
        at org.Apache.hadoop.fs.Path.initialize(Path.Java:202)
        ... 96 more
19
Dataminer

Es handelt sich hierbei um das Problem " SPARK-15565" in Spark 2.0 unter Windows mit einer einfachen Lösung (die scheinbar Teil der Codebase von Spark ist die möglicherweise bald als 2.0.2 oder 2.1.0 veröffentlicht wird).

Die Lösung in Spark 2.0.0 besteht darin, spark.sql.warehouse.dir auf ein ordnungsgemäß referenziertes Verzeichnis zu setzen, beispielsweise file:///c:/Spark/spark-2.0.0-bin-hadoop2.7/spark-warehouse, das /// (dreifache Schrägstriche) verwendet.

Starten Sie spark-Shell mit dem --conf-Argument wie folgt:

spark-Shell --conf spark.sql.warehouse.dir=file:///c:/tmp/spark-warehouse

Oder erstellen Sie eine SparkSession in Ihrer Spark-Anwendung unter Verwendung des neuen Builder-Musters wie folgt:

import org.Apache.spark.sql.SparkSession
SparkSession spark = SparkSession
  .builder()
  .config("spark.sql.warehouse.dir", "file:///c:/tmp/spark-warehouse")
  .getOrCreate()

Oder erstellen Sie conf/spark-defaults.conf mit folgendem Inhalt:

spark.sql.warehouse.dir file:///c:/tmp/spark-warehouse
35
Jacek Laskowski

Wenn Sie den Code zwar korrigieren möchten, den vorhandenen Code jedoch nicht berühren, können Sie ihn auch von den Systemeigenschaften aus übergeben, sodass sich die nachfolgenden Funkeninitialisierungen nicht ändern.

System.setProperty(
    "spark.sql.warehouse.dir", 
    s"file:///${System.getProperty("user.dir")}/spark-warehouse"
    .replaceAll("\\\\", "/")
)

Beachten Sie, dass dies auch das aktuelle Arbeitsverzeichnis ist, das durch "c:/tmp /" ersetzt werden kann, oder an einem beliebigen Ort, an dem Sie das Spark-Warehouse-Verzeichnis haben möchten.

1
arntg

Ich habe die Eigenschaft spark.sql.warehouse.dir gesetzt, um den Fehler in meinem vorhandenen Code zu beheben

System.setProperty("spark.sql.warehouse.dir", "file:///C:/spark-warehouse");

Hier ist das Code-Snippet

System.setProperty("hadoop.home.dir", "c:/winutil/");
System.setProperty("spark.sql.warehouse.dir", "file:///C:/spark-warehouse");
val conf = new SparkConf().setAppName("test").setMaster("local[*]")
val sc = new SparkContext(conf)
val lines = sc.textFile("C:/user.txt")
0
G G

Setzen Sie einfach config ("spark.sql.warehouse.dir", "file: /// tmp/spark-warehouse") .

Es ist nicht nötig, "C: /" einzugeben.

Der Spark-Treiber erstellt automatisch einen Ordner im Verzeichnis/tmp/spark-warehouse. Wenn es Windows ist, wird es unter "C: /" liegen. Das "C:" Laufwerk funktioniert nicht, wenn der Master unter Windows nicht lokal ist.

0
Feng