Hadoop0200HDFS+MapReduce+Hive+HBase十分钟快速入门.docx
《Hadoop0200HDFS+MapReduce+Hive+HBase十分钟快速入门.docx》由会员分享,可在线阅读,更多相关《Hadoop0200HDFS+MapReduce+Hive+HBase十分钟快速入门.docx(14页珍藏版)》请在冰点文库上搜索。
Hadoop0200HDFS+MapReduce+Hive+HBase十分钟快速入门
HDFS+MapReduce+Hive+HBase十分钟快速入门
易剑2009-8-19
1.前言
本文的目的是让一个从未接触Hadoop的人,在很短的时间内快速上手,掌握编译、安装和简单的使用。
2.Hadoop家族
截止2009-8-19日,整个Hadoop家族由以下几个子项目组成:
成员名
用途
HadoopCommon
Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:
配置文件和日志操作等。
Avro
Avro是dougcutting主持的RPC项目,有点类似Google的protobuf和Facebook的thrift。
avro用来做以后hadoop的RPC,使hadoop的RPC模块通信速度更快、数据结构更紧凑。
Chukwa
Chukwa是基于Hadoop的大集群监控系统,由yahoo贡献。
HBase
基于HadoopDistributedFileSystem,是一个开源的,基于列存储模型的分布式数据库。
HDFS
分布式文件系统
Hive
hive类似CloudBase,也是基于hadoop分布式计算平台上的提供datawarehouse的sql功能的一套软件。
使得存储在hadoop里面的海量数据的汇总,即席查询简单化。
hive提供了一套QL的查询语言,以sql为基础,使用起来很方便。
MapReduce
实现了MapReduce编程框架
Pig
Pig是SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能。
Yahoo网格运算部门开发的又一个克隆Google的项目Sawzall。
ZooKeeper
Zookeeper是Google的Chubby一个开源的实现。
它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:
配置维护、名字服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
3.演练环境
3.1.操作系统
SuSE10,Linux2.6.16,32位版本。
3.2.Hadoop
Hive通过SVN直接从网上下载原代码,其它采用hadoop-0.20.0.tar.gz二进制安装包,所以只需要编译Hive。
另外,请注意不要下载2009-8-19号的Hive,2009-8-19提交的Hive版本在hadoop-0.20.0.tar.gz上编译通不过,原因是:
Hive源代码根目录\ql\src\java\org\apache\hadoop\hive\ql\exec\FileSinkOperator.java文件中多了一行:
importpress.LzoCodec;
而应当下载2009-8-4号和2009-8-19之间的版本,或2009-8-19之后的版本。
3.3.Hive
在0.20.0版本的Hadoop二进制安装包中,并没有集成Hive,所以Hive需要自己编译,编译时需要使用到ant和ivy两个工具,而且依赖于Hadoop。
3.4.Java
运行Hadoop和编译Hive,都需要使用到Java,所以需要第一个安装的是Java。
3.5.机器
演练时,在3台机器上搭建Hadoop集群,假设这3台机器如下表所示:
机器名
机器IP
用途
Hadoop-A
192.168.0.1
用作Master
Hadoop-B
192.168.0.2
用作Slave
Hadoop-C
192.168.0.3
用作Slave
注意事项:
机器名中不能包括下划线“_”,但可以包括横线。
另可使用不带参数的hostname来查看机器名,修改机器名方法为:
hostname机器名,如:
hostnameHadoop-A。
另外,集群内所有的机器登录用户名和密码要保持相同。
3.6.安装列表
安装
说明
Java1.6
A、B和C三台机器都需要安装
Hadoop0.20.0
A、B和C三台机器都需要安装
Hive
不需要在B和C两台机器上安装,也就是Slave机器不需要安装
ant
不需要在B和C两台机器上安装,也就是Slave机器不需要安装
ivy
不需要在B和C两台机器上安装,也就是Slave机器不需要安装
注意事项:
为求简单所有操作均以root用户完成,实际上可以使用非root用户,但环境变量就不能直接在/etc/profile文件中添加了。
3.7.安装路线
4.配置ssh2和修改/etc/hosts
需要在所有机器上配置ssh2和修改/etc/hosts。
4.1.配置ssh2
1)mkdir~/.ssh2#如果~/.ssh2目录已经存在,则这一步可以跳过
2)cd~/.ssh2
3)ssh-keygen2-trsa
4)echo"IdKeyid_rsa_2048_a">identification
5)echo"keyid_rsa_2048_a.pub">authorization
4.2.修改/etc/hosts
1)在/etc/hosts文件中增加如下三行:
192.168.0.1Hadoop-A
192.168.0.2Hadoop-B
192.168.0.3Hadoop-C
并根据上述关系,使用hostname命令修改三台机器的机器名。
5.安装Java
1)从下载jre,请注意是Java1.6版本,原因是Hadoop和Hive使用到了模板等特性
2)下载“Linux(自解压文件)”这个版本的jre,如下图所示
3)
将下载的Java二进制安装包jre-6u15-linux-i586.bin上传到/usr/local目录
4)为jre-6u15-linux-i586.bin文件增加可执行权限:
chmod+xjre-6u15-linux-i586.bin
5)运行jre-6u15-linux-i586.bin:
./jre-6u15-linux-i586.bin
6)用户协议接受,选择yes
7)安装成功后,在/etc/profile增加如下一行:
exportPATH=/usr/local/jdk/bin:
$PATH
6.安装Hadoop
1)从http:
//hadoop.apache.org/common/releases.html下载Hadoop二进制安装包hadoop-0.20.0.tar.gz
2)将hadoop-0.20.0.tar.gz上传到/usr/local目录
3)在/usr/local目录,将hadoop-0.20.0.tar.gz解压
4)为hadoop-0.20.0建一个软链接:
ln-shadoop-0.20.0hadoop
5)在/etc/profile文件中,增加如下两行:
exportHADOOP_HOME=/usr/local/hadoop
exportPATH=$HADOOP_HOME/bin:
$PATH
完成以上步骤后,Hadoop就安装好了。
7.配置HDFS
7.1.修改hadoop-env.sh
所有机器做同样操作。
hadoop-env.sh位于/usr/local/hadoop/conf目录下,需要在这个文件中设置环境变量JAVA_HOME,增加如下一行即可:
exportJAVA_HOME=/usr/local/jre
7.2.修改core-site.xml
所有机器做同样操作。
在hadoop-0.20.0.tar.gz安装包中,conf目录下的core-site.xml默认是空的,但src/core目录下有一个缺省的配置文件core-default.xml,所以只需要将它复制到conf目录下,并重命名成core-site.xml即可,下述操作都是基于此操作的。
core-site.xml文件位于/usr/local/hadoop/conf目录下。
7.2.1.hadoop.tmp.dir
设置临时文件目录参数hadoop.tmp.dir,默认情况下master会将元数据等存在这个目录下,而slave会将所有上传的文件放在这个目录下,在这里数据目录统一为/usr/local/hadoop/data:
hadoop.tmp.dir
/usr/local/hadoop/data
Abaseforothertemporarydirectories.
注意事项:
由于上传到Hadoop的所有文件都会被存放在hadoop.tmp.dir所指定的目录,所以要确保这个目录是足够大的。
7.2.2.fs.default.name
master用这个参数,提供基于http协议的状态上报界面,而slave通过这个地址连接master,设置如下:
fs.default.name
hdfs:
//Hadoop-A:
54310
Thenameofthedefaultfilesystem.AURIwhose
schemeandauthoritydeterminetheFileSystemimplementation.The
uri'sschemedeterminestheconfigproperty(fs.SCHEME.impl)naming
theFileSystemimplementationclass.Theuri'sauthorityisusedto
determinethehost,port,etc.forafilesystem.
备注:
fs.default.name指定NameNode的IP地址和端口号,缺省值是file:
///,,表示使用本地文件系统,,用于单机非分布式模式。
dfs.replication指定HDFS中每Block被复制的次数,起数据冗余备份的作用。
在典型的生产系统中,这个数常常设置为3。
7.3.修改masters
这一步只需要在master节点上执行。
这个文件存储备master节点的IP或机器名,建议使用机器名,每行一个机器名。
主master会将元数据等备份到备master节点,文件位于conf目录下。
这里,我们为masters文件增加如下一行即可:
Hadoop-A
7.4.修改slaves
这一步也只需要在master节点上执行,以便master以ssh2方式去启动所有的slave节点。
这个文件存储slave节点的IP或机器名,建议使用机器名,每行一个机器名。
这里我们增加如下两行:
Hadoop-B
Hadoop-C
7.5.修改hdfs-site.xml
所有机器做同样操作。
从src/hdfs目录下,将hdfs-default.xml复制到conf目录,并重命名成hdfs-site.xml,这里不需要修改此文件。
8.配置MapReduce
8.1.修改mapred-default.xml
所有机器做同样操作。
从src/mapred目录下,将mapred-default.xml复制到conf目录,并重命名成mapred-site.xml。
mapred.job.tracker
Hadoop-A:
54311
ThehostandportthattheMapReducejobtrackerruns
at.If"local",thenjobsarerunin-processasasinglemap
andreducetask.
备注:
mapred.job.tracker指定JobTracker的IP地址和端口号。
缺省值是local,,表示在本地同一Java进程内执行JobTracker和TaskTracker,,用于单机非分布式模式。
9.安装Hive
hadoop-0.20.0中并没有集成二进制的Hive,所以需要通过源代码编译一个,但是2009-8-19日提交的Hive并不能在hadoop-0.20.0上编译,而应当使用2009-8-4之后和2009-8-19之间的版本。
9.1.安装ant
1)从http:
//ant.apache.org/下载ant二进制安装包,选择1.7.1版本
2)下载后,将包apache-ant-1.7.1-bin.zip上传到/usr/local目录
3)进入/usr/local目录,将apache-ant-1.7.1-bin.zip解压:
unzipapache-ant-1.7.1-bin.zip
4)进入/usr/local目录,为ant建一个软连接:
ln-sapache-ant-1.7.1ant
5)修改/etc/profile,增加如下行:
exportPATH=/usr/local/ant/bin:
$PATH
至此,ant算是安装好了
。
9.2.安装ivy
1)从http:
//www.apache.org/dist/ant/ivy/下载ivy二进制安装包,选择2.1.0-rc2版本
2)下载后,将包apache-ivy-2.1.0-rc2-bin.tar.gz上传到/usr/local目录
3)进入/usr/local目录,将apache-ivy-2.1.0-rc2-bin.tar.gz解压:
tarxzfapache-ivy-2.1.0-rc2-bin.tar.gz
4)进入/usr/local目录,为ivy建一个软连接:
ln-sapache-ivy-2.1.0-rc2ivy
6)修改/etc/profile,增加如下行:
exportIVY_HOME=/usr/local/ivy
至此,ivy算是安装好了。
9.3.编译Hive
在编译Hive之前,请确保HADOOP_HOME和IVY_HOME两个环境变量已经生效。
1)使用svn从http:
//svn.apache.org/repos/asf/hadoop/hive/trunk下载Hive源代码
2)将下载来的Hive源代码打包,然后上传到Hadoop-A机器
3)解压Hive源代码包
4)修改shims/ivy.xml:
只保留0.20.0的配置,否则编译会出错,将原ivy.xml文件:
修改成如下:
5)运行ant开始编译:
ant-Dtarget.dir=/usr/local/hadoop/hive-Dhadoop.version=0.20.0package
这步完成之后,Hive会被安装到/usr/local/hadoop/hive目录下
6)添加Hive环境变量,在/etc/profile文件中增加如下两行:
exportHIVE_HOME=/usr/local/hadoop/hive
exportPATH=$HIVE_HOME/bin:
$PATH
10.安装HBase
1)从http:
//svn.apache.org/repos/asf/hadoop/hbase/trunk下载最新的HBase源代码
2)将HBase源代码打包,并上传到Linux上
3)解压HBase源代码包
4)编译HBase:
ant-Dtarget.dir=/usr/local/hadoop/hbase-Dhadoop.version=0.20.0package
5)编译成功之后,HBase可能并不象Hive一样自动安装到/usr/local/hadoop/hbase目录下,这个时候需要手工复制到HBase安装目录下:
将build/hbase-0.21.0-dev整个目录复制到/usr/local/hadoop目录下,并将hbase-0.21.0-dev重命名成hbase即可
6)进入/usr/local/hadoop/hbase/conf目录,将hbase-default.xml复制一份,并命名成hbase-site.xml
7)修改hbase-site.xml:
设置hbase.rootdir的值为:
hdfs:
//Hadoop-A:
54310/hbase;
设置hbase.master(hbase.master可能为hbase.master.port)的值为:
Hadoop-A:
60000
8)修改hbase-env.sh:
设置环境变量JAVA_HOME:
exportJAVA_HOME=/usr/local/jre
9)在Master节点,还需要修改regionservers,在这个文件中列出所有的slave机器,一行一个机器名:
Hadoop-B
Hadoop-C
这一步不用在slave节点上操作。
10)通过以上操作,HBase已经安装和配置好,然后应当打包,将它部署到集群的所有节点上
11)对于HBase,还需要将hbase.zookeeper.quorum的值修改成master节点的主机名,如:
Hadoop-A
11.体验
11.1.启动和停止
11.1.1.hadoop
在启动Hadoop集群之前,需要先格式化,在master节点上执行下面的命令即可:
hadoopnamenode-format
11.1.2.start-all.sh
这个脚本用来启动Hadoop。
可以通过http:
//172.25.38.127:
50070来查看HDFS的启动情况。
可以通过http:
//172.25.38.127:
50030来查看MapReduce的启动情况。
11.1.3.stop-all.sh
这个脚本用来停止Hadoop。
11.2.体验HDFS
HDFS的使用和普通的Linux命令差不多,只不过各类操作都必须作为hadoop命令的参数,如在hadoop上执行ls操作:
hadoopfs-ls/
这条命令相当于Linux下的ls/。
11.3.体验MapReduce
体验MapReduce,可以使用Hadoop自带的WordCount,如:
hadoopjarwordcount.jar/x/x/z
其中wordcount.jar是WordCount的可执行包,/x/x是源文件,是一段以逗号分隔的英文片断,而/z是结果存放的目录。
11.4.体验Hive
Hive的使用非常简单,照着http:
//wiki.apache.org/hadoop/Hive/GettingStarted上说的来操作就可以了。
12.FAQ
12.1.如何查看Hadoop进程
如果安装了JDK,则在JDK的bin目录下有一个jps命令,可以用来查看java进程,如:
#jps
27612NameNode
17369Jps
16206HQuorumPeer
15423HMaster
27761SecondaryNameNode
27839JobTracker
其中,第一列为进程号,第二列为进程名称。
12.2.ssh端口问题
如果ssh不是使用默认端口,则需要修改hadoop-env.sh文件中的HADOOP_SSH_OPTS环境变量,假设ssh端口号为8000,则可以简单设置为:
exportHADOOP_SSH_OPTS="-p8000"
如果安装了HBase,还应当修改hbase-env.sh文件中的HBASE_SSH_OPTS。
12.3.首次ssh登录问题
首次通过ssh登录另一台机器时,可能会遇到一个yes确认过程,因此在启动之前,应当先手工或使用其它脚本ssh成功登录一次,否则容易遇到如下错误:
r#./start-hbase.sh
DOSS38-127-sles10:
Hostkeynotfoundfromdatabase.
DOSS38-127-sles10:
Keyfingerprint:
DOSS38-127-sles10:
xuror-ledab-buhim-zohok-tanop-cyrig-tysac-gyhyp-refan-semim-pyxex
DOSS38-127-sles10:
Youcangetapublickey'sfingerprintbyrunning
DOSS38-127-sles10:
%ssh-keygen-Fpublickey.pub
DOSS38-127-sles10:
onthekeyfile.
DOSS38-127-sles10:
warning:
tcgetattrfailedinssh_rl_set_tty_modes_for_fd:
fd1:
Invalidargument