簡體   English   中英

在 EMR 集群上提交 Spark 作業時,如何避免 java.lang.NoClassDefFoundError?

[英]How do I avoid java.lang.NoClassDefFoundError when submitting Spark job on EMR cluster?

我有在我的本地機器上成功運行的 Spark 應用程序。 我使用 Hbase Docker 容器,從中將數據加載到我的 Spark 應用程序中。 現在我已經創建了安裝了 Spark 和 Hbase 的 EMR 集群。 當我嘗試提交 JAR 文件時購買,我收到以下異常:

java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration

在本地運行我的應用程序時,我可以通過將--jars標志添加到spark-submit來避免此類錯誤,從而為 Spark 提供所有 Hbase Jars 的路徑。

  1. 在 EMR 上運行時如何克服此錯誤?

  2. 我也應該將 Spark 重定向到 EMR 中的 Hbase jar 嗎? 那些 jars 位於 EMR 集群的哪個位置?

     Configuration hBaseConf = HBaseConfiguration.create(); hBaseConf.set(TableInputFormat.INPUT_TABLE, "MyTable"); JavaRDD<String> myStrings = sparkContext.newAPIHadoopRDD( hBaseConf, TableInputFormat.class,ImmutableBytesWritable.class, Result.class).keys().map(key -> { String from = Bytes.toString(key.get()); return from; }); . . .

我能夠使用 hbase 類路徑命令在 EMR shell 上找到 JAR。 然后我將 Hbase 路徑帶到 jars 並使用 --jars 標志添加到 spark-submit。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM