由於以下錯誤,我遇到了通過spark-submit運行spark作業的問題:由於java.lang.NoSuchMethodException,Spark作業失敗: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)
...
我使用Spark 1.6.0與Scala 2.10,蜂巢1.1.0和平臺是一個CDH 5.7.1與火花和配置單元相同的版本。 是在類路徑的火花傳遞工作的蜂房EXEC是蜂房的exec-1.1.0-cdh5.7.1.jar。這個罐子有一個類,我可以看到有如下方法:
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
類我使用的,這個類中的相同方法的簽名是使用類org.apache.spark.sql.hive.client.HiveShim
用這種方法:
private lazy val loadDynamicPartitionsMethod =
findMethod(
classOf[Hive],
"loadDynamicPartitions",
classOf[Path],
classOf[String],
classOf[JMap[String, String]],
JBoolean.TYPE,
JInteger.TYPE,
JBoolean.TYPE,
JBoolean.TYPE)
我也查了蜂房EXEC罐子的歷史,似乎該類的簽名是版本1.0.0後更改。 我是新來的火花,但在我看來,火花蜂巢庫使用舊的實現蜂巢(我可以在META-INF /相關內容的文件看不到裏面的罐子已宣佈org.spark-project.hive的依賴:蜂房EXEC:罐子:1.2.1.spark)。 有誰知道如何設置spark工作以使用適當的配置單元庫?
你找到一個解決的辦法? –