Hadoop 集成Snappy 全流程记录 提供依赖组件 【MAC 躺坑记录】

写在前面

ps:Mac的小伙伴可以滑到文末
之前我在本地创键Hive表的时候一般都是以默认textFile格式进行存储的,最近玩的一些大表确实占用空间的,就想着Parquet格式存储+Snappy压缩来实现数据的存取。殊不知,

Caused by: java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path

于是我检查了下本地环境:

➜  ~ hadoop checknative
20/12/20 12:00:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Native library checking:
hadoop:  false
zlib:    false
snappy:  false
lz4:     false
bzip2:   false
openssl: false
20/12/20 12:00:33 INFO util.ExitUtil: Exiting with status 1
➜  ~

😭 hai… 这让我怎么玩,没办法,只有来搞搞了。
ps:我本地的hadoop是直接装在mac上的,为了不搞乱自己的电脑,我把这个操作移到了云服务器上。等云服务器上配置好了,下载到本地即可。

一、所需组件

Snappy 1.1.3
Protobuf-2.5.0
Hadoop-src-2.9.2

1.安装依赖包 **重要 不然后面你也是无法继续的

yum -y install gcc g++ libtool cmake maven zlib1g.dev autoconf automake gzip unzip

2.编译安装 Snappy 本地库

tar -zxvf snappy-1.1.3.tar.gz
cd snappy-1.1.3
./configure
make
make install

默认目录是 /usr/local/lib,查看snappy是否安装成功,显示和下面一致

[root@spark002 ~]# ll /usr/local/lib | grep snappy
-rw-r--r-- 1 root root 522248 12月 20 09:56 libsnappy.a
-rwxr-xr-x 1 root root    955 12月 20 09:56 libsnappy.la
lrwxrwxrwx 1 root root     18 12月 20 09:56 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx 1 root root     18 12月 20 09:56 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x 1 root root 258704 12月 20 09:56 libsnappy.so.1.3.0
[root@spark002 ~]#
  1. 编译安装 Protobuf
tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=/opt/apps/protobuf
make  
make install

将protobuf 添加到系统环境中
vim ~/.bash_profile

export PROTOBUF_HOME=/opt/apps/protobuf
export PATH=$PROTOBUF_HOME/bin:$PATH

验证:

[root@spark002 ~]# protoc --version
libprotoc 2.5.0
[root@spark002 ~]#

好,到这里。前置依赖就算OK了,接下来正式编译

二、Hadoop-src-2.9.2 源码编译

说明 : 在hadoop2.x源码已经集成了Snappy压缩了,所以编译安装
hadoop-snappy 根本是多余的,只要安装snappy本地库和重新编译hadoop native 库就行:
mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

编译过程中,会出现java堆栈溢出情况,因此执行下述命令扩大内存:

export MAVEN_OPTS="-Xms256m -Xmx512m"

tar -zxvf hadoop-2.9.2-src.tar.gz
cd hadoop-2.9.2-src

执行编译命令:

mvn package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

这一步编译是真的很慢😭,要有耐心。最后你会看见BUILD SUCESS的

ll /opt/apps/hadoop-2.9.2-src/hadoop-dist/target/hadoop-2.9.2/lib/native

三、本地 Hadoop 添加 Snappy

将云服务器上刚才编译好的包拷贝到本地

$HADOOP_HOME/lib/native

ps:如果是集群,需要将这份文件分发到每个节点的$HADOOP_HOME/lib/native 目录下

添加到系统环境中:
$HADOOP_/HOME/etc/hadoop/hadoop-env.sh 添加如下环境变量:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native/

修改 $HADOOP_HOME/etc/hadoop/core-site.xml配置文件,在文件中加入:

<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,
        org.apache.hadoop.io.compress.SnappyCodec
    </value>
</property>

修改 $HADOOP_HOME/etc/hadoop/mapred-site.xml

<property>
    <name>mapred.output.compress</name>
    <value>true</value>
</property>
<property>
    <name>mapred.output.compression.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
    <name>mapred.compress.map.output</name>
    <value>true</value>
</property>
<property>
    <name>mapred.map.output.compression.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

如果是集群也是需要将上面的配置同步到 集群中的每一个节点上的。

重新启动 HDFS,再次检查:

尴尬 好像还是不行。。。搞了那么多,结果不行 😿

重来

Mac开发之Unable to load native-hadoop library问题解决
MAC的小伙伴参考这个文章就可以了。

hadoop native on mac 下载

https://github.com/janlle/mac-hadoop-native-lib-mojove

https://github.com/whiteclaw/hadoop-native-macos

https://github.com/mingsquall/native-hadoop-library

最后,我终于可以了
在这里插入图片描述

花絮:

      .option("compression", "uncompressed")
      .csv("hdfs://spark003:8020/szdata-sparketl/sz20180901-uncompressed.csv")
VS 
	   .option("compression", "snappy")
       .parquet("hdfs://spark003:8020/szdata-sparketl/sz20180901-snappy.parquet")

在这里插入图片描述

在这里插入图片描述

列存parquet+压缩确实更够厉害🐶🐶

参考:
https://blog.csdn.net/zilong_zilong/article/details/78323946
https://blog.csdn.net/w1992wishes/article/details/105557645
https://blog.csdn.net/wyz0516071128/article/details/80892487

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值