Apache spark 在CDH 5上找不到Spark的com.hadoop.compression.lzo.LzoCodec类?

Apache spark 在CDH 5上找不到Spark的com.hadoop.compression.lzo.LzoCodec类?,apache-spark,cloudera-cdh,hadoop-lzo,Apache Spark,Cloudera Cdh,Hadoop Lzo,我已经研究这个问题两天了,仍然没有找到解决方法 问题:我们通过最新CDH 5安装的Spark总是抱怨LzoCodec类丢失,即使在我通过cloudera manager中的包裹安装HADOOP_LZO之后也是如此我们正在CDH 5.0.0-1.cdh5.0.0上运行MR1。p0.47 尝试修复: '中的配置也已添加,但问题仍然存在 谷歌的大部分帖子都给出了类似的建议。我还怀疑火花正试图与未激活的纱线相撞;但是我在CMF或其他关于这个主题的帖子中找不到配置 如果你知道如何处理,请给我一些帮助。解决

我已经研究这个问题两天了,仍然没有找到解决方法

问题:我们通过最新CDH 5安装的Spark总是抱怨LzoCodec类丢失,即使在我通过cloudera manager中的包裹安装HADOOP_LZO之后也是如此我们正在CDH 5.0.0-1.cdh5.0.0上运行MR1。p0.47

尝试修复: '中的配置也已添加,但问题仍然存在

谷歌的大部分帖子都给出了类似的建议。我还怀疑火花正试图与未激活的纱线相撞;但是我在CMF或其他关于这个主题的帖子中找不到配置


如果你知道如何处理,请给我一些帮助。

解决了!!希望该解决方案能帮助遇到同样问题的其他人


在本教程中,我将向您展示如何在Hadoop、Pig上启用LZO压缩 还有火花。我想您已经安装了一个基本的hadoop 成功(如果未成功,请参阅其他教程了解更多信息)

您访问此页面可能是因为遇到了相同的问题 正如我遇到的,通常从Java异常开始:

Caused by: java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found.
因为Apache和Cloudera发行版是最流行的两种 显示了两种上下文的分布和配置。简而言之,三 最终成功的主要步骤如下:

  • 安装
    本机lzo
  • 安装hadoop lzo库
  • 正确设置环境变量(右侧部分 (消耗我大部分的时间)
步骤1:安装
本机lzo
库 问题是 安装
hadoop lzo
时需要。您可以手动安装它们 或者通过简化包管理器(注意:确保 群集已安装
本机lzo
):

  • 在Mac OS上:

    sudo port install lzop lzo2
    
  • 在右侧或中央:

    sudo yum install lzo liblzo-devel
    
  • 在Debian或ubuntu上:

    sudo apt-get install liblzo2-dev
    
步骤2:安装hadoop lzo库 对于ApacheHadoop 由于LZO是GPL'ed的,因此它没有附带官方Hadoop发行版 获取Apache软件许可证。我推荐的是,它是的分叉版本 具有 显著改善。如果您运行的是官方的Hadoop,那么 提供了安装结构

用于Cloudera分布 在Cloudera的CDH中,
hadoop lzo
作为包裹发送给客户,您可以 可以使用Cloudera Manager方便地下载和分发它。通过 默认情况下,
hadoop lzo
将安装在
/opt/cloudera/parcels/HADOOP\u LZO

这里我们展示了集群上的配置:

  • Cloudera CDH 5
  • HADOOP_LZO版本0.4.15
步骤3:设置环境变量 对于ApacheHadoop/Pig 基本配置是针对ApacheHadoop的,而Pig则依赖于它的 功能

  • core site.xml
    中设置压缩编解码器库:

    <property>
      <name>io.compression.codecs</name>
      <value>org.apache.hadoop.io.compress.GzipCodec,
          org.apache.hadoop.io.compress.DefaultCodec,
          org.apache.hadoop.io.compress.BZip2Codec,
          com.hadoop.compression.lzo.LzoCodec,
          com.hadoop.compression.lzo.LzopCodec
      </value>
    </property>
    <property>
      <name>io.compression.codec.lzo.class</name>
      <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>
    
    <property>
      <name>mapred.compress.map.output</name>
      <value>true</value>
    </property>
    <property>
      <name>mapred.map.output.compression.codec</name>
      <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>
    <property>
      <name>mapred.child.env</name>
      <value>JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:/path/to/your/hadoop-lzo/libs/native</value>
    </property>
    
  • HADOOP\u类路径
    附加到
    HADOOP env.sh

    HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cloudera/parcels/CDH/lib/hadoop/lib/*
    
       SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:/path/to/your/hadoop-lzo/libs/native
       SPARK_CLASSPATH=$SPARK_CLASSPATH:/path/to/your/hadoop-lzo/java/libs
    
用于Cloudera分布 您可以使用Cloudera管理器通过GUI启用以前相同的设置 接口:

  • 对于MapReduce组件,将相应键的配置更改为 以上:

  • 编辑hadoop env.sh的MapReduce客户端环境代码段以附加
    HADOOP\u类路径
    变量

最后,按正确的顺序重新启动依赖服务并部署 所有节点之间的配置。就这样!!。然后您可以测试 使用命令和获取成功消息的功能,如下所示:

   $ hadoop jar /path/to/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer lzo_logs
   $ 14/05/04 01:13:13 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
   $ 14/05/04 01:13:13 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev 49753b4b5a029410c3bd91278c360c2241328387]
   $ 14/05/04 01:13:14 INFO lzo.LzoIndexer: [INDEX] LZO Indexing file datasets/lzo_logs size 0.00 GB...
   $ 14/05/04 01:13:14 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
   $ 14/05/04 01:13:14 INFO lzo.LzoIndexer: Completed LZO Indexing in 0.39 seconds (0.02 MB/s).  Index size is 0.01 KB.
为了火花 这占用了我很多时间,因为以前的文档中信息较少 帖子。但解决方案是与以前的经验一脉相承的

无论Spark是通过tar还是Cloudera Manager安装的,您都需要 仅将两个路径值附加到
spark env.sh

HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cloudera/parcels/CDH/lib/hadoop/lib/*
   SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:/path/to/your/hadoop-lzo/libs/native
   SPARK_CLASSPATH=$SPARK_CLASSPATH:/path/to/your/hadoop-lzo/java/libs
相关帖子和问题 中给出了LZO性能的比较。A. 也有人问了相关问题,但没有解决办法 关于这一点,直到本教程结束。你可能也对怎么做感兴趣
到。

对于Hortonworks 2.3.0和Ambari For Spark,要使用LZO,您需要添加自定义Spark默认值属性。我补充说:

  • spark.driver.extraClassPath
    /usr/hdp/current/hadoop-client/lib/hadoop-lzo-0.6.0.{{hdp_full_version}}.jar
  • spark.driver.extraLibraryPath
    /usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64

这是基于页面(它有一些打字错误)。

我刚刚在Cloudera 5安装中遇到了相同的错误。在我的案例中,是GPLEXTRAS包裹,已安装、分发但未激活

在Cloudera管理器->主机->包裹上 我按下过滤器清除所有地方,然后我能够按下之前已经分发的GPLEXTRAS Parces上的激活按钮


这就足够解决我的问题了。

在此处包含这些信息是很有价值的,这样,如果您的博客关闭或更改地址,这些信息将持续存在。@ChrisF很抱歉,在我的博客迁移到github后,该链接现在已更新。@caesar0301-如果您在此处总结答案,也会很有帮助。如果通过命令行运行spark,则“Twitter版本”为404,相同的属性(正如dajobe所指出的那样)也可以以下列格式作为参数传递给spark cli:spark submit--conf spark.driver.extraClassPath=:--conf spark.driver.extraclibrarypath=/usr/hdp/current/hadoop client/lib/native:/usr/hdp/current/hadoop client/lib/native/Linux-amd64