二、Hadoop 2.0简述
(一)Hadoop 2.0由来
工业界称Hadoop 1.X及其以前的版本(0.23.X除外)为Hadoop 1.0,称Hadoop 2.X及其以后版本为Hadoop 2.0。
Hadoop 2.0提供分布式存储(HDFS)和分布式操作系统(Yarn)两大功能软件包。
将Hadoop 2.0部署至集群后,通过调用Hadoop 2.0程序库,能够用简单的编程模型来处理分布在不同机器上的大规模数据集。由于采用客户-服务器模式,Hadoop 2.0很容易从一台机器扩展至成千上万台机器,并且每台机器都能提供本地计算存储和本地计算。考虑到集群中每台机器都可能会出问题(如硬件失效),Hadoop 2.0本身从设计上就在程序层规避了这些问题。
Hadoop至少应当包含分布式存储和分布式计算两个模块,下面给出Hadoop1.0项目模块。
(1)Hadoop Common:联系HDFS和MapReduce的纽带,它一方面为另外两组件提供一些公用jar包,另一方面也是程序员访问其他两模块的接口。
(2)HDFS:Hadoop的分布式文件系统。主要提供分布式存储服务。
(3)Hadoop MapReduce:分布式计算框架。主要负责资源管理、任务调度和MapReduce算法实现。
(二)Hadoop 2.0相关项目
Google云计算组件和Hadoop及其相关项目之间的对应关系:
Hadoop云计算系统 | Google云计算系统 |
---|---|
Hadoop HDFS | Google GFS |
Hadoop MapReduce | Google MapReduce |
HBase | Google BigTable |
ZooKeeper | Google Chubby |
Pig | Google Sawzall |
近几年工业界围绕Hadoop进行了大量的外围产品开发,下图描述了各个产品项目之间的层次关系。
(三)Hadoop应用
1、构建大型分布式集群
Hadoop最直接的应用就是构建大型分布式集群,提供海量存储和计算服务,像国内的中国移动“大云”、淘宝“云梯”等,都已是大型甚至超大型分布式集群。
2、数据仓库
很多公司的log日志文件、其他半结构化业务数据并不适合存入关系型数据库,却特别适合存入半结构化的HDFS,然后应用其他工具(如Hive、Hbase)提供报表查询之类的服务。
3、数据挖掘
大数据环境下的数据挖掘其实并没有太大改变,但大数据却给数据挖掘的预处理工具出了难题。受限于硬盘性能和内存大小限制,普通服务器读取1TB数据需要至少二十分钟,但Hadoop却是每台机器读取1/n TB,加上共享集群内存和CPU,实际处理时间何止n倍。
Hadoop己广泛应用于分布式集群构建、数据存储、数据挖掘等领域。随着大数据和云计算时代的到来,相信Hadoop 的应用将更加广泛。
三、Hadoop 2.0部署
(一)部署综述
1、部署方式
(1)安装方式:
- 传统解压包方式:烦琐易错;有助于读者深入理解Hadoop。
- Linux标准方式:简单易用;隐藏了太多细节。
(2)部署环境:
- 单机模式:不需要与其他节点交互,不需要使用HDFS,直接读写本地的文件系统。
- 伪分布模式:在一台单机上运行,用不同的进程模仿分布式运行中的各类节点。
- 分布式模式:在不同的机器上部署系统。
2、部署步骤
3、准备环境
(1)硬件环境
由于分布式计算需要用到很多机器,部署时用户须提供多台机器,至于提供几台,须根据 “部署规划”确定。
实际上,完全模式部署Hadoop时,最低需要两台机器(一个主节点,一个从节点),此外,硬件方面,每台机器最低要求有1GB内存,20GB硬盘空间。
(2)软件环境
大量的实践证明,在Linux环境下使用Hadoop则更加稳定高效。须注意的是新装系统(CentOS)的机器不可以直接部署Hadoop,需要设置:修改机器名,添加域名映射,关闭防火墙,安装JDK。
【例2】 现有一台CentOS系统机器,且装机时用户名为joe,要求将此机器名修改为cMaster,添加域名映射,关闭防火墙,安装JDK。
① 修改机器名
[joe@localhost ~]$ su-root #切换成root用户修改机器名
[root@localhost ~]# vim /etc/sysconfig/network #编辑存储机器名文件
将“HOSTNAME=localhost.localdomain
”中的“localhost.localdomain
”替换成需要使用的机器名,按要求,此处应为cMaster,即此行内容为:
HOSTNAME=CMaster #指定本机名为cMaster
注意重启机器后更名操作才会生效,用户须通过此命令修改集群中所有机器的机器名,重启后,本机将有自己唯一的机器名cMaster了。
② 添加域名映射
首先使用如下命令查看本机IP地址,这里以cMaster机器为例。
[root@cMaster ~]# ifconfig #查看cMaster机器IP地址
假如看到此机器的IP地址为“192.168.1.100
”,机器名为cMaster,则域名映射应为:
192.168.1.100cMaster
接着编辑域名映射文件“/etc/hosts
”,将上述内容加入此文件。
[root@cMaster ~]# vim /etc/hosts #编辑域名映射文件
③ 关闭防火墙
CentOS的防火墙iptables默认情况下会阻止机器间通信,编者建议系统管理员开启Hadoop使用的端口,也可以暂时关闭或永久关闭iptables(不建议),为简单起见, 永久关闭防火墙,其关闭命令如下(执行命令后务必重启机器才可生效):
[root@cMaster ~]# chkconfig --level 35 iptables off #永久关闭iptables,重启后生效
④ 安装JDK
Hadoop部署前须安装JDK,而且Hadoop只能使用Oracle的1.6及以上版本的JDK,不能使用openjdk。用户须首先下载jdk-x.rpm
包,如jdk-7u40-linux-x64.rpm
。打开刚才己经安装的CentOS机器,将jdk-7u40-linux-x64.rpm
复制至虚拟机下某位置, Termianl下执行(此方式安装的JDK无须配置java_home)如下命令:
[root@cMaster ~]# java #查看java是否安装
[root@cMaster ~]# rpm -ivh /home/joe/jdk-7u40-linux-x64.rpm #以root权限,rpm方式安装JDK
[root@cMaster ~]# java #验证java是否安装成功
4、关于Hadoop依赖软件
- SSH只是给
sbin/start-yarn.sh
等几个start-x.sh
与stop-x.sh
脚本使用。 - Hadoop本身是一堆Java代码,而Java代码并不依赖SSH。
- 本节使用的Hadoop版本为稳定版
Hadoop-2.2.0.tar.gz
。 - CentOS版本为64位CentOS-6.5。
- JDK版本为
jdk-7u40-linux-x64.rpm
。
(二)传统解压包部署
【例3】 现有三台机器,且它们都刚装好64位CentOS-6.5,安装系统时用户名为joe,请按要求完成:
① 修改三台机器名为cMaster,cSlave0和cSlave1,并添加域名映射、关闭防火墙和安装JDK。
② 以cMaster作为主节点,cSlave0和cSlave1作为从节点,部署Hadoop。
(1)制定部署规划
此Hadoop集群需三台机器(cMaster,cSlave0和cSlave1),其中cMaster作为主节点,cSlave0和cSlave1作为从节点。
(2)准备机器
准备三台机器,它们可以是实体机也可以是虚拟机,若使用虚拟机。
(3)准备机器软件环境
三台机器都要完成:修改机器名、添加域名映射、关闭防火墙和安装JDK。
(4)下载Hadoop
谷歌搜索“Hadoop download”并下载,以joe用户身份,将Hadoop分别复制到三台机器上。
(5)解压Hadoop
分别以joe用户登录三台机器,每台都执行如下命令解压Hadoop文件:
[joe@cMaster ~]# tar -zxvf /home/joe/Hadoop-2.2.0.tar.gz
[joe@cSlave0 ~]# tar -zxvf /home/joe/Hadoop-2.2.0.tar.gz
[joe@cSlave1 ~]# tar -zxvf /home/joe/Hadoop-2.2.0.tar.gz
(6)配置Hadoop
三台机器都要配置,且配置相同。
首先,编辑文件“/home/joe/Hadoop-2.2.0/etc/Hadoop/Hadoop-env.sh
”,找到如下行:
export JAVA_HOME=${JAVA_HOME}
将这行内容修改为:
export JAVA_HOME=/usr/java/jdk1.7.0_40
这里的“/usr/java/jdk1.7.0_40
”就是JDK安装位置,如果不同,读者须根据实际情况更改之,需要注意的是,三台机器都要执行此操作。
其次,编辑文件“/home/joe/Hadoop-2.2.0/etc/Hadoop/core-site.xml
”,并将如下内容嵌入此文件里configuration
标签间,和上一个操作相同,三台机器都要执行此操作:
<property><name>hadoop.tmp.dir</name><value>/home/joe/cloudData</value></property>
<property><name>fs.defaultFS</name><value>hdfs://cMaster:8020</value></property>
编辑文件“/home/joe/Hadoop-2.2.0/etc/Hadoop/yarn-site.xml
”,并将如下内容嵌入此文件里configuration
标签间,同样,三台机器都要执行此操作:
<property><name>yarn.resourcemanager.hostname</name><value>cMaster</value></property>
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
最后,将文件“/home/joe/Hadoop-2.2.0/etc/Hadoop/mapred-site.xml.template
”重命名为“ /home/joe/Hadoop-2.2.0/etc/Hadoop/mapred-site.xml
”,接着编辑此文件并将如下内容嵌入此文件的configuration
标签间,同样,三台机器都要执行此操作:
<property><name>mapreduce.framework.name</name><value>yarn</value></property>
(7)启动Hadoop
首先,在主节点cMaster上格式化主节点命名空间:
[joe@cMaster ~]# Hadoop-2.2.0/bin/hdfs namenode -format
其次,在主节点cMaster上启动存储主服务namenode和资源管理主服务resourcemanager。
[joe@cMaster ~]# hadoop-2.2.0/sbin/Hadoop-daemon.sh start namenode #cMaster启动存储主服务
[joe@cMaster ~]# hadoop-2.2.0/sbin/yarn-daemon.sh start resourcemanager #启动资源管理主服务
最后,在从节点上启动存储从服务datanode和资源管理从服务nodemanager,注意,CSlave0和cSlavel 这两台机器上都要执行,对应命令如下:
[joe@cSlave0 ~]# hadoop-2.2.0/sbin/Hadoop-daemon.sh start datanode #cSlave0启动存储从服务
[joe@cSlave0 ~]# hadoop-2.2.0/sbin/yarn-daemon.sh start nodemanager #cSlave0启动资源管理从服务
[joe@cSlave1 ~]# hadoop-2.2.0/sbin/Hadoop-daemon.sh start datanode #cSlavel 启动存储从服务
[joe@cSlave1 ~]# hadoop-2.2.0/sbin/yarn-daemon.sh start nodemanager #cSlavel启动资源管理从服务
(8)测试Hadoop
可以分别在三台机器上执行如下命令,查看Hadoop服务是否己启动。
$ /usr/java/jdk1.7.0_40/bin/jps #jps查看java进程
$ ps -ef | grep java #ps查看java进程
会在cMaster上看到类似的如下信息:
3056 ResourceManager #资源管理主服务
2347 NameNode #存储主服务
而cSlave0和cSlave1上看到类似的如下信息:
4021 DataNode #存储从服务
2761 NodeManager #资源管理从服务
此外,还可以任选一台机器,如cMaster,打开CentOS默认浏览器Firefox,地址栏输入“cMaster:50070
”,即可在Web界面看到HDFS相关信息;同理,地址栏输入“cMaster:8088
”,即可在Web界面看到 Yarn相关信息。
通过上述单机部署和集群部署,可以看出,Hadoop本身部署起来很简单,其大量工作其实都是前期的Linux环境配置,Hadoop安装只是解压、修改配置文件、格式化、启动和验证,关于Linux命令问题,请参考Linux专业书籍。