다음 오류로 인해 spark-submit을 통해 스파크 작업을 실행하는 데 문제가 있습니다 :java.lang.NoSuchMethodException으로 인해 스파크 작업이 실패합니다 : org.apache.hadoop.hive.ql.metadata.Hive.loadDynamicPartitions
16/11/16 11:41:12 ERROR yarn.ApplicationMaster: User class threw exception: java.lang.NoSuchMethodException: org.apache.hadoop.hive.ql.metadata.Hive.loadDynamicPartitions(org.apache.hadoop.fs.Path, java.lang.String, java.util.Map, boolean, int, boolean, boolean, boolean)
java.lang.NoSuchMethodException: org.apache.hadoop.hive.ql.metadata.Hive.loadDynamicPartitions(org.apache.hadoop.fs.Path, java.lang.String, java.util.Map, boolean, int, boolean, boolean, boolean)
at java.lang.Class.getMethod(Class.java:1786)
at org.apache.spark.sql.hive.client.Shim.findMethod(HiveShim.scala:114)
at org.apache.spark.sql.hive.client.Shim_v0_14.loadDynamicPartitionsMethod$lzycompute(HiveShim.scala:404)
at org.apache.spark.sql.hive.client.Shim_v0_14.loadDynamicPartitionsMethod(HiveShim.scala:403)
at org.apache.spark.sql.hive.client.Shim_v0_14.loadDynamicPartitions(HiveShim.scala:455)
at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$loadDynamicPartitions$1.apply$mcV$sp(ClientWrapper.scala:562)
at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$loadDynamicPartitions$1.apply(ClientWrapper.scala:562)
at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$loadDynamicPartitions$1.apply(ClientWrapper.scala:562)
at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$withHiveState$1.apply(ClientWrapper.scala:281)
at org.apache.spark.sql.hive.client.ClientWrapper.liftedTree1$1(ClientWrapper.scala:228)
at org.apache.spark.sql.hive.client.ClientWrapper.retryLocked(ClientWrapper.scala:227)
at org.apache.spark.sql.hive.client.ClientWrapper.withHiveState(ClientWrapper.scala:270)
...
나는 스칼라 2.10, 하이브 1.1.0와 스파크 1.6.0을 이용하고 있고이 플랫폼은 스파크와 하이브에 대해 동일한 버전을 가진 CDH 5.7.1입니다. classpath에서 spark 작업으로 전달되는 hive-exec는 hive-exec-1.1.0-cdh5.7.1.jar입니다. 이 병은 내가 볼 수있는 클래스 org.apache.hadoop.hive.ql.metadata.Hive
는 다음과 같은 방법이 있습니다
public java.util.Map<java.util.Map<java.lang.String, java.lang.String>, org.apache.hadoop.hive.ql.metadata.Partition> loadDynamicPartitions(org.apache.hadoop.fs.Path, java.lang.String, java.util.Map<java.lang.String, java.lang.String>, boolean, int, boolean, boolean, boolean) throws org.apache.hadoop.hive.ql.metadata.HiveException;
동일하지 않습니다 그 라이브러리 스파크 hive_2.10-1.6.0.jar 함께 제공되는 org.apache.spark.sql.hive.client.ClientWrapper
클래스에 하나 그
private lazy val loadDynamicPartitionsMethod =
findMethod(
classOf[Hive],
"loadDynamicPartitions",
classOf[Path],
classOf[String],
classOf[JMap[String, String]],
JBoolean.TYPE,
JInteger.TYPE,
JBoolean.TYPE,
JBoolean.TYPE)
나는 또한 하이브 간부 항아리의 역사를 확인하고 클래스 org.apache.hadoop.hive.ql.metadata.Hive
의 서명했다 보인다 :이 클래스에서 같은 방법의 서명이 방법으로 클래스 org.apache.spark.sql.hive.client.HiveShim
을 사용하고, 사용하고 버전 1.0.0 이후로 변경되었습니다. Spark를 처음 접했을 때 spark-hive 라이브러리가 Hive의 이전 구현을 사용하고있는 것으로 보입니다 (JAR 내부의 META-INF/DEPENDENCIES 파일에서 org.spark-project.hive에 대한 종속성이 있음을 알 수 있습니다). : hive-exec : jar : 1.2.1.spark). 누구든지 올바른 하이브 라이브러리를 사용하도록 스파크 작업을 설정하는 방법을 알고 있습니까?
해결 방법을 찾으셨습니까? –