因为产品需要,这两天研究了一下Hadoop Snappy。先不说什么各个压缩算法之间的性能对比,单是这个安装过程,就很痛苦。网上有很多博友写Hadoop Snappy安装过程,大部分是照着Google的文档翻译了一遍,并没有列举出遇到的问题。有的博文,明明其验证提示是错误的,还说如果输出XXX,说明安装成功了。费了老大的劲,终于安装成功了,现将详细步骤及遇到的问题,一一列出,只希望接下来需要研究及安装的朋友,看到这篇博文,能够一气呵成!本篇文章主要包括:
1. Snappy 压缩算法介绍及集中压缩算法比较
2. Snappy 安装过程及验证
3. Hadoop Snappy 源码编译过程及问题解决方案
4. Hadoop上Hadoop Snappy 安装配置过程及验证
5. HBase 配置Snappy及验证
6.如何在集群中所有节点部署
废话不多说,现在开始:
1. Snappy 压缩算法介绍及几种压缩算法比较
这一部分可以参考我的上一篇博文:Hadoop压缩-SNAPPY算法,或者直接参看Google文档:http://code.google.com/p/snappy/ 及 http://code.google.com/p/hadoop-snappy/。我的Hadoop压缩-SNAPPY算法这篇博文中,不仅简介了Google Snappy,还介绍了常见三种压缩库的比较,Snappy的优点和适用场合,这篇文章就不再做重点详细介绍。如果先看如何修改已有表的压缩方式及实测结果,可以参看HBase修改压缩格式及Snappy压缩实测分享。
2. Snappy 安装过程及验证
① 前置条件
gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3
前五个如果不能确定的话,可以直接使用yum install XXX来确认一下,如果已安装会提示,没有安装的话,会自动安装上。
② 下载Snappy 1.0.5
下载地址:http://code.google.com/p/snappy/downloads/list。
③ 编译并安装动态链接库到本地
1
2
3
|
./configure make make install |
默认是安装到了/usr/local/lib。这时在此目录下查看会生成:
1
2
3
4
5
6
7
8
9
10
|
[root@slave1 lib]# pwd /usr/local/lib [root@slave1 lib]# ll total 536 -rw-r--r--. 1 root root 369308 Jan 14 11:02 libsnappy.a -rwxr-xr-x. 1 root root 957 Jan 14 11:02 libsnappy.la lrwxrwxrwx. 1 root root 18 Jan 14 11:02 libsnappy.so -> libsnappy.so.1.1.3 lrwxrwxrwx. 1 root root 18 Jan 14 11:02 libsnappy.so.1 -> libsnappy.so.1.1.3 -rwxr-xr-x. 1 root root 171796 Jan 14 11:02 libsnappy.so.1.1.3 [root@slave1 lib]# |
如果没有错误且文件及链接一致,snappy的安装已经成功。
3. Hadoop Snappy 源码编译过程及问题解决方案
① 下载Hadoop-Snappy源码
下载地址:http://code.google.com/p/hadoop-snappy/
② 编译hadoop snappy源码
mvn package [-Dsnappy.prefix=SNAPPY_INSTALLATION_DIR]
注:如果第二步snappy安装路径是默认的话,即/usr/local/lib,则此处 [-Dsnappy.prefix=SNAPPY_INSTALLATION_DIR] 可以不写,或者 -Dsnappy.prefix=/usr/local/lib
这个过程如果你的CentOS各个软件的版本正好和Hadoop Snappy要求的一致的话,真的恭喜你,可以一部成功,但是有些还是会有问题。我遇到的三个比计较棘手的问题:
错误一:/root/modules/hadoop-snappy/maven/build-compilenative.xml:62: Execute failed: java.io.IOException: Cannot run program “autoreconf” (in directory “/root/modules/hadoop-snappy/target/native-src”): java.io.IOException: error=2, No such file or directory
解决方案:说明缺少文件,但是这个文件是在target下的,是编译过程中自动生成的,原本就不该存在,这是问什么呢?其实根本问题不是缺文件,而是Hadoop Snappy是需要一定的前置条件的:Requirements: gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3。
我这里边缺少了autoconf,automake,libtool的缘故。在ubuntu中,你可以直接依次apt-get install autoconf,automake,libtool即可,如果是在CentOS中,只需将apt-get 换成 yum。
错误二:
1
2
3
4
|
[exec] make: *** [src/org/apache/hadoop/io/compress/snappy/SnappyCompressor.lo] Error 1 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (compile) on project hadoop-snappy: An Ant BuildException has occured: The following error occurred while executing this line:
[ERROR] /home/ngc/Char/snap/hadoop-snappy/hadoop-snappy-read-only/maven/build-compilenative.xml:75: exec returned: 2 |
解决方案:这个是最恶心的。Hadoop Snappy的前置条件需要安装gcc,但是它的官方文档仅仅列出了需要gcc,而没有列出需要什么版本的gcc。在Google中英文搜索了半天,刨来刨去,终于发现,有句话说Hadoop Snappy是需要gcc4.4的。而我的是gcc4.6.3。
1
2
3
4
5
|
[root@master modules]# gcc --version gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
那么我们就要回退,如何回退:
1
2
3
4
5
6
7
|
1. apt- get install gcc-3.4
2. rm /usr/bin/gcc 3. ln -s /usr/bin/gcc-4.4 /usr/bin/gcc 之后,再gcc --version,你就会发现,gcc已经变成4.4.7了。 |
错误三:
1
2
3
4
5
|
[exec] /bin/bash ./libtool --tag=CC --mode=link gcc -g -Wall -fPIC -O2 -m64 -g -O2 -version-info 0:1:0 -L/usr/local //lib -o libhadoopsnappy.la -rpath /usr/local/lib src/org/apache/hadoop/io/compress/snappy/SnappyCompressor.lo src/org/apache/hadoop/io/compress/snappy/SnappyDecompressor.lo -ljvm -ldl
[exec] /usr/bin/ld: cannot find -ljvm
[exec] collect2: ld returned 1 exit status
[exec] make: *** [libhadoopsnappy.la] 错误 1
[exec] libtool: link: gcc -shared -fPIC -DPIC src/org/apache/hadoop/io/compress/snappy/.libs/SnappyCompressor.o src/org/apache/hadoop/io/compress/snappy/.libs/SnappyDecompressor.o -L/usr/local //lib -ljvm -ldl -O2 -m64 -O2 -Wl,-soname -Wl,libhadoopsnappy.so.0 -o .libs/libhadoopsnappy.so.0.0.1
|
解决方案:如果你去搜,你会发现网上有很多 解决/usr/bin/ld: cannot find -lxxx 这样的博客,但是这里,我告诉你,他们的都不适用。因为这儿既不是缺什么,也不是版本不对,是因为没有把安装jvm的libjvm.so symbolic link到usr/local/lib。如果你的系统时amd64,可到/root/bin/jdk1.6.0_37/jre/lib/amd64/server/察看libjvm.so link到的地方,这里修改如下:
ln -s /root/bin/jdk1.6.0_37/jre/lib/amd64/server/libjvm.so /usr/local/lib/ 问题即可解决。
③ hadoop snappy源码编译成功以后,在target包下,会有如下文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@master snappy-hadoop]# cd target/ [root@master target]# ll total 928 drwxr-xr-x. 2 root root 4096 Jan 13 19:42 antrun drwxr-xr-x. 2 root root 4096 Jan 13 19:44 archive-tmp drwxr-xr-x. 3 root root 4096 Jan 13 19:42 classes -rw-r--r--. 1 root root 168 Jan 13 19:44 copynativelibs.sh drwxr-xr-x. 4 root root 4096 Jan 13 19:42 generated-sources -rw-r--r--. 1 root root 11526 Jan 13 19:44 hadoop-snappy-0.0.1-SNAPSHOT.jar -rw-r--r--. 1 root root 337920 Jan 13 19:44 hadoop-snappy-0.0.1-SNAPSHOT-Linux-amd64-64.tar drwxr-xr-x. 3 root root 4096 Jan 13 19:44 hadoop-snappy-0.0.1-SNAPSHOT-tar -rw-r--r--. 1 root root 180661 Jan 13 19:44 hadoop-snappy-0.0.1-SNAPSHOT.tar.gz drwxr-xr-x. 2 root root 4096 Jan 13 19:44 maven-archiver drwxr-xr-x. 3 root root 4096 Jan 13 19:42 native-build drwxr-xr-x. 7 root root 4096 Jan 13 19:42 native-src drwxr-xr-x. 2 root root 4096 Jan 13 19:44 surefire-reports drwxr-xr-x. 3 root root 4096 Jan 13 19:42 test-classes -rw-r--r--. 1 root root 365937 Jan 13 19:44 test.txt.snappy [root@master target]# |
4. Hadoop上Hadoop Snappy 安装配置过程及验证
这个过程也比较繁杂,配置点比较多要仔细:
① 解压第三步target下hadoop-snappy-0.0.1-SNAPSHOT.tar.gz,解压后,复制lib文件
1
|
cp -r /root/modules/snappy-hadoop/target/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/* $HADOOP_HOME/lib/native/Linux-amd64-64/ |
② 将第三步target下的hadoop-snappy-0.0.1-SNAPSHOT.jar复制到$HADOOP_HOME/lib 下。
③ 配置hadoop-env.sh,添加:
1
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/ |
④ 配置mapred-site.xml,这个文件中,所有跟压缩有关的配置选项有:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<property> <name>mapred.output.compress</name>
<value> false </value>
<description>Should the job outputs be compressed?
</description>
</property> <property> <name>mapred.output.compression.type</name>
<value>RECORD</value>
<description>If the job outputs are to compressed as SequenceFiles, how should
they be compressed? Should be one of NONE, RECORD or BLOCK.
</description>
</property> <property> <name>mapred.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.DefaultCodec</value>
<description>If the job outputs are compressed, how should they be compressed?
</description>
</property> <property> <name>mapred.compress.map.output</name>
<value> false </value>
<description>Should the outputs of the maps be compressed before being
sent across the network. Uses SequenceFile compression.
</description>
</property> <property> <name>mapred.map.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.DefaultCodec</value>
<description>If the map outputs are compressed, how should they be
compressed?
</description>
</property> |
根据自己的需要,配置进去即可。我们为了验证方便,仅配置map部分:
1
2
3
4
5
6
7
8
|
<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> |
⑤ 重新启动hadoop。为了验证是否成功,往hdfs上传一个文本文件,敲入一些词组,运行wordcount程序。如果map部分100%完成,即说明我们hadoop snappy安装成功。
因为hadoop没有像HBase一样提供util.CompressionTest类(或者是我没有找到),所以只能按照这种方法来测试。接下来,将详细列出HBase使用Snappy的配置过程。
5. HBase 配置Snappy及验证
在Hadoop上配置Snappy成功以后,相对来说,在HBase上配置要简单一些了。
① 配置HBase lib/native/Linux-amd64-64/ 中的lib文件。HBase中的lib文件,即需要第三步中/root/modules/snappy-hadoop/target/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/ 下的所有lib文件,也需要Hadoop中,$HADOOP_HOME/lib/native/Linux-amd64-64/下的hadoop的lib文件(我看到的大部分介绍snappy的文章,均为提到这一点)。简单起见,我们只需要将$HADOOP_HOME/lib/native/Linux-amd64-64/下lib文件,全部复制到相应HBase目录下:
1
|
cp -r $HADOOP_HOME/lib/native/Linux-amd64-64/* $HBASE_HOME/lib/native/Linux-amd64-64/ |
② 配置HBase环境变量hbase-env.sh
1
2
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/ export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/ |
③ 重启HBase。
④ 验证安装是否成功
首先,使用 CompressionTest 来查看snappy是否 enabled 并且能成功 loaded:
hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://192.168.205.5:9000/output/part-r-00000 snappy
其中,/output/part-r-00000 为我们在验证hadoop snappy的时候,wordcount的输出。
执行命令后结果为:
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@master ~]# hbase org.apache.hadoop.hbase.util.CompressionTest hdfs: //192.168.205.5:9000/output/part-r-00000 snappy
13/01/13 21:59:24 INFO util.ChecksumType: org.apache.hadoop.util.PureJavaCrc32 not available. 13/01/13 21:59:24 INFO util.ChecksumType: Checksum can use java.util.zip.CRC32 13/01/13 21:59:24 INFO util.ChecksumType: org.apache.hadoop.util.PureJavaCrc32C not available. 13/01/13 21:59:24 DEBUG util.FSUtils: Creating file:hdfs: //192.168.205.5:9000/output/part-r-00000with permission:rwxrwxrwx
13/01/13 21:59:24 WARN snappy.LoadSnappy: Snappy native library is available
13/01/13 21:59:24 INFO util.NativeCodeLoader: Loaded the native-hadoop library 13/01/13 21:59:24 INFO snappy.LoadSnappy: Snappy native library loaded 13/01/13 21:59:24 INFO compress.CodecPool: Got brand- new compressor
13/01/13 21:59:24 DEBUG hfile.HFileWriterV2: Initialized with CacheConfig:disabled 13/01/13 21:59:24 INFO compress.CodecPool: Got brand- new decompressor
SUCCESS |
说明Snappy 安装已经enable并且能够成功loaded。
⑤ 接下来创建并操作Snappy压缩格式的表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@master ~]# hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.2, r1395367, Sun Oct 7 19:11:01 UTC 2012 //创建表 hbase(main):001:0> create 'tsnappy' , { NAME => 'f' , COMPRESSION => 'snappy' }
0 row(s) in 10.6590 seconds
//describe表 hbase(main):002:0> describe 'tsnappy'
DESCRIPTION ENABLED {NAME => 'tsnappy' , FAMILIES => [{NAME => 'f' , DATA_BLOCK_ENCODING => 'NONE' , BLOOMFILTER => 'NONE' , REPLICATION_ true SCOPE => '0' , VERSIONS => '3' , COMPRESSION => 'SNAPPY' , MIN_VERSIONS => '0' , TTL => '2147483647' , KEEP_DELETED_CE
LLS => 'false' , BLOCKSIZE => '65536' , IN_MEMORY => 'false' , ENCODE_ON_DISK => 'true' , BLOCKCACHE => 'true' }]}
1 row(s) in 0.2140 seconds
//put数据 hbase(main):003:0> put 'tsnappy' , 'row1' , 'f:col1' , 'value'
0 row(s) in 0.5190 seconds
//scan数据 hbase(main):004:0> scan 'tsnappy'
ROW COLUMN+CELL row1 column=f:col1, timestamp=1358143780950, value=value
1 row(s) in 0.0860 seconds
hbase(main):005:0> |
以上所有过程均成功执行,说明Snappy 在Hadoop及HBase上配置成功~
6.如何在集群中所有节点部署
这一步就非常简单了,尤其是如果你配置过Hadoop集群。仅需要将我们上边所有配置过的文件,分发到所有其他节点的相应目录即可,包括生成的/usr/lib/local下的snappy链接库。
补充:后来在真正的部署到HBase集群后,将表的COMPRESSION设置为SNAPPY后,向该表写数据是,出现异常:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
原因:Snappy是Google的开源压缩库,对Google的Guava Library有依赖,我们需要去下载相应JAR包及依赖文件,将下载的文件放到集群所有节点的相应lib下就可以了。
相关推荐
在Hadoop和HBase这样的大数据处理框架中,Snappy被广泛采用,因为它能在保持较低CPU使用率的同时提供良好的压缩比。以下是对"hadop snappy编译安装包"的详细说明: 一、Snappy简介 Snappy是由Google开发的开源压缩...
在Windows上部署Hadoop和Snappy需要注意以下几点: 1. **环境配置**:确保安装了Java开发工具(JDK),配置好JAVA_HOME环境变量。 2. **编译问题**:由于Snappy是C++库,可能需要Visual C++编译环境支持。 3. **...
Snappy 压缩算法是一种高效的压缩算法,广泛应用于 Hadoop 和 HBase 等大数据处理系统中。 本篇文章将介绍 Snappy 压缩算法在 Hadoop 集群上的安装配置过程,并分享一些遇到的问题和解决方案。 一、 Snappy 压缩...
│ Hbase性能优化-配置snappy压缩 │ Hbase中索引的介绍 │ PHoenix的编译及安装部署 │ PHoenix与Hbase表的关联使用 ├─03_笔记 │ [案例:Hbase的设计及企业优化].txt ├─04_代码 │ └─微博案例 ├─08_作业 ...
1. `hbase-create-snappy.hbase`:这个脚本可能用于创建一个使用Snappy压缩的HBase表。Snappy是一种快速的压缩算法,适用于大数据场景,能够提高数据读写效率。 2. `hbase-drop.hbase`:通常用于删除HBase中的表,...
因为Kylin会直接与HBase交互,所以在部署Kylin之前,确保HBase集群能够正常运行,并且版本兼容。 Hive的版本要求为hive1.2.1或者2.0,并且Hive的元数据需要存储在MySQL数据库中。Hive是Hadoop上的一个数据仓库工具...
3. **列式存储优化**:对于像HBase这样的列式存储系统,Snappy压缩能有效地压缩列数据,节省存储空间,同时在查询时仅解压需要的列,提高了I/O效率。 4. **与其他压缩算法的对比**:Snappy在压缩效率上可能不如其他...
使用 docker 完成hadoop hbase hive集群部署,hbase+hive 数据同步,启用 snappy 格式;可单机版部署,也可 k8s 部署。hbase+hive(hbase进行删改的数据维护,hive进行复查查询和导入数据);通过hive创建hbase表,在...
本次部署所涉及的主要Hadoop组件包括Apache Hive、Hadoop、HBase、JDK、Spark、Zookeeper等。 #### 环境准备 ##### 安装操作系统 首先,为了确保Hadoop集群的稳定性与兼容性,推荐使用CentOS 6.5作为基础操作系统...
- **获取安装包**:下载Hadoop的二进制分发版`hadoop-2.6.0.snappy.tar.gz`。 - **解压安装包**:将压缩包解压到指定目录。 - **修改环境变量**:设置`HADOOP_HOME`环境变量指向Hadoop安装目录。 - **配置参数文件**...
数据存储:熟悉HDFS、HBase、Cassandra等分布式存储系统的特性和使用。 实时处理:掌握流式数据处理技术,如Apache Kafka、Storm或Flink的实时流处理。 批处理作业:能够设计和编写高效的大规模批处理作业,优化...
接着介绍了编译安装hadoop2.x版本以及安装hadoop native支持库,这包括了snappy、protobuf、findbugs等本地库的安装,这些操作帮助提升Hadoop在处理大数据时的性能。 5. Hive安装:涉及到了hive介质的下载、软件...
Hadoop的生态系统还包括许多其他组件,如HBase(分布式数据库)、Hive(数据仓库工具)、Pig(数据分析平台)等,它们共同构建了一个强大的大数据处理框架。 总结起来,"hadoop-2.10.1.tar.gz"是一个针对生产环境...
- 可以与其他大数据组件集成,如Hadoop、HBase、Kafka等。 - 支持自定义函数(UDF、UDAF、UDTF)以扩展其功能,满足特定业务需求。 - 通过HiveServer2和Hive JDBC/ODBC,可以与各种BI工具(如Tableau、Excel)...
这个版本支持YARN(Yet Another Resource Negotiator),HDFS(Hadoop Distributed File System)以及其他Hadoop生态系统组件,如MapReduce,HBase,Hive等。 2. **Windows环境下的Hadoop**:在Windows上运行Hadoop...
总的来说,这个压缩包提供了预编译的Hadoop 2.6.0 CDH 5.14.0的64位本地库,对于那些希望快速部署Hadoop环境而避免漫长编译过程的用户来说,是一个非常实用的资源。在使用前,确保你的系统满足所需的硬件和软件配置...
- **压缩编码**: 支持 Snappy、GZIP、Deflate、BZIP 等压缩算法。 - **接口兼容性**: 提供 JDBC/ODBC 驱动,支持 Hue Beeswax 和 Cloudera Impala Query UI。 - **安全认证**: 支持 Kerberos 认证机制。 #### 六、...
常见的压缩算法有Gzip、BZip2、Snappy等。序列化则用于将对象转换为可以存储或传输的形式,Hadoop支持多种序列化格式,如Writables、JSON、Thrift等。 #### 文件基础数据结构 Hadoop支持多种文件格式,如TextFile...
- **集群部署**: 介绍了如何在Hadoop集群上部署和运行MapReduce程序。 **5.6 作业调优** - **性能优化**: 提供了关于如何调整MapReduce作业以提高性能的建议。 **5.7 MapReduce的工作流** - **流程解析**: 解释...