zoukankan      html  css  js  c++  java
  • 执行Hadoop job提示SequenceFile doesn't work with GzipCodec without native-hadoop code的解决过程记录

    参照Hadoop.The.Definitive.Guide.4th的例子,执行SortDataPreprocessor作业时失败,输出的错误信息

     SequenceFile doesn't work with GzipCodec without native-hadoop code!

    根据提示初步猜测应该是没有加载到对应的库,怀疑是java的某个jar包没有加载到。根据提示搜索参考了一些解决方案,应该是hadoop native lib没有加载到,于是继续了解什么是hadoop native lib。

    hadoop native lib

    字面上意思就是hadoop的本地运行库,由于hadoop的一些操作(比如压缩)为了提高性能,不适合使用java的库运行,所以提供一批本地库。

    参考http://www.cnblogs.com/gpcuster/archive/2011/02/17/1957042.html

    好了,搞明白hadoop native lib后,现在要定位为什么没有加载成功

    继续搜索,找到了相似的解决方案,参考http://blog.csdn.net/jiedushi/article/details/7496327,学习到了如下debug命令

    export HADOOP_ROOT_LOGGER=DEBUG,console

    通过这个设置,可以显示hadoop执行作业时的调试信息,也就是可以输出错误信息

    启用调试之后,执行hadoop checknative(这是检测hadoop本地库是否加载成功的命令)

    输出如下调试信息

    16/03/18 03:44:41 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/hadoop/lib/native/libhadoop.so.1.0.0: libc.so.6: version `GLIBC_2.14' not found (required by /usr/hadoop/lib/native/libhadoop.so.1.0.0)

    根据调试信息继续进入另外一个洞,什么是GLIBC?

    简单了解GLIBC,发现是一个C运行库,功能很强大,linux系统的重要基础组件。

    根据提示信息"GLIBC_2.14"搜索,引出了一个更根本的问题,本机的GLIBC的版本不是2.14,是2.12,参考http://www.cnblogs.com/gw811/p/3676856.html(这篇文章的export方式升级版本无效果,还会导致命令行完全不可用)

    现在确定需要升级GLIBC到2.14版本,直接用yum install不行,仅仅只是给2.12版本打升级包,但是版本没有升级。找了好几个解决方案,最终找到一个可行的

    http://blog.csdn.net/niying/article/details/42491557

    安装2.14版的步骤还算简单,只是比较长特别是执行make -j4,需要点耐心,关键步骤是通过更新软链接升级GLIBC版本

    ln -fs /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

    /lib64/libc.so.6本身就是一个已存在软链接,指向的是同目录的llibc-2.12.so,通过上述命令将新版的库链接到libc.so.6

    完成上述步骤执行,再次执行hadoop checknative

    INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library

    看到上述信息说明本地库加载成功

    接着继续执行SortDataPreprocessor作业,成功运行,到此问题解决。

  • 相关阅读:
    .net core 使用Https总结
    移动宽带丢失gzip
    .net core 3.0 3.1 在docker 下报SSL Handshake failed with OpenSSL error
    使用sequelize-auto 生成mysql 表的实体时主键没有 autoIncrement: true 属性
    asp.net core 控制静态文件的授权
    我用asp.net core 部署到docker遇到的问题
    docker 命令 记录
    docker 容器连接 host的sql server失败
    asp.net core spa应用(angular) 部署同一网站下
    Java使用算数运算符实现两个整数互换
  • 原文地址:https://www.cnblogs.com/shenba/p/5294610.html
Copyright © 2011-2022 走看看