• [大牛翻译系列]Hadoop(20)附录A.10 压缩格式LZOP编译安装配置


    附录A.10 LZOP

    LZOP是一种压缩解码器,在MapReduce中可以支持可分块的压缩。第5章中有一节介绍了如何应用LZOP。在这一节中,将介绍如何编译LZOP,在集群做相应配置。

    A.10.1 获得更多的信息

    表A.12 有用的资源

    描述 URL地址
    Twitter有关于LZOP的博客文章,包括一些统计信息和安装指南 http://bit.ly/dfEvGn
    Todd Lipcon的LZO GitHub库。  https://github.com/toddlipcon/hadoop-lzo

    A.10.2 编译LZOP

    在具体步骤之前,需要注意一下几点:

    • LZOP的编译环境及硬件最好能够和最终部署的生产环境一致。
    • 在每个需要使用LZOP的节点上都需要分别进行安装和配置,包括集群的数据节点。

    在CDH发行版上安装Hadoop本地库

    在Hadoop中运行LZOP依赖于本地库。首先需要设置本地库。这件事在CDH版本中很容易。脚本如下:

    $ yum install hadoop-0.20-native.x86_64

    以下是安装的结果:

    $ rpm -ql hadoop-0.20-native-0.20.2+923.97-1
    /usr/lib/hadoop-0.20/lib/native
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.a
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.la
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so.1
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so.1.0.0
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.a
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.la
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so.1
    /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so.1.1.1

    在非CDN发行版上安装Hadoop本地库

    如果用的是Apache的Hadoop发行版,它已经自带了Linux 32位和64位的本地库。文件位于$HADOOP_HOME/lib/native。对于其它的Hadoop发行版,请咨询供应商如何安装Hadoop本地库。也可以自行通过官方文档编译本地库。文档位于http://hadoop.apache.org/common/docs/r1.0.0/native_libraries.html

    安装LZOP本地库

    使用LZOP必须安装LZOP本地库。在RedHat上,脚本如下:

    $ yum install liblzo-devel

    在CentOS上,必须从http://pkgs.repoforge.org/lzo/下载和操作系统版本架构匹配的lzo-devel的RPM包。

    在Hadoop中编译,安装,配置LZOP库

    有两个GitHub库维护LZOP库。Todd Lipcon维护一个基于CDH发行版的,在https://github.com/toddlipcon/hadoop-lzo。Twitter维护另一个,在https://github.com/kevinweil/hadoop-lzo。如果需要最新和最好的,用Twitter的那个版本。如果要在CDH发行版上应用,那么就需要Todd的那个版本。

    源代码中包含了LZOP的本地库和JAVA库。在下载并解压缩tarball包之后,到相应的目录中编译代码可得到本地库和JAVA库。脚本如下:

    $ ant package

    在完成以后,将生成的库文件复制到Hadoop的库目录中。脚本如下:

    # replace the following path with your actual
    # Hadoop installation directory
    #
    # the following is the CDH Hadoop home dir
    #
    export HADOOP_HOME=/usr/lib/hadoop
    $ cp ./build/hadoop-lzo-<version>.jar $HADOOP_HOME/lib/
    $ cp -R build/hadoop-lzo-<version>/lib/native/* 
    $HADOOP_HOME/lib/native/

    配置Hadoop

    下一步,需要配置Hadoop的内核,以加入对新的压缩编码器的支持。将一下行加入到core-site.xml中。CDH中core-site.xml的位置是/etc/hadoop/conf/core-site.xml。确保移出了其中的空行和空格。注意,在逗号之间没有白色字符。

    其中,io.compression.codecs的值假定Snappy压缩编码器已经安装了。如果不是,那么就需要将org.apache.hadoop.io.compress.SnappyCodec删除。

    <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>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,
        org.apache.hadoop.io.compress.SnappyCodec</value>
    </property>
    <property>
        <name>io.compression.codec.lzo.class</name>
        <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>

    CDH发行版中/usr/lib/hadoop/bin/hadoop可以自动添加本地库目录到JVM的java.library.path中。但是,如果客户端的Hadoop代码不是用那个脚本运行的话,那么就需要手动添加以下脚本到JAVA的命令行中。注意引号和/usr之间没有空白字符。

    -Djava.library.path=/usr/lib/hadoop/lib/native/Linux-amd64-64:/usr/lib64

    然后bin/run.sh脚本就可以运行Hadoop脚本。它会将本地库目录加入到java.library.path中。

  • 相关阅读:
    PostgreSQL恢复误操作
    PostgreSQL修改表空间
    vim技巧记录
    postgresql recovery.conf文件内容说明
    转一篇pgpool配置
    由PostgreSQL的区域与字符集说起(转)
    PostgreSQL老司机博客 经常翻翻收获不小
    两位数相乘的口算方法
    五线谱升调与降调
    js中的封装、继承、多态
  • 原文地址:https://www.cnblogs.com/datacloud/p/3617586.html
Copyright © 2020-2023  润新知