文档转载自: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"正确
相关推荐
此外,可能还需要安装LZO的本地库(如liblzo2)以支持Hadoop的Native IO,以提升性能。 总的来说,Hadoop-LZO是一个针对Hadoop的LZO压缩解决方案,它提供了一种高效的数据压缩方式,尤其适合大数据处理场景,通过这...
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/lib/lzo/lzo.jar ``` 2. 在`core-site.xml`中配置默认压缩格式为LZOP: ```xml <name>io.compression.codecs <value>org.apache.hadoop.io.compress....
EasyHadoop 是一个Hadoop一键安装系统,方便大家更容易安装部署Hadoop软件。 EasyHadoop 由前暴风影音数据团队修湘调研,向磊编写,以GPL协议进行开源 开放此管理部署系统方便大家安装使用,以此和行业共同学习进步。 ...
Hadoop 2.x版本是其发展过程中的一个重要阶段,引入了许多改进和新特性,如YARN(Yet Another Resource Negotiator)资源调度器,提升了系统的灵活性和效率。当我们需要在64位系统上编译Hadoop 2的源代码时,会涉及...
标题中的“hadoop2.9.0_X64的native文件”指的是Hadoop 2.9.0版本针对64位(X64)架构的本机库文件。这些文件是Hadoop为了与Linux操作系统底层硬件更高效地交互而编译生成的。在Hadoop的分布式计算框架中,native库...
- **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 压缩文件...
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是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大...HBase性能优化是非常重要的,需要根据实际情况调整各种参数和配置来提高性能。
同步hadoop-lzo-0.4.20.jar到hadoop103、hadoop104core-site.xml增加配置支持LZO压缩同步core-site.x
2. 配置环境:安装JDK,并确保`JAVA_HOME`环境变量指向正确的Java版本。 3. 安装依赖:RHEL 6.3可能需要安装GCC、Make、OpenSSL、Zlib等开发库。 4. 构建项目:使用Maven执行构建命令,如`mvn clean install -...
3. NameNode与JobTracker:JobTracker(在Hadoop 1.x版本中)负责作业调度和任务跟踪,而NameNode是HDFS的主节点,管理文件系统的命名空间和块信息。 4. Hadoop作者:Hadoop是由Doug Cutting创建的,他是一位著名的...
9. Hadoop-2.x 集群中,默认的 HDFS 副本块的个数是 3,以提供冗余和容错能力。 10. DataNode 是 HDFS 中的存储节点,每个 DataNode 存储的数据块通常是唯一的,它们负责存储客户端上传的数据,并响应客户端的读写...
为了成功地编译 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. **...
本文将详细介绍如何在CentOS 6.8环境下从源码编译安装Hadoop-2.7.6版本。通过这种方式,可以更好地理解Hadoop的工作原理,并且能够根据实际需求进行定制化配置。 #### 二、准备工作 在开始编译Hadoop之前,我们...
**Cloudera Manager**是一款强大的集群管理工具,它极大地简化了Hadoop集群的安装、配置和监控过程。通过Cloudera Manager,用户可以轻松地在集群中安装和管理Hadoop、Hive、Spark等多种大数据处理相关的服务。此外...
对于大内存机器,可能需要调整特定配置以优化性能,如增大 BlockCache 大小或启用 LZO 压缩。此外,客户端连接 HBase 集群也需要相应的配置。 **升级** HBase 的升级过程需要注意版本兼容性和迁移策略,例如从 ...
- MapReduce支持多种压缩编码,如Gzip、LZO等。 - 在shuffle阶段压缩数据可以减少网络传输量。 **14. 使用规约的情况** - 当MapTask的输出数据量非常大时。 - 在Reduce阶段之前进行数据聚合,减少网络传输量。 **...