案例基于centos6.5安装hadoop2.6.4集群部署,使用两个节点作为集群环境,一个为Master节点,IP为192.168.168.139;另一个作为Slave1节点,IP为192.168.168.141
一、准备工作(所有机器)
1、创建hadoop用户,并修改/etc/sudoers文件赋予用户root权限 (直接用root用户也可以)
2、修改机器名称 # vi /etc/sysconfig/network hostname
3、关闭防火墙及其开机启动 # service iptables stop # chkconfig iptables off
查看状态# service iptables status
关闭SELinux: vi /etc/selinux/config SELINUX=disabled
# 如果是非root用户操作,应优先对一些配置文件权限开放,linux的一些操作就不细讲。#
4、卸载原有openjdk;安装jdk1.7或1.8并配置环境变量
注意:安装一些常用服务及依赖,例如ssh、perl、psmisc等,根据个人不同机器情况,有些系统是最小化安装的,需要添加服务及依赖!
5、修改所有节点的名称与IP映射 # vim /etc/hosts
(注意:此处配置包含本节点及所有其他节点的IP主机映射,集群所有机器都要配置相同一份!)
测试互ping一下
6、ssh无密登录(主要是master无密登录到其他节点)
首先:编辑sshd_config文件,去掉3个注释。(所有节点)
# vi /etc/ssh/sshd_config
重启ssh服务:# service sshd restart
在Master机器上操作:
# cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
# rm ./id_rsa* # 删除之前生成的公匙(如果有)
在用户目录下: # cd /home/hadoop
# ssh-keygen -t rsa # 一直按回车就可以(3个回车)
# cat ./id_rsa.pub >>./authorized_keys #让Master节点无密登录本机(如果非当前用户操作,还需要对该文件赋予权限600)
# ssh Master #验证无密登录本地
(如果失败过或者进行过公钥删除等操作,有可能会报错:Agent admitted failure to sign using the key ,解决方法是通过ssh-add命令将私钥加进来。# ssh-add ~/.ssh/id_rsa)
在 Master节点将上公匙传输到 Slave1节点:
# scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop
(或者在.ssh目录下执行: ssh-copy-id slave1 直接复制公钥到slave1,该操作之后在slave1上就不需要再进行认证。)
如果有多台几点,都要分发到所有节点。
在Slave1节点上操作:
将ssh公钥加入授权认证文件(如果有多个Slave节点,都要进行远程传输和加入授权这两步操作!)
# mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
# cd /home/hadoop/ #进入传送文件所在目录
# cat id_rsa.pub >>.ssh/authorized_keys #把公钥加入认证
(注意,可以用复制方法进行操作,先把文件都放在一个文件夹下,通过cp命令覆盖。要在Slave上对认证文件进行权限处理,否则Master登录Slave需要密码!)
# cd ~/.ssh # chmod 600 authorized_keys
# rm ~/id_rsa.pub # 用完可以删掉
hadoop的安装包 hadoop-2.6.4.tar.gz 放在/home/hadoop/下载
# cd /home/hadoop/下载
# tar -zxf hadoop-2.6.4.tar.gz-C /usr/local # 解压复制到local路径下
# cd /usr/local # 进入安装路径
# mv ./hadoop-2.6.4/ ./hadoop #更改文件夹名称
# chown -R hadoop:hadoop ./hadoop #为用户赋权限
最后为方便启动命令,配置PATH变量:
将 Hadoop安装目录加入 PATH变量中,这样就可以在任意目录中直接使用 hadoo、hdfs等命令了,需要在 Master节点上进行配置。首先执行 vim ~/.bashrc,加入一行:
保存后重新加载文件: # source ~/.bashrc
二、配置集群/分布式环境:
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop中的5个配置文件,更多设置项参考网络,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
1、文件 slaves,将作为 DataNode的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master节点仅作为 NameNode使用。本案例让 Master节点仅作为 NameNode使用,因此将文件中原来的 localhost删除,只添加一行内容:Slave1。
2、修改文件core-site.xml配置
3、文件 hdfs-site.xml,dfs.replication一般设为 3,但本例只有一个 Slave节点,所以 dfs.replication的值还是设为 1(设定副本的数量,每个数据节点datanode只能存放一个副本,一般副本数量不超过节点数):
4、文件 mapred-site.xml (需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:
# mv mapred-site.xml.template mapred-site.xml #在当前文件目录下执行
5、修改文件 yarn-site.xml:
配置好后,(在master)将 Master上的 /usr/local/Hadoop文件夹复制到各个节点上。如果之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 Master节点上执行:
# cd /usr/local
# rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
# rm -r ./hadoop/logs/* # 删除日志文件
# tar -zcf~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
# cd ~
# scp ./hadoop.master.tar.gzSlave1:/home/hadoop # 传输复制
在 Slave1节点上执行:
# rm -r /usr/local/hadoop # 删掉旧的(如果存在)
# tar -zxf~/hadoop.master.tar.gz -C /usr/local # 解压复制到/usr/local
# chown -R hadoop:hadoop/usr/local/hadoop #为hadoop用户赋予文件夹权限
(如果有其他 Slave 节点,也要执行将hadoop.master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。)
三、启动集群
首次启动需要先在 Master节点执行 NameNode的格式化:
# hdfs namenode -format # 首次运行需要执行初始化,之后不需要
出现以下状态说明成功。
(需要在准备工作里关闭防火墙)
CentOS系统默认开启了防火墙,在开启 Hadoop集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping得通但 telnet端口不通,从而导致 DataNode启动了,但 Live datanodes为 0的情况
(注意:这里需要# vi/usr/local/hadoop/etc/hadoop/Hadoop-env.sh里的java路径该为绝对路径,所有节点都要改!否则会报错找不到java路径)
初始化成功后接着可以启动 hadoop了,启动需要在 Master节点上进行:
# start-dfs.sh
# start-yarn.sh
# mr-jobhistory-daemon.sh start historyserver
通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer进程:
在 Slave节点可以看到 DataNode和 NodeManager进程:
缺少任一进程都表示出错。另外还需要在 Master节点上通过命令
hdfs dfsadmin -report 查看 DataNode是否正常启动,如果 Live datanodes不为 0,则说明集群启动成功。例如我这边一共有 1个 Datanodes:
也可以通过 Web页面看到查看 DataNode和 NameNode 的状态:http://master:50070/。如果不成功,可以通过启动日志排查原因。
关闭 Hadoop集群也是在 Master节点上执行的:
# stop-yarn.sh
# stop-dfs.sh
# mr-jobhistory-daemon.sh stop historyserver
至此,完成了 Hadoop的集群搭建与基本使用。