2017-05-03 15 views
1

sparkを使ってハイブで生成されたシーケンスファイルを読み込もうとしています。私がファイルにアクセスしようとすると、私はorg.apache.spark.SparkExceptionに直面しています:ジョブがステージの失敗によって中断されました:タスクがシリアライズできません:java.io.NotSerializableException:スパークJavaを使用したシーケンスファイルの読み込み問題

私はこの問題の回避策クラスはシリアライズ可能ですが、私はまだ問題に直面しています。私はここにコードスニペットを書いています、私がここで何が不足しているか教えてください。

BytesWritableデータ型などの問題が原因ですか。

JavaPairRDD<BytesWritable, Text> fileRDD = javaCtx.sequenceFile("hdfs://path_to_the_file", BytesWritable.class, Text.class); 
List<String> result = fileRDD.map(new Function<Tuple2<BytesWritables,Text>,String>(){ 
public String call (Tuple2<BytesWritable,Text> row){ 
return row._2.toString()+"\n"; 

}).collect(); 
} 
+0

は、エラーのスタックトレースを投稿してくださいスパークでそれを行うことができますし、全体のコードを投稿することができれば、それが参考になります。 – code

答えて

0

ここ

17/05/04 19:00:54 ERROR ApplicationMaster: User class threw exception: org.apache.spark.SparkException: Task not serializable 
    org.apache.spark.SparkException: Task not serializable 
      at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:304) 
      at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:294) 
      at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:122) 
      at org.apache.spark.SparkContext.clean(SparkContext.scala:2078) 
      at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:331) 
      at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:330) 
      at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150) 
      at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:111) 
      at org.apache.spark.rdd.RDD.withScope(RDD.scala:323) 
      at org.apache.spark.rdd.RDD.map(RDD.scala:330) 
      at org.apache.spark.api.java.JavaRDDLike$class.map(JavaRDDLike.scala:96) 
      at org.apache.spark.api.java.AbstractJavaRDDLike.map(JavaRDDLike.scala:46) 
      at data_conversion.DataConversion.snapShotMigration(DataConversion.java:100) 
      at data_conversion.DataConversion.dataMigration(DataConversion.java:59) 
      at data_conversion.DataConversion.main(DataConversion.java:50) 
      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:497) 
      at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:559) 
    Caused by: java.io.NotSerializableException: org.apache.spark.api.java.JavaSparkContext 
    Serialization stack: 
      - object not serializable (class: org.apache.spark.api.java.JavaSparkContext, value: [email protected]) 
      - field (class: data_conversion.DataConversion, name: jsCtx, type: class org.apache.spark.api.java.JavaSparkContext) 
      - object (class data_conversion.DataConversion, [email protected]) 
      - field (class: data_conversion.DataConversion$1, name: this$0, type: class data_conversion.DataConversion) 
      - object (class data_conversion.DataConversion$1, [email protected]) 
      - field (class: org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1, name: fun$1, type: interface org.apache.spark.api.java.function.Function) 
      - object (class org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1, <function1>) 
      at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40) 
      at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:47) 
      at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:101) 
      at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:301) 
      ... 19 more 
0

は、我々は我々のデータを格納するのHBaseを使用して、この減速機は、その結果を出力するので、それは

を動作させるために必要だったものです、次のように全体のスタックトレースを見つけてください。 HBaseテーブルの場合、Hadoopはデータをシリアル化する方法を知らないと伝えています。それが私たちがそれを助ける必要がある理由です。セットアップは、変数io.serializations をセット内には、それに応じて

conf.setStrings("io.serializations", new String[]{hbaseConf.get("io.serializations"), MutationSerialization.class.getName(), ResultSerialization.class.getName()}); 
関連する問題