Exception in thread "main" java.lang.IncompatibleClassChangeError:
Found class org.apache.hadoop.mapreduce.JobContext, but interface was expected
at org.apache.sqoop.config.ConfigurationHelper.getJobNumMaps(...)
Sqoop 版本與 Hadoop 版本不兼容。Sqoop 1.4.6 編譯時依賴的 Hadoop API(`JobContext` 為介面)與執行時集群的 Hadoop 版本(`JobContext` 為類別)不一致,導致連結錯誤。
| Hadoop 版本 | 建議 Sqoop 版本 | 備註 |
|---|---|---|
| Hadoop 2.7.x / 2.8.x / 2.9.x | Sqoop 1.4.7 | 官方釋出版,支援 Hadoop 2.x |
| Hadoop 3.1.x / 3.2.x / 3.3.x | Sqoop 1.4.7 + 手動替換 hadoop-common jar | 或使用 Apache Bigtop 打包版 |
| CDH 5.x | Sqoop 1.4.6-cdh5.x.x | 必須用 Cloudera 釋出的對應版本 |
| CDH 6.x / CDP 7.x | Sqoop 1.4.7-cdh6.x.x | 同上 |
| HDP 2.6 / 3.0 | Sqoop 1.4.7-hdp.x.x | Hortonworks 專用版本 |
sqoop import \
--connect jdbc:oracle:thin:@192.168.13.168:1521:orcl \
--username HADOOPLEARN --password zhao \
--table EMP -m 1 \
--hive-import --hive-table emp1 \
--driver oracle.jdbc.OracleDriver
`IncompatibleClassChangeError: JobContext` 經典錯誤 = **Sqoop/Hadoop 版本不匹配**。對齊版本或替換 jar 即可解決,生產環境強烈建議使用廠商整合版(CDH/HDP/EMR)避免此類問題。