cae*_*301 11 apache-spark hadoop-lzo cloudera-cdh
我已经在这个问题上工作了两天,仍然没有找到方法.
问题:我们通过最新的CDH 5安装的Spark总是抱怨丢失LzoCodec类,即使我在cloudera管理器中通过Parcels安装HADOOP_LZO也是如此.我们在CDH 5.0.0-1.cdh5.0.0.p0.47上运行MR1.
尝试修复:还添加了有关"使用LZO包裹 "的官方CDH文档中的配置,但问题仍然存在.
大多数谷歌帖子都提供了类似的建议.我还怀疑火花正在试图对抗那些未在那里激活的YARN; 但我无法在CMF或其他帖子中找到有关此主题的配置.
如果您知道如何处理它,请给我一些帮助.
cae*_*301 21
解决了!!该解决方案可以帮助遇到相同问题的其他人.
在本教程中,我将向您展示如何在Hadoop,Pig和Spark上启用LZO压缩.我想你已经成功安装了一个基本的hadoop安装(如果没有,请参考Hadoop安装的 其他教程).
您可能因为遇到与我遇到的问题相同而到达此页面,通常从Java异常开始:
Caused by: java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found.
Run Code Online (Sandbox Code Playgroud)
由于Apache和Cloudera发行版是两种最流行的发行版,因此显示了两种上下文的配置.简而言之,将走向最终成功的三个主要步骤:
native-lzo库hadoop-lzo库native-lzo库该本机库LZO需要安装的hadoop-lzo.您可以手动安装它们,也可以通过管理程序包管理器来安装它们(注意:确保已native-lzo安装群集中的所有节点.):
在Mac OS上:
sudo port install lzop lzo2
Run Code Online (Sandbox Code Playgroud)在RH或CentOS上:
sudo yum install lzo liblzo-devel
Run Code Online (Sandbox Code Playgroud)在Debian或ubuntu上:
sudo apt-get install liblzo2-dev
Run Code Online (Sandbox Code Playgroud)hadoop-lzo库由于LZO是GPL,因此它不附带获得Apache软件许可的官方Hadoop发行版.我推荐Twitter版本,它是hadoop-gpl-compression的分叉版本, 具有显着的改进.如果您正在运行官方Hadoop,则文档中会提供一些安装结构.
在Cloudera的CDH中,hadoop-lzo作为包裹运送给客户,您可以使用Cloudera Manager方便地下载和分发它.默认情况下,hadoop-lzo将安装在
/opt/cloudera/parcels/HADOOP_LZO.
这里我们展示集群上的配置:
基本配置适用于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>
Run Code Online (Sandbox Code Playgroud)在以下位置设置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>
Run Code Online (Sandbox Code Playgroud)附加HADOOP_CLASSPATH到hadoop-env.sh:
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cloudera/parcels/CDH/lib/hadoop/lib/*
Run Code Online (Sandbox Code Playgroud)您可以使用Cloudera Manager通过GUI界面启用相同的先前设置:
对于MapReduce组件,更改上面相应键的配置:
> **io.compression.codecs**
> **mapred.compress.map.output**
> **mapred.map.output.compression.codec**
> **MapReduce Client safety valve for mapred-site.xml**
Run Code Online (Sandbox Code Playgroud)编辑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.
Run Code Online (Sandbox Code Playgroud)
这花费了我很多时间,因为以前的帖子中的信息较少.但是,根据以往的经验,解决方案是非常明确的.
无论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
Run Code Online (Sandbox Code Playgroud)
在另一个地方给出了LZO性能的比较.在StackOverflow上也会询问一个相关的问题,但在本教程结束之前没有解决方案.您可能也对如何使用Cloudera的LZO Parcel感兴趣.