`
guoyunsky
  • 浏览: 854126 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
3d3a22a0-f00f-3227-8d03-d2bbe672af75
Heritrix源码分析
浏览量:206217
Group-logo
SQL的MapReduce...
浏览量:0
社区版块
存档分类
最新评论

Hadoop lzo 正确安装及问题解决

 
阅读更多

 本博客属原创文章,转载请注明出处:http://guoyunsky.iteye.com/blog/1289475

  欢迎加入Hadoop超级群: 180941958   

     

     之前有篇文章http://guoyunsky.iteye.com/blog/1237327介绍解hadoop-lzo相关问题,同时也介绍到了如何安装.但发现这种安装方法会出现一些问题.

      同时这种安装方法也是网上流传的安装方法,我这里予以纠正.先说下大概原因:hadoop-lzo-xxx的前身是hadoop-gpl-compression-xxx,之前是放在google code下管理,地址:http://code.google.com/p/hadoop-gpl-compression/ .但由于协议问题后来移植到github上,也就是现在的hadoop-lzo-xxx,github,链接地址:https://github.com/kevinweil/hadoop-lzo.网上介绍hadoop lzo压缩都是基于hadoop-gpl-compression的介绍.而hadoop-gpl-compression还是09年开发的,跟现在hadoop版本已经无法再完全兼容,会发生一些问题.而按照网上的方法,为了兼容hadoop,使用hadoop-lzo-xxx,但安装hadoop-gpl-compression会报错.具体报错如下:

11/12/02 14:28:41 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
11/12/02 14:28:41 WARN lzo.LzoCompressor: java.lang.NoSuchFieldError: workingMemoryBuf
11/12/02 14:28:41 ERROR lzo.LzoCodec: Failed to load/initialize native-lzo library
11/12/02 14:28:41 WARN mapred.LocalJobRunner: job_local_0001
java.lang.RuntimeException: native-lzo library not available
	at com.hadoop.compression.lzo.LzoCodec.createCompressor(LzoCodec.java:165)
	at com.hadoop.compression.lzo.LzopCodec.createOutputStream(LzopCodec.java:50)
	at org.apache.hadoop.mapreduce.lib.output.TextOutputFormat.getRecordWriter(TextOutputFormat.java:132)
	at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.<init>(MapTask.java:520)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:635)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:322)
	at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:210)

   我调试源码才发现原因,因为hadoop lzo实际上得依赖C/C++开发的lzo去压缩,而他们通过JNI去调用.如果使用hadoop-gpl-compression下的Native,但使用hadoop-lzo-xxx的话,会导致版本不一致问题.所以正确的做法是,将hadoop-lzo-xxx下的Native放入到/usr/local/lib下.而你每升级一个hadoop-lzo-xxx版本,或许就得重复将新lzo版本下的native目录放入/usr/local/lib下.具体需要测试.

   同时这里说下,hadoop-lzo-xxx的验证原理,让我们更系统的了解为什么使用hadoop-lzo会报的一系列错误.

   1)首先Hadoop-lzo会通过JNI调用gplcompression,如果调取不到会报Could not load native gpl library异常.具体代码如下:

   static {

    try {
      //try to load the lib
      System.loadLibrary("gplcompression");
      nativeLibraryLoaded = true;
      LOG.info("Loaded native gpl library");
    } catch (Throwable t) {
      LOG.error("Could not load native gpl library", t);
      nativeLibraryLoaded = false;
    }
}

   2)获取了gplcompression后需要初始化加载以便可以调用,如果加载不成功,如我刚才说的版本冲突等也会报一系列错误.

    同时这里的加载和初始化分成两步,一步是压缩,对应Java的类是LzoCompressor.另一步解压缩,对应Java的类是LzoDecompressor.先看下LzoCompressor是如何加载初始化的,代码如下:

static {
  if (GPLNativeCodeLoader.isNativeCodeLoaded()) {
    // Initialize the native library
    try {
      initIDs();
      nativeLzoLoaded = true;
    } catch (Throwable t) {
      // Ignore failure to load/initialize native-lzo
      LOG.warn(t.toString());
      nativeLzoLoaded = false;
    }
    LZO_LIBRARY_VERSION = (nativeLzoLoaded) ? 0xFFFF & getLzoLibraryVersion()
        : -1;
  } else {
    LOG.error("Cannot load " + LzoCompressor.class.getName() + 
    " without native-hadoop library!");
    nativeLzoLoaded = false;
    LZO_LIBRARY_VERSION = -1;
  }
}

   如我这里所报的警告WARN lzo.LzoCompressor: java.lang.NoSuchFieldError: workingMemoryBuf

就是由这里的LOG.warn(t.toString());所抛出.同时这里也会先加载gplcompression,加载不成功同样会报without native-hadoop library!错误.

 

  再看看解压缩LzoDecompressor,原理差不多,不再阐述,代码如下:

static {
  if (GPLNativeCodeLoader.isNativeCodeLoaded()) {
    // Initialize the native library
    try {
      initIDs();
      nativeLzoLoaded = true;
    } catch (Throwable t) {
      // Ignore failure to load/initialize native-lzo
      LOG.warn(t.toString());
      nativeLzoLoaded = false;
    }
    LZO_LIBRARY_VERSION = (nativeLzoLoaded) ? 0xFFFF & getLzoLibraryVersion()
        : -1;
  } else {
    LOG.error("Cannot load " + LzoDecompressor.class.getName() + 
    " without native-hadoop library!");
    nativeLzoLoaded = false;
    LZO_LIBRARY_VERSION = -1;
  }
}

    

   以上基本包含了hadoop-lzo安装使用所遇到的问题.最后回到本文的主题,正确安装hadoop-lzo.

   1)首先下载https://github.com/kevinweil/hadoop-lzo/,我这里下载到/home/guoyun/Downloads//home/guoyun/hadoop/kevinweil-hadoop-lzo-2dd49ec

  2)通过ant生成native和jar,命令如下:

      ant tar

        在build目录下生成对应的tar包,解压缩后,进入该目录可以看到对应的jar包hadoop-lzo-0.4.14.jar.同时将lib/native/Linux-amd64-64/目录下所有文件拷贝到$HADOOP_HOME/lib和/usr/local/lib两个目录下.

        注明:拷贝到/usr/local/lib是便于调试,如是生产环境则无需拷贝.

   

更多技术文章、感悟、分享、勾搭,请用微信扫描:

0
3
分享到:
评论

相关推荐

    hadoop-lzo-0.4.20-SNAPSHOT.jar

    编译后的hadoop-lzo源码,将hadoop-lzo-0.4.21-SNAPSHOT.jar放到hadoop的classpath下 如${HADOOP_HOME}/share/hadoop/common。hadoop才能正确支持lzo,免去编译的烦恼

    hadoop-cdh4.3-lzo安装及问题解决

    综上所述,"hadoop-cdh4.3-lzo安装及问题解决"涉及到的关键知识点包括Hadoop、CDH4.3、LZO压缩算法以及在企业级Hadoop环境中安装和优化LZO的过程。通过了解这些内容,可以有效提升Hadoop集群的数据处理效率,解决...

    lzo 2.0.6、hadoop-lzo-master、apache-maven

    在Hadoop-LZO项目中,Maven可以帮助开发者构建、测试和部署Hadoop-LZO模块,确保所有依赖项都正确配置和引入。 综合来看,这个压缩包可能是一个用于大数据处理环境的工具集,其中`lzo-2.06.tar.gz`提供了LZO压缩库...

    hadoop-lzo所需包

    Hadoop-LZO是一款针对Hadoop生态系统的数据压缩库,它实现了高效的Lempel-Ziv-Ozark (LZO) 压缩算法。...同时,为了确保集群中的所有节点都能正确处理LZO压缩数据,所有节点都需要安装并配置好相应的Hadoop-LZO包。

    hadoop-lzo.zip

    此外,由于LZO的Native库是C编写的,所以在运行时需要确保系统已经安装了LZO库,并且Hadoop环境能够找到这些库。这通常涉及到设置`hadoop.lzo.native.lib.available`属性为`true`,以及配置正确的库路径。 总结起来...

    hadoop集群内lzo的安装与配置.doc

    【Hadoop集群LZO安装与配置】 在大数据处理领域,Hadoop是一个广泛使用的开源框架,而LZO是一种高效的压缩算法,常用于Hadoop集群中,以减少数据存储和传输的开销。本文将详细介绍如何在运行CentOS 5.5且安装了...

    hadoop集群遇到的问题及其解决方法

    ### Hadoop集群遇到的问题及其解决方法 #### 异常一:DataNode无法连接到NameNode **问题描述:** 在Hadoop集群部署过程中,经常会出现DataNode无法成功连接到NameNode的情况,导致集群无法正常启动。 **原因分析...

    Hadoop的Codec(LZO代码库)

    使用Hadoop的LZO Codec需要额外安装并配置。在Hadoop集群中部署LZO,通常包括以下步骤: 1. 安装LZO库:首先需要在所有节点上安装LZO库,包括编译工具和库文件。 2. 获取并编译Hadoop LZO插件:从GitHub或其他源...

    hadoop-lzo-release-0.4.20.zip

    同时,需要注意的是,使用LZO压缩需要在集群中安装相应的解压缩库,以确保所有节点都能正确处理LZO压缩的数据。 总之,`hadoop-lzo-release-0.4.20.zip`是一个重要的Hadoop扩展,它提供了对LZO压缩算法的支持,对于...

    lzo-2.06.tar.gz/lzo-2.10.tar.gz

    标题中的“lzo-2.06.tar.gz/lzo-2.10.tar.gz”指的是LZO压缩库的两个不同版本的源代码压缩包,分别对应版本2.06和2.10。...在部署到Hadoop集群前,需要确保所有节点都正确安装并配置了对应的LZO库。

    hadoop2.7.1 Windows安装依赖文件

    本资源是针对Hadoop 2.7.1版本在Windows 7或Windows Server 2008及更高64位操作系统上的安装依赖文件集合。在Windows环境下搭建Hadoop环境通常比在Linux上更为复杂,因为需要解决更多的兼容性问题,如驱动和库文件的...

    hbase安装lzo压缩包的编译文件master

    总结来说,安装和配置HBase中的LZO压缩涉及到多个步骤,包括下载源码、编译、配置Hadoop和HBase,以及在Master节点上确保压缩功能的正确运行。合理使用LZO压缩可以显著提升HBase的存储和性能,但也要注意适时的性能...

    Hadoop 2.2.0 64位native文件(重编译)

    将这个文件夹替换到Hadoop安装目录下的相应位置,可以确保Hadoop正确识别并使用到这些本地库,从而保证系统的稳定运行和性能提升。 总结来说,Hadoop 2.2.0 64位native文件是为64位Linux系统定制的,包含了Hadoop...

    lzo 安装包

    LZO是一种高效的压缩算法,特别适合于大数据处理和Hadoop生态系统中的应用。LZO的全称为"Lossless Data Compression ...通过正确安装和配置,LZO能为Hadoop集群带来显著的性能提升,降低存储成本,并加速数据处理流程。

    pyspark读lzo需要依赖

    在Spark中处理LZO压缩的数据...总的来说,为了在Pyspark中处理LZO压缩的数据,你需要安装相应的DLL文件,并确保Spark能够找到并使用对应的JAR包。正确设置配置后,就可以像处理其他格式的文件一样读取和写入LZO数据了。

    hadoop2.7.0 windows

    Hadoop通常设计用于Linux环境,但在Windows上运行时,需要解决一些兼容性问题,例如路径格式和依赖库的管理。 描述中的"下载后直接替换原来bin就行"意味着在安装或升级Hadoop时,只需要将新的bin目录内容覆盖到原有...

    hadoop2.4.0 本地库

    7. **Compression Libraries**:Hadoop支持多种压缩算法,如Gzip、Lzo、Snappy等,本地库包含了这些压缩库的实现,以加速数据压缩和解压缩过程。 安装和配置Hadoop 2.4.0的本地库时,需要注意以下几点: 1. **系统...

    云计算hadoop伪集群+hbase安装配置手册(伪集群)

    ### 云计算Hadoop伪集群与HBase安装配置详解 #### 1. 综述 本文档旨在为IT工程师提供在单台Linux服务器上构建和配置Hadoop伪集群及HBase服务的详细指南。Hadoop是一种分布式计算框架,主要用于处理大量数据集。而...

Global site tag (gtag.js) - Google Analytics