`
conkeyn
  • 浏览: 1529585 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Hadoop 2.x安装配置LZO

阅读更多

文档转载自:http://blog.csdn.net/lalaguozhe/article/details/10912527

今天尝试在Hadoop 2.x(YARN)上安装和配置LZO,遇到了很多坑,在这边记录整个安装配置过程

1. 安装LZO

下载lzo 2.06版本,编译64位版本,同步到集群中

 

wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
export CFLAGS=-m64
./configure -enable-shared -prefix=/usr/local/hadoop/lzo/
make && make test && make install

 然后,同步/usr/local/hadoop/lzo/到整个集群上

2. 安装Hadoop-LZO
注意,Hadoop 1.x的时候我们是直接按照cloudera的文档clone https://github.com/kevinweil/hadoop-lzo.git上编译的,它是fork自https://github.com/twitter/hadoop-lzo,但是kevinweil这个版本已经很久没有更新了,而且它是基于Hadoop 1.x去编译的,不能用于Hadoop 2.x。而twitter/hadoop-lzo三个月将Ant的编译方式切换为Maven,默认的dependency中Hadoop jar包就是2.x的,所以要clone twitter的hadoop-lzo,用Maven编译jar包和native library

git clone https://github.com/twitter/hadoop-lzo.git​
export CFLAGS=-m64
export CXXFLAGS=-m64
export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include
export LIBRARY_PATH=/usr/local/hadoop/lzo/lib
mvn clean package -Dmaven.test.skip=true
tar -cBf - -C target/native/Linux-amd64-64/lib . | tar -xBvf - -C /usr/local/hadoop/hadoop-2.1.0-beta/lib/native/ 
cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar /usr/local/hadoop/hadoop-2.1.0-beta/share/hadoop/common/

 lib/native下的文件,包含native libraries和native compression

-rw-r--r-- 1 hadoop hadoop  104206 Sep  2 10:44 libgplcompression.a
-rw-rw-r-- 1 hadoop hadoop    1121 Sep  2 10:44 libgplcompression.la
lrwxrwxrwx 1 hadoop hadoop      26 Sep  2 10:47 libgplcompression.so -> libgplcompression.so.0.0.0
lrwxrwxrwx 1 hadoop hadoop      26 Sep  2 10:47 libgplcompression.so.0 -> libgplcompression.so.0.0.0
-rwxrwxr-x 1 hadoop hadoop   67833 Sep  2 10:44 libgplcompression.so.0.0.0
-rw-rw-r-- 1 hadoop hadoop  835968 Aug 29 17:12 libhadoop.a
-rw-rw-r-- 1 hadoop hadoop 1482132 Aug 29 17:12 libhadooppipes.a
lrwxrwxrwx 1 hadoop hadoop      18 Aug 29 17:12 libhadoop.so -> libhadoop.so.1.0.0
-rwxrwxr-x 1 hadoop hadoop  465801 Aug 29 17:12 libhadoop.so.1.0.0
-rw-rw-r-- 1 hadoop hadoop  580384 Aug 29 17:12 libhadooputils.a
-rw-rw-r-- 1 hadoop hadoop  273642 Aug 29 17:12 libhdfs.a
lrwxrwxrwx 1 hadoop hadoop      16 Aug 29 17:12 libhdfs.so -> libhdfs.so.0.0.0
-rwxrwxr-x 1 hadoop hadoop  181171 Aug 29 17:12 libhdfs.so.0.0.0

 将hadoop-lzo-0.4.18-SNAPSHOT.jar和/usr/local/hadoop/hadoop-2.1.0-beta/lib/native/
同步到整个集群中


 3. 设置环境变量
hadoop-env.sh中加入

export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib

 core-site.xml加入

<property>
	<name>io.compression.codecs</name>
	<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
<property>
	<name>io.compression.codec.lzo.class</name>
	<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

 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>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value>
</property>

 其中mapred-site.xml中设置mapred.child.env的​LD_LIBRARY_PATH很重要,因为hadoop-lzo通过JNI调用(java.library.path)​libgplcompression.so,然后libgplcompression.so​再通过dlopen这个系统调用(其实是查找系统环境变量LD_LIBRARY_PATH​)来加载liblzo2.so​。container在启动的时候,需要设置LD_LIBRARY_PATH​环境变量,来让LzoCodec加载​native-lzo library,如果不设置的话,会在container的syslog中报下面的错误​​

2013-09-02 11:20:12,004 INFO [main] com.hadoop.compression.lzo.GPLNativeCodeLoader: Loaded native gpl library
2013-09-02 11:20:12,006 WARN [main] com.hadoop.compression.lzo.LzoCompressor: java.lang.UnsatisfiedLinkError: Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!
2013-09-02 11:20:12,006 ERROR [main] com.hadoop.compression.lzo.LzoCodec: Failed to load/initialize native-lzo library

 同步hadoop-env.sh, core-site.xml, mapred-site.xml到集群​

LzoCodec加载gplcompression和lzo native library

  static {
    if (GPLNativeCodeLoader.isNativeCodeLoaded()) {
      nativeLzoLoaded = LzoCompressor.isNativeLzoLoaded() &&
      LzoDecompressor.isNativeLzoLoaded();

      if (nativeLzoLoaded) {
        LOG.info("Successfully loaded & initialized native-lzo library [hadoop-lzo rev " + getRevisionHash() + "]");
      } else {
        LOG.error("Failed to load/initialize native-lzo library");
      }
    } else {
      LOG.error("Cannot load native-lzo without native-hadoop");
    }
  }

 LzoCompressor和LzoDecompressor会调用本地方法initIDs
在impl/lzo/LzoCompressor.c中加载liblzo2.so

Java_com_hadoop_compression_lzo_LzoCompressor_initIDs(
  JNIEnv *env, jclass class
  ) {
  // Load liblzo2.so
  liblzo2 = dlopen(HADOOP_LZO_LIBRARY, RTLD_LAZY | RTLD_GLOBAL);
  if (!liblzo2) {
    char* msg = (char*)malloc(1000);
    snprintf(msg, 1000, "%s (%s)!", "Cannot load " HADOOP_LZO_LIBRARY, dlerror());
    THROW(env, "java/lang/UnsatisfiedLinkError", msg);
    return;
  }

  LzoCompressor_clazz = (*env)->GetStaticFieldID(env, class, "clazz","Ljava/lang/Class;");
  LzoCompressor_finish = (*env)->GetFieldID(env, class, "finish", "Z");
  LzoCompressor_finished = (*env)->GetFieldID(env, class, "finished", "Z");
  LzoCompressor_uncompressedDirectBuf = (*env)->GetFieldID(env, class,"uncompressedDirectBuf","Ljava/nio/ByteBuffer;");
  LzoCompressor_uncompressedDirectBufLen = (*env)->GetFieldID(env, class,"uncompressedDirectBufLen", "I");
  LzoCompressor_compressedDirectBuf = (*env)->GetFieldID(env, class,"compressedDirectBuf","Ljava/nio/ByteBuffer;");
  LzoCompressor_directBufferSize = (*env)->GetFieldID(env, class,"directBufferSize", "I");
  LzoCompressor_lzoCompressor = (*env)->GetFieldID(env, class,"lzoCompressor", "J");
  LzoCompressor_lzoCompressionLevel = (*env)->GetFieldID(env, class,"lzoCompressionLevel", "I");
  LzoCompressor_workingMemoryBufLen = (*env)->GetFieldID(env, class,"workingMemoryBufLen", "I");
  LzoCompressor_workingMemoryBuf = (*env)->GetFieldID(env, class,"workingMemoryBuf","Ljava/nio/ByteBuffer;");

  // record lzo library version
  void* lzo_version_ptr = NULL;
  LOAD_DYNAMIC_SYMBOL(lzo_version_ptr, env, liblzo2, "lzo_version");
  liblzo2_version = (NULL == lzo_version_ptr) ? 0
    : (jint) ((unsigned (__LZO_CDECL *)())lzo_version_ptr)();
}

 4. 测试mapreduce读lzo
hive新建一张表lzo_test

CREATE TABLE lzo_test(
 col String
)
STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";

 下载lzop工具,load一个lzo文件进lzo_test表中,执行“select * from lzo_test"和"select count(1) from lzo_test"正确​

 

分享到:
评论

相关推荐

    hadoop-lzo-0.4.21-SNAPSHOT jars

    此外,可能还需要安装LZO的本地库(如liblzo2)以支持Hadoop的Native IO,以提升性能。 总的来说,Hadoop-LZO是一个针对Hadoop的LZO压缩解决方案,它提供了一种高效的数据压缩方式,尤其适合大数据处理场景,通过这...

    传输到hdfs数据,进行压缩

    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/lib/lzo/lzo.jar ``` 2. 在`core-site.xml`中配置默认压缩格式为LZOP: ```xml &lt;name&gt;io.compression.codecs &lt;value&gt;org.apache.hadoop.io.compress....

    Hadoop快速部署工具 EasyHadoop.zip

    EasyHadoop 是一个Hadoop一键安装系统,方便大家更容易安装部署Hadoop软件。 EasyHadoop 由前暴风影音数据团队修湘调研,向磊编写,以GPL协议进行开源 开放此管理部署系统方便大家安装使用,以此和行业共同学习进步。 ...

    hadoop2源文件编译为64位依赖包

    Hadoop 2.x版本是其发展过程中的一个重要阶段,引入了许多改进和新特性,如YARN(Yet Another Resource Negotiator)资源调度器,提升了系统的灵活性和效率。当我们需要在64位系统上编译Hadoop 2的源代码时,会涉及...

    hadoop2.9.0_X64的native文件

    标题中的“hadoop2.9.0_X64的native文件”指的是Hadoop 2.9.0版本针对64位(X64)架构的本机库文件。这些文件是Hadoop为了与Linux操作系统底层硬件更高效地交互而编译生成的。在Hadoop的分布式计算框架中,native库...

    sqoop1.x 导入数据

    - **LZO 压缩索引**:`hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /origin_data/gmall/db/$1/$do_date` 创建 LZO 压缩文件...

    Hbase中文文档

    C.2. hbase.regionserver.codecs C.3. LZO C.4. GZIP C.5. SNAPPY C.6. Changing Compression Schemes D. YCSB: The Yahoo! Cloud Serving Benchmark and HBase E. HFile format version 2 E.1. Motivation E.2. ...

    HBase的性能优化

    "HBase性能优化" HBase是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大...HBase性能优化是非常重要的,需要根据实际情况调整各种参数和配置来提高性能。

    zjinc36#zjinc36.github.io#20190907-HadoopLZO压缩配置1

    同步hadoop-lzo-0.4.20.jar到hadoop103、hadoop104core-site.xml增加配置支持LZO压缩同步core-site.x

    hadoop2.2-64-native包(redhat6.3x64)

    2. 配置环境:安装JDK,并确保`JAVA_HOME`环境变量指向正确的Java版本。 3. 安装依赖:RHEL 6.3可能需要安装GCC、Make、OpenSSL、Zlib等开发库。 4. 构建项目:使用Maven执行构建命令,如`mvn clean install -...

    hadoop练习题--带答案.pdf

    3. NameNode与JobTracker:JobTracker(在Hadoop 1.x版本中)负责作业调度和任务跟踪,而NameNode是HDFS的主节点,管理文件系统的命名空间和块信息。 4. Hadoop作者:Hadoop是由Doug Cutting创建的,他是一位著名的...

    大数据(hadoop)竞赛练习题

    9. Hadoop-2.x 集群中,默认的 HDFS 副本块的个数是 3,以提供冗余和容错能力。 10. DataNode 是 HDFS 中的存储节点,每个 DataNode 存储的数据块通常是唯一的,它们负责存储客户端上传的数据,并响应客户端的读写...

    Hadoop2.7.1编译

    为了成功地编译 Hadoop 2.7.1 的 64 位版本,需要确保以下软件环境已经正确安装并配置: 1. **操作系统**:CentOS 6.5 64位 2. **Java Development Kit (JDK)**:1.7.0_02 64位 3. **Apache Maven**:3.2.3 4. **...

    hadoop-2.7.6在centos6.8上的编译步骤

    本文将详细介绍如何在CentOS 6.8环境下从源码编译安装Hadoop-2.7.6版本。通过这种方式,可以更好地理解Hadoop的工作原理,并且能够根据实际需求进行定制化配置。 #### 二、准备工作 在开始编译Hadoop之前,我们...

    CDH5离线安装和配置指南

    **Cloudera Manager**是一款强大的集群管理工具,它极大地简化了Hadoop集群的安装、配置和监控过程。通过Cloudera Manager,用户可以轻松地在集群中安装和管理Hadoop、Hive、Spark等多种大数据处理相关的服务。此外...

    HBase_官方文档-中文翻译

    对于大内存机器,可能需要调整特定配置以优化性能,如增大 BlockCache 大小或启用 LZO 压缩。此外,客户端连接 HBase 集群也需要相应的配置。 **升级** HBase 的升级过程需要注意版本兼容性和迁移策略,例如从 ...

    【面试宝典】2021年超全超详细的最新大数据开发面试题,附答案解析(一版).pdf

    - MapReduce支持多种压缩编码,如Gzip、LZO等。 - 在shuffle阶段压缩数据可以减少网络传输量。 **14. 使用规约的情况** - 当MapTask的输出数据量非常大时。 - 在Reduce阶段之前进行数据聚合,减少网络传输量。 **...

Global site tag (gtag.js) - Google Analytics