[HADOOP] org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus에서 구아바의 StopWatch에 대한 IllegalAccessError
HADOOPorg.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus에서 구아바의 StopWatch에 대한 IllegalAccessError
나는 작은 스파크 응용 프로그램을 실행하려고하는데 다음과 같은 예외가 발생합니다.
Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapreduce.lib.input.FileInputFormat
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:262)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:217)
at org.apache.spark.rdd.NewHadoopRDD.getPartitions(NewHadoopRDD.scala:95)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
at scala.Option.getOrElse(Option.scala:120)
관련 gradle 종속성 섹션 :
compile('org.apache.spark:spark-core_2.10:1.3.1')
compile('org.apache.hadoop:hadoop-mapreduce-client-core:2.6.2') {force = true}
compile('org.apache.hadoop:hadoop-mapreduce-client-app:2.6.2') {force = true}
compile('org.apache.hadoop:hadoop-mapreduce-client-shuffle:2.6.2') {force = true}
compile('com.google.guava:guava:19.0') { force = true }
해결법
-
==============================
1.구아바의 StopWatch 생성자에 액세스 할 수 없으므로 hadoop : hadoop : hadoop-mapreduce-client-core 버전을 구아바의 새 버전 (17.0 - 19.0)과 함께 사용할 수 없습니다 (IllegalAccessError를 초과 함)
구아바의 StopWatch 생성자에 액세스 할 수 없으므로 hadoop : hadoop : hadoop-mapreduce-client-core 버전을 구아바의 새 버전 (17.0 - 19.0)과 함께 사용할 수 없습니다 (IllegalAccessError를 초과 함)
hadoop-mapreduce-client-core의 최신 버전 - 2.7.2 (위의 방법에서 구아바의 StopWatch를 사용하지 않고 오히려 org.apache.hadoop.util.StopWatch를 사용함)를 사용하여 두 가지 추가 종속성 필요한 사항 :
compile('org.apache.hadoop:hadoop-mapreduce-client-core:2.7.2') {force = true} compile('org.apache.hadoop:hadoop-common:2.7.2') {force = true} // required for org.apache.hadoop.util.StopWatch compile('commons-io:commons-io:2.4') {force = true} // required for org.apache.commons.io.Charsets that is used internally
노트: 두 개의 org.apache.commons.io 패키지가 있습니다. commons-io : commons-io (여기에있는 우리) org.apache.commons : commons-io (이전 하나, 2007). 올바른 것을 포함 시키십시오.
-
==============================
2.방금 구아바 버전을 19.0에서 15.0으로 변경했습니다. 현재 버전 2.2를 사용 중입니다.
방금 구아바 버전을 19.0에서 15.0으로 변경했습니다. 현재 버전 2.2를 사용 중입니다.
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>15.0</version> </dependency>
-
==============================
3.IntelliJ와 Spark를 사용하여 동일한 상황을 경험했습니다.
IntelliJ와 Spark를 사용하여 동일한 상황을 경험했습니다.
사용할 때
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.1" libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.1"
com.google.guava 20.0이 다운로드되고 hadoop 클라이언트 2.6.5가 다운로드됩니다.
가장 빠른 해결책은 구아바 라이브러리를 버전 15.0 (SBT)으로 강제 실행하는 것입니다.
dependencyOverrides += "com.google.guava" % "guava" % "15.0"
-
==============================
4.우리의 추가 의존성 중 하나가 Guava 14.0.1을 제거하고 18.0으로 대체했기 때문에 Spark 1.6.1에이 문제가있었습니다. Spark는 hadoop-client 2.2에 대한 기본 의존성을 가지고 있습니다. [Maven Repo] (https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10/1.6.1)를 참조하십시오.
우리의 추가 의존성 중 하나가 Guava 14.0.1을 제거하고 18.0으로 대체했기 때문에 Spark 1.6.1에이 문제가있었습니다. Spark는 hadoop-client 2.2에 대한 기본 의존성을 가지고 있습니다. [Maven Repo] (https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10/1.6.1)를 참조하십시오.
그 해결책은 sbt libraryDependencies에 다음을 추가하는 것입니다 : "org.apache.hadoop"% "hadoop-client"% "2.7.2"
-
==============================
5.구아바 버전 불일치가있는 것 같습니다.
구아바 버전 불일치가있는 것 같습니다.
귀하의 코드베이스에있는 뭔가가 Stopwatch 생성자를 호출하려고했지만 Guava 17.0에서 생성자가 제거되어 Guava 15.0에 추가 된 static factory 메소드 (createStarted () 및 createUnstarted ())가 사용되었습니다.
정적 팩토리 메서드를 대신 사용하기 위해 생성자를 사용하려는 코드를 업데이트해야합니다.
-
==============================
6.제 경우에는 guava 21.0을 추가하면 오류가 발생합니다.
제 경우에는 guava 21.0을 추가하면 오류가 발생합니다.
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>21.0</version> </dependency>
그 후 구아바 15.0을 사용하거나 위의 종속성을 제거합니다. 내 코드가 잘 작동한다.
-
==============================
7.해결책
해결책
-
==============================
8.문제는 종속 라이브러리에서 비롯된 것 같습니다.
문제는 종속 라이브러리에서 비롯된 것 같습니다.
기본적으로 hbase 테이블에 데이터를 넣으려고 할 때 문제가 발생합니다.
처음에 나는
org.apache.hbase groupId> hbase-client artifactId> 1.1.2 version> dependency> 내가 당신과 비슷한 문제를 가지고 있고 나중에
org.apache.hbase groupId> hbase-shaded-client artifactId> 1.1.2 version> / dependency> 이제 문제는 해결되었습니다. -
==============================
9.Spark를 미리 빌드하지 않은 채로 Spark를 다시 빌드하지 않고이 문제를 해결하려면 Apache Spark 2.3.0 (예 : 'spark-2.3.0 -bin-without-hadoop ') :
Spark를 미리 빌드하지 않은 채로 Spark를 다시 빌드하지 않고이 문제를 해결하려면 Apache Spark 2.3.0 (예 : 'spark-2.3.0 -bin-without-hadoop ') :
클래스 경로를 변경하여 원하는 'hadoop-mapreduce-client-core'jar 파일을 강제로 사용할 수도 있습니다 (따라서 Spark는 Spark로 배포 된 버전이 아니라 Hadoop에서 버전을 찾습니다).
from https://stackoverflow.com/questions/36427291/illegalaccesserror-to-guavas-stopwatch-from-org-apache-hadoop-mapreduce-lib-inp by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop : 그러한 메소드 예외 없음 (0) | 2019.06.04 |
---|---|
[HADOOP] Maven을 사용하여 org.apache 자바 의존성을 가져 오는 방법 (0) | 2019.06.03 |
[HADOOP] dfs.namenode.servicerpc-address 또는 dfs.namenode.rpc-address가 구성되지 않았습니다. (0) | 2019.06.03 |
[HADOOP] 일식에서 hadoop mapreduce 작업을 디버깅하는 방법? (0) | 2019.06.03 |
[HADOOP] Google Analytics - 원시 데이터 로그 얻기 (0) | 2019.06.03 |