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

 Aaron阿龙_1947_446 发布于 2023-01-17 10:44

我已经在这个问题上工作了两天,仍然没有找到方法.

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

尝试修复:还添加了有关"使用LZO包裹 "的官方CDH文档中的配置,但问题仍然存在.

大多数谷歌帖子都提供了类似的建议.我还怀疑火花正在试图对抗那些未在那里激活的YARN; 但我无法在CMF或其他帖子中找到有关此主题的配置.

如果您知道如何处理它,请给我一些帮助.

1 个回答
  • 解决了!!该解决方案可以帮助遇到相同问题的其他人.


    在本教程中,我将向您展示如何在Hadoop,Pig和Spark上启用LZO压缩.我想你已经成功安装了一个基本的hadoop安装(如果没有,请参考Hadoop安装的 其他教程).

    您可能因为遇到与我遇到的问题相同而到达此页面,通常从Java异常开始:

    Caused by: java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found.
    

    由于Apache和Cloudera发行版是两种最流行的发行版,因此显示了两种上下文的配置.简而言之,将走向最终成功的三个主要步骤:

    安装native-lzo

    安装hadoop-lzo

    正确设置环境变量(正确的部分消耗我的大部分时间)

    第1步:安装native-lzo

    该本机库LZO需要安装的hadoop-lzo.您可以手动安装它们,也可以通过管理程序包管理器来安装它们(注意:确保已native-lzo安装群集中的所有节点.):

    在Mac OS上:

    sudo port install lzop lzo2
    

    在RH或CentOS上:

    sudo yum install lzo liblzo-devel
    

    在Debian或ubuntu上:

    sudo apt-get install liblzo2-dev
    

    第2步:安装hadoop-lzo

    对于Apache Hadoop

    由于LZO是GPL,因此它不附带获得Apache软件许可的官方Hadoop发行版.我推荐Twitter版本,它是hadoop-gpl-compression的分叉版本, 具有显着的改进.如果您正在运行官方Hadoop,则文档中会提供一些安装结构.

    对于Cloudera Distribution

    在Cloudera的CDH中,hadoop-lzo作为包裹运送给客户,您可以使用Cloudera Manager方便地下载和分发它.默认情况下,hadoop-lzo将安装在 /opt/cloudera/parcels/HADOOP_LZO.

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

    Cloudera CDH 5

    HADOOP_LZO版本0.4.15

    第3步:设置env变量

    对于Apache Hadoop/Pig

    基本配置适用于Apache Hadoop,而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>
    

    在以下位置设置MapReduce压缩配置mapred-site.xml:

    <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_CLASSPATHhadoop-env.sh:

    HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cloudera/parcels/CDH/lib/hadoop/lib/*
    

    对于Cloudera Distribution

    您可以使用Cloudera Manager通过GUI界面启用相同的先前设置:

    对于MapReduce组件,更改上面相应键的配置:

    > **io.compression.codecs**
    > **mapred.compress.map.output**
    > **mapred.map.output.compression.codec**
    > **MapReduce Client safety valve for mapred-site.xml**
    

    编辑hadoop-env.sh的MapReduce客户端环境片段以附加 HADOOP_CLASSPATH变量.

    最后,按正确的顺序重启依赖服务,并在所有节点之间部署配置.而已!!.然后,您可以使用命令测试功能并获得类似于以下内容的成功消息:

       $ 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

    这花费了我很多时间,因为以前的帖子中的信息较少.但是,根据以往的经验,解决方案是非常明确的.

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

       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性能的比较.在StackOverflow上也会询问一个相关的问题,但在本教程结束之前没有解决方案.您可能也对如何使用Cloudera的LZO Parcel感兴趣.

    2023-01-17 10:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有