Flume lzo压缩输出至 hadoop

 

1. Hadoop 支持lzo压缩依赖:  

lzo:Unix/linux系统默认没有lzo的 库,因此需要安装,sudo yum install lzo-devel.x86_64 

       sudo yum install lzo.x86_64          sudo yum install lzop.x86_64

 

2. 准备maven,ant,gcc 等

3. 编译hadoop-lzo

  从https://github.com/twitter/hadoop-lzo 下载,解压进入目录, mvn clean package

 在 target 下 hadoop-lzo-0.4.20-SNAPSHOT.jar    target/native/Linux-amd64-64/lib 下有 libgplcompression 库

 jar包拷贝到hadoop lib目录下, gplcompression库拷贝到lib/native/Linux-amd64-64/lib下

  在hadoop客户端或者各个节点,不需要都安装lzo库,可以直接把lzo库拷贝到 hadoop 下的 lib/native/Linux-amd64-64/lib下

  

总结:编译hadoop-lzo ,lzo-devl库同样不能少。

 

4. 修改hadoop 客户端配置文件(我们只需要在使用flume的机器上配置)

   http://heylinux.com/archives/2078.html

5. hadoop 运行时候会报找不到本地库,这时候需要编译hadoop 带上native 参数,生成libhadoop.so等文件,并考入lib/native/Linxuamd64等目录,并设置相关环境变量,mapred-site.xml还是hadoop-env文件

 

 //补充,lzo动态库也要拷贝到hadoop得lib/native/Linux-amd64-64/lib 下,  在启动时候还出现 java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path 错误:

Java常用的两个PATH:CLASSPATH和java.library.path

CLASSPATH:指定JVM查找类文件的目录或jar

java.library.path:指定JVM查找动态连接库的目录(*.dll,*.so,*.dylib)

解决办法:

1.LINUX下的通过添加系统变量LD_LIBRARY_PATH来添加java.library.path

2.在启动Java进程时添加vm arguments:-Djava.library.path= /usr/local/lib

 或者:

$hadoop_home/etc/hadoop/hadoop-env.sh 文件中增加如即可:

export JAVA_LIBRARY_PATH=$hadoop_home/lib/native/Linux-amd64-64/lib

在hadoop-0.20.205版本中处了该错误外,还有一个错误,就是找不到lzo的jar包,这是因为他们家在classpath的方法有了变更,默认不会把$hadoop_home/lib目录下的所有jar包都加载,所以在/etc/hadoop-env.sh中增加如下代码即可解决:export  HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$hadoop_home/lib/hadoop-lzo.jar

 

 

6. hadoop-lzo 的README.MD 文件,以及 http://blog.cloudera.com/blog/2009/11/hadoop-at-twitter-part-1-splittable-lzo-compression/

posted on 2015-02-02 18:39  不忘初衷,方能致远  阅读(874)  评论(0)    收藏  举报

导航