2016-11-22 1 views
0

Spark 환경의 Linux 파일 시스템에서 JSON 파일을로드하는 방법을 관리하는 데 어려움을 겪고 있습니다. 나는 그런데 Spark 1.6을 사용하고있다.Linux FS의 파일을 spark submit with

파일은 /home/wymeka/fields.json에 위치하고 있으며 나는이 명령 줄 것을 시도하고있다 :

spark-submit --master yarn transform.jar --schema-file "file:///home/wymeka/fields.json" --cache 

이 파일이 같다 로딩을 담당 Main 클래스에서 줄을 다음과

을 이 모든 사용
val df_schema = sqlContext.read.json(pathToSchemaFile) 

, 다음과 같은 예외로 나를 인도 :

Caused by: java.io.FileNotFoundException: File file:/home/wymeka/fields.json does not exist 
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:542) 
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:755) 
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:532) 
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:425) 
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:140) 
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:778) 
    at org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:109) 
    at org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 
    at org.apache.spark.rdd.HadoopRDD$$anon$1.<init>(HadoopRDD.scala:237) 
    at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:208) 
    at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:101) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) 
    at org.apache.spark.scheduler.Task.run(Task.scala:89) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

을 아니면 내가이 쉼표를하려고 할 때 차 라인 :

java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:%5C/%5C/%5C/home%5C/wymeka%5C/fields.json 
    at org.apache.hadoop.fs.Path.initialize(Path.java:206) 
    at org.apache.hadoop.fs.Path.<init>(Path.java:172) 
    at org.apache.spark.sql.execution.datasources.ResolvedDataSource$$anonfun$11.apply(ResolvedDataSource.scala:170) 
    at org.apache.spark.sql.execution.datasources.ResolvedDataSource$$anonfun$11.apply(ResolvedDataSource.scala:169) 
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251) 
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251) 
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) 
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251) 
    at scala.collection.mutable.ArrayOps$ofRef.flatMap(ArrayOps.scala:108) 
    at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:169) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:119) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:109) 
    at org.apache.spark.sql.DataFrameReader.json(DataFrameReader.scala:244) 
    at com.nexys.spark.transform.Main$.main(Main.scala:80) 
    at com.nexys.spark.transform.Main.main(Main.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731) 
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Caused by: java.net.URISyntaxException: Relative path in absolute URI: file:%5C/%5C/%5C/home%5C/wymeka%5C/fields.json 
    at java.net.URI.checkPath(URI.java:1804) 
    at java.net.URI.<init>(URI.java:752) 
    at org.apache.hadoop.fs.Path.initialize(Path.java:203) 
    ... 24 more 

어떤 도움을 매우 환영받을 것이다 :

spark-submit --master yarn transform.jar --schema-file "file:\/\/\/home\/imachraoui\/fields.json" --cache 

나는 다른 예외를 얻을.

spark-submit --files /home/wymeka/fields.json --master yarn transform.jar --schema-file "fields.json" --cache 

따라서 아래와 같이 내 스파크 코드를 변경하지 :

val df_schema = sqlContext.read.json(SparkFiles.getRootDirectory()+"/"+pathToSchemaFile) 

하지만 여전히 아무것도


내가 나중에이 명령 줄을 시도

을 편집! (- 마스터 실 매개 변수) 파일이 동일한 경로에있는 모든 작업자 노드에서 사용 가능해야한다는

+0

시도해 보셨습니까? "/home/wymeka/fields.json"? – user4342532

+0

예 해봤습니다. 그것은 HDFS에서 리눅스 FS가 아닌 – wymeka

+0

에있는 그것을 찾는 것을 시도하는처럼 보인다 그 작동해야한다. 이것은 필자와 관련이 없다고 생각하게 만들고, 응용 프로그램이 파일을 읽을 수있는 권한을 가지고 있는지 확인합니다. –

답변

1

, 그렇지 않으면 그것은 HDFS 경로

+0

마스터 노드에서 제공하는 것으로 충분하다고 생각했습니다. 내가 틀렸어? – wymeka

+0

로컬 모드에서 실행 중이라면 클러스터가 올바르게 작동하지만 클러스터 모드에서는 hdfs 경로 여야합니다. – SanthoshPrasad

0

당신은 YARN 클러스터에 응용 프로그램을 제출해야한다. Spark은 지정한 파일이 클러스터의 /home/wymeka/fields.json 경로로 로컬에서 사용 가능할 것으로 기대합니다.

프로그램을 로컬에서 실행하려면 spark-submit 매개 변수를 변경해야합니다.

--master local[*] 

또는 YARN 클러스터에 배포하려는 경우 적절한 hdfs 위치를 지정하십시오.

Launching Applications with spark-submit