hadoop 集群搭建
实验室当前hadoop集群节点如下:
主机名 | 用户名 | IP | 集群中的角色 |
---|---|---|---|
master | hadoop | 10.13.61.122 | NameNode、JobTracker |
slave1 | hadoop | 10.13.61.125 | DataNode、TaskTracker |
slave2 | hadoop | 10.13.61.132 | DataNode、TaskTracker |
slave3 | hadoop | 10.13.61.146 | DataNode、TaskTracker |
slave4 | hadoop | 10.13.61.144 | DataNode、TaskTracker |
slave5 | hadoop | 10.13.61.143 | DataNode、TaskTracker |
slave6 | hadoop | 10.13.61.147 | DataNode、TaskTracker |
ajm-zju | hadoop | 10.13.61.129 | DataNode、TaskTracker |
各个节点的用户名均设置为 hadoop,密码均为 123456。其中slave3,slave4目前一般不使用。
hadoop集群安装主要有以下几个步骤:
- 环境配置(host设置,ssh免密登录,Java安装等)
- hadoop安装及修改配置文件
- 运行及测试
一、环境配置
1. 用户、主机名、hosts文件
由于目前已经搭建好的hadoop集群的用户名均为hadoop,所以需要在Ubuntu系统上新建一个hadoop用户,步骤如下:
创建hadoop操作用户
1 | sudo useradd -m hadoop -s /bin/bash |
给hadoop用户添加密码
1 | sudo passwd hadoop |
输入密码后回车,密码在输入时是不可见的。
给hadoop用户分配sudo权限
1 | sudo adduser hadoop sudo |
注销或重启系统,以hadoop用户登录
切换用户
1 | su <用户名>,例如 su hadoop; su ajm |
输入要切换的用户密码,即可切换。
安装vim、gedit
vim是命令行编辑工具,gedit是图形界面编辑器,不习惯vim的话建议使用gedit
1 | sudo apt-get install vim |
修改主机名
不想修改主机名可以跳过此步,不会有影响
在终端中输入hostname可以查看当前主机名,如下图:
实际上在终端中有 hadoop@ajm-zju,其中hadoop是用户名,ajm-zju是主机名
比如要把新的主机加入集群,为了名称统一,可以将主机名改为 slave7,只需:
1 | sudo hostname slave7 #暂时生效,重启后会失效 |
在文件中修改为slave7即可
查看本机ip地址
终端中输入以下命令:
1 | ifconfig |
图中的 inet地址: 10.13.61.129 即为本机ip地址。
配置hosts
/etc/hosts文件里维护了主机名和ip地址的映射关系,这样可以直接通过主机名通信,不用每次输入复杂的ip地址。通过cat命令可以直接在命令行中查看文件内容:
1 | sudo cat /etc/hosts |
在我的主机上,结果如下:
可以hosts文件中保存了hadoop集群中其他主机的 ip地址<->主机名 映射关系,这样在hadoop进行通信时,可以直接通过主机名访问。所以如果集群加入新的主机,需要在新主机上修改hosts文件如上图,并加上本机地址映射
1 | sudo gedit /etc/hosts |
终端中输入以上命令进行修改
测试
如果配置成功,通过 ping 测试时,可以直接通过主机名而不需要ip地址
1 | ping master |
成功时结果如下:
注:ping指令会一直执行,可以通过 ctrl+C
停止
2. 配置SSH免密登录
由于hadoop集群中master主机需要调度各个slave,而这需要配置ssh远程登录服务。
安装ssh
ubuntu 默认安装了ssh 客户端,没有安装服务端。运行:
1 | ps -e|grep ssh |
结果应该与下文类似:
1 | hadoop@ajm-zju:/home/ajm$ ps -e|grep ssh |
如果没有 sshd
,则说明没有安装ssh服务端,可以输入以下命令安装:
1 | sudo apt-get install openssh-server |
ssh登录其他主机
1 | ssh master |
出现身份警告时,输入yes并回车,需要输入密码时,请输入master主机的密码。
之后就登录了master主机,可以通过命令行操作maseter主机。
注:退出登录使用exit
命令。
生成RSA公私钥对
但是每次ssh登录都需要输入密码太麻烦,所以可以通过公私钥的方式免密登录,配置方法是 A主机将公钥加入到B主机的authorized_keys中, 则A可以免密登录B。
1 | ssh-keygen -t rsa # 一路回车 |
终端中输入以上命令后,可以看到有 id_rsa(私钥),id_rsa.pub(公钥)。
则将id_rsa.pub追加到master主机的authorized_keys中,则当前主机可以免密登录master主机。
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub master |
如需要输入密码则输入master主机的密码
ssh免密登录测试
1 | ssh master |
如果直接登录成功,则配置正确。
登录master后,由于master主机已经生成了公私钥对,可以将master的公钥发给当前主机,实现master对当前主机的ssh免密登录。
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub <hostname> |
如果出现错误,则需要在master主机中修改/etc/hosts,添加新主机的 ip<->hostname 映射。
3. java安装
下载 jdk-8u101.linux-x64.tar.gz
,运行以下命令解压到/usr目录下:
1 | sudo mkdir /usr/java |
配置环境变量
在前面是通过./java
执行java可执行程序,但是为了执行这个程序,必须每次都切换到/usr/java/jdk1.8.0_101/bin
目录下,为了能在任何目录下都能执行java的相关程序,需要配置环境变量。
1 | sudo gedit /etc/profile |
在/etc/profile文件末尾添加如下
1 | export JAVA_HOME=/usr/java/jdk1.8.0_101 |
保存后退出。通过source
命令使得上面的修改生效。
1 | source /etc/profile |
输入以下命令测试是否成功配置环境变量
1 | java -version |
二、Hadoop安装
1. 安装及环境变量配置
安装
将hadoop-2.6.0.tar.gz解压到目录/opt
1 | sudo tar -zxvf hadoop-2.6.0.tar.gz -C /opt # 解压到/opt |
配置环境变量
与java配置环境变量相同,在/etc/profile中追加:
1 | export HADOOP_HOME=/opt/hadoop-2.6.0 |
保存后退出。通过source
命令使得上面的修改生效。
1 | source /etc/profile |
输入以下命令测试是否成功配置环境变量
1 | hadoop version |
2. 配置参数
需要对所有的集群节点配置参数,其中大部分文件都是相同的,可以配置一个之后直接复制覆盖相关文件,而比如不同主机java安装路径不同的话,需要复制之后修改hadoop-env.sh和yarn-env.sh的相关参数。
hadoop需要配置一些参数才能成功运行,这些配置文件都在/opt/hadoop-2.6.0/etc/hadoop/
目录下。
hadoop-env.sh and yarn-env.sh
在hadoop-env.sh
和yarn-env.sh
中需要指定java安装目录。在文件末尾追加以下内容即可:
1 | export JAVA_HOME=/usr/java/jdk1.8.0_101 |
slaves
slaves文件需要添加所有的slave节点主机名如下:
1 | slave1 |
core-site.xml
添加以下内容:
1 | <configuration> |
hdfs-site.xml
这个文件配置hdfs文件系统相关参数,添加以下内容:
1 | <configuration> |
mapred-site.xml
这个文件配置mapreduce任务相关参数。首先需要重命名mapred-site.xml.template文件:
1 | mv ./mapred-site.xml.template mapred-site.xml |
然后将以下内容添加到 mapred-site.xml:
1 | <configuration> |
yarn-site.xml
这个文件配置yarn资源管理调度的相关参数,添加以下内容:
1 | <configuration> |
三、 运行及测试
ssh登录master主机后,进行以下操作。
格式化分布式文件系统(已有hadoop系统请跳过这一步)
只有在第一次搭建hadoop系统时需要进行格式化操作,请不要在已有的hadoop系统上格式化,这会删除所有的数据!!!!1 | hdfs namenode -format |
运行文件系统管理器hdfs
1 | start-dfs.sh |
运行任务调度管理器yarn
1 | start-yarn.sh |
查看相关进程
1 | jps |
在master中可以看到:
1 | [hadoop@master ~]$ jps |
在各个slave中可以看到:
1 | hadoop@ajm-zju:/$ jps |
Web查看信息
在web上可以看到集群启动的信息:
- 查看hdfs: master:50070
- 查看resourcemanager: master:8088
如果web页面访问不了,可能是master主机的防火墙未关闭, ssh登录master主机,运行以下命令:
1 | sudo systemctl status firewalld.service # 查看防火墙状态 |
若图中的Active:显示为active,则需要关闭防火墙。
1 | sudo systemctl stop firewalld.service # 关闭防火墙 |
关闭后重新访问页面即可。
关闭hadoop
执行相反的操作
1 | stop-yarn.sh |
本文引用了以下内容