복붙노트

[HADOOP] TaskID. <init> (Lorg / apache / hadoop / mapreduce / JobID; Lorg / apache / hadoop / mapreduce / TaskType; I) V

HADOOP

TaskID. (Lorg / apache / hadoop / mapreduce / JobID; Lorg / apache / hadoop / mapreduce / TaskType; I) V

val jobConf = new JobConf(hbaseConf)  
jobConf.setOutputFormat(classOf[TableOutputFormat])  
jobConf.set(TableOutputFormat.OUTPUT_TABLE, tablename)  

val indataRDD = sc.makeRDD(Array("1,jack,15","2,Lily,16","3,mike,16"))  

indataRDD.map(_.split(','))   
val rdd = indataRDD.map(_.split(',')).map{arr=>{  
val put = new Put(Bytes.toBytes(arr(0).toInt))  
put.add(Bytes.toBytes("cf"),Bytes.toBytes("name"),Bytes.toBytes(arr(1)))  
put.add(Bytes.toBytes("cf"),Bytes.toBytes("age"),Bytes.toBytes(arr(2).toInt))  
(new ImmutableBytesWritable, put)   
}}  
  rdd.saveAsHadoopDataset(jobConf)  

hadoop 또는 spark 작업을 실행할 때 종종 오류가 발생합니다.

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.mapred.TaskID.<init>(Lorg/apache/hadoop/mapreduce/JobID;Lorg/apache/hadoop/mapreduce/TaskType;I)V
at org.apache.spark.SparkHadoopWriter.setIDs(SparkHadoopWriter.scala:158)
at org.apache.spark.SparkHadoopWriter.preSetup(SparkHadoopWriter.scala:60)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1.apply$mcV$sp(PairRDDFunctions.scala:1188)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1.apply(PairRDDFunctions.scala:1161)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1.apply(PairRDDFunctions.scala:1161)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:358)
at org.apache.spark.rdd.PairRDDFunctions.saveAsHadoopDataset(PairRDDFunctions.scala:1161)
at com.iteblog.App$.main(App.scala:62)
at com.iteblog.App.main(App.scala)`

처음에는 항아리 충돌이라고 생각하지만 항아리를주의 깊게 확인했습니다. 다른 항아리는 없습니다. 스파크 및 하둡 버전은 다음과 같습니다.

<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.0.1</version>`

<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>2.6.0-mr1-cdh5.5.0</version>

그리고 TaskID와 TaskType이 모두 hadoop-core jar에 있지만 동일한 패키지에는 없다는 것을 알았습니다. mapred.TaskID가 mapreduce.TaskType을 참조 할 수있는 이유는 무엇입니까?

해결법

  1. ==============================

    1.나는 또한 그러한 문제에 직면했다. 기본적으로 jar 문제로 인해 발생합니다.

    나는 또한 그러한 문제에 직면했다. 기본적으로 jar 문제로 인해 발생합니다.

    Maven spark-core_2.10에서 Jar 파일 추가

     <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.10</artifactId>
      <version>2.0.2</version>
     </dependency>
    

    Jar 파일을 변경 한 후

  2. ==============================

    2.아,이 문제를 해결하고 maven 의존성을 추가하십시오.

    아,이 문제를 해결하고 maven 의존성을 추가하십시오.

     <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-mapreduce-client-core</artifactId>
       <version>2.6.0-cdh5.5.0</version>
    </dependency>
    

    오류가 사라집니다!

  3. from https://stackoverflow.com/questions/41055923/taskid-initlorg-apache-hadoop-mapreduce-jobidlorg-apache-hadoop-mapreduce-ta by cc-by-sa and MIT license