Error: Could not initialize class org.xerial.snappy.Snappy

Error: Could not initialize class org.xerial.snappy.Snappy

我正在使用 sqoop 1.4.6 将数据从 RDBMS 导入到 hdfs,使用 snappyCodec 作为压缩和 avro 作为文件格式。我安装了以下组件

Hadoop 2.8.0
火花 2.1.0
配置单元 1.2.2
斯卡拉 2.11.8
卡桑德拉 3.10

当我尝试使用以下命令将 mysql table 导入 hdfs 时:

sqoop import --connect jdbc:mysql://******:****/retail_db --username **** --password **** --table order_items --compress --compression-codec org.apache.hadoop.io.compress.SnappyCodec --target-dir /user/test/order_items --as-avrodatafile

我收到以下错误:

Could not initialize class org.xerial.snappy.Snappy

并且在尝试找到这个 class 后超时。
我尝试了提到的有关此问题的解决方案,例如安装 tmp 和添加 snappy jar 文件(已经存在),但其中 none 有效。我缺少什么吗?

在尝试了多种解决方案后,我终于找到了问题所在。在 sqoop 命令中使用 --verbose 标志显示有多个 snappy-xxx.jar 文件从不同的组件导入,例如

  1. $HADOOP_HOME/share/hadoop/common/lib/
  2. $HADOOP_HOME/share/hadoop/mapreduce/lib/
  3. $SQOOP_HOME/lib/
    所以包含了 3 个活泼的罐子。

解法: 我确保在这种情况下只包含 1 个文件并且错误已解决。