friht 发表于 2015-9-17 07:52:36

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中增加如下代码即可解决:exportHADOOP_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/
页: [1]
查看完整版本: Flume lzo压缩输出至 hadoop