Hadoop 集群的安装配置大致为如下流程:
- 选定一台机器作为 Master
- 在 Master 、slave节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
- 在Master、 Slave 节点上配置SSH免密码登录
- 在 Master 节点上安装 Hadoop,并完成配置
- 将 Master 节点上的 /usr/local/hadoop 目录(Hadoop安装目录)复制到其他 Slave 节点上
- 在 Master 节点上开启 Hadoop
修改服务器主机名、/etc/hosts文件
- 修改主机名
vi /etc/hostname #添加主机名
master
vi /etc/sysconfig/network #添加IP和hostname对应关系
10.10.5.1 master
reboot
如果是用 CentOS 6.x 系统,则修改 /etc/sysconfig/network 文件,改为
HOSTNAME=Master
- 修改集群中每台机器的host
vim /etc/hosts
10.10.5.1 master
10.10.5.2 slave1
10.10.5.3 slave2
创建hadoop用户
useradd -m hadoop
passwd hadoop
建立集群之间的SSH 免密码登录
- 切换到Hadoop用户下,生成dsa密钥。每台机器步骤如下
su hadoop
cd ~/.ssh
ssh-keygen -t dsa # 会有提示,都按回车就可以
cat id_dsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限,如果不改,无法通过,原因好像是cent os的权限验证比较严格
-
集群主机之间SSH免密码登录(以master为例)
首先将master生成的公匙用scp命令传到所有的slaver上(以下命令是在master上执行)
scp ~/.ssh/id_dsa.pub hadoop@slave1:/home/hadoop/.ssh/m_id_dsa.pub
scp ~/.ssh/id_dsa.pub hadoop@slave2:/home/hadoop/.ssh/m_id_dsa.pub
scp ~/.ssh/id_dsa.pub hadoop@slave3:/home/hadoop/.ssh/m_id_dsa.pub
- 使用
hadoop
用户登入slave1/2,将公匙加入到授权中(以下命令是在slave上执行)
cat ~/.ssh/m_id_dsa.pub >> ~/.ssh/authorized_keys
同理, 对于slave1来说,必须可以ssh master,ssh slave2
scp ~/.ssh/id_dsa.pub hadoop@master:/home/hadoop/.ssh/s1_id_dsa.pub
scp ~/.ssh/id_dsa.pub hadoop@slave2:/home/hadoop/.ssh/s1_id_dsa.pub
#以下命令在master、slave2上执行
cat ~/.ssh/s1_id_dsa.pub >> ~/.ssh/authorized_keys
同理, 对于slave2来说,必须可以ssh master,ssh slave1
scp ~/.ssh/id_dsa.pub hadoop@master:/home/hadoop/.ssh/s2_id_dsa.pub
scp ~/.ssh/id_dsa.pub hadoop@slave1:/home/hadoop/.ssh/s2_id_dsa.pub
#以下命令在master、slave1上执行
cat ~/.ssh/s2_id_dsa.pub >> ~/.ssh/authorized_keys
检查确保集群中的所有节点都可以互相SSH无密码登录
Hadoop 添加环境变量
vi /etc/profile
export HADOOP_HOME=/opt/hadoop-3.3.0
export PATH=$HADOOP_HOME/bin:$PATH
source /etc/profile #环境生效
hadoop version #查看版本
修改hadoop 中的5个配置文件
更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
hadoop-env.sh
vi hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_171 #JAVA_HOME写上自己jdk 的安装路径
core-site.xml
vi core-site.xml
<!-- 指定Hadoop所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-1:9000</value>
</property>
<!-- 指定Hadoop运行是产生文件的存储目录。默认 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
hdfs-site.xml
vim hdfs-site.xml
<!-- 指定HDFS副本的数量,不修改默认为3个 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- dfs的SecondaryNameNode在哪台主机上 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定MapReduce运行是框架,这里指定在yarn上,默认是local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
vim yarn-site.xml
<!-- 指定yarn的老大ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<!-- NodeManager上运行的附属服务。需要配置成mapreduce_shuffle,才可以运行MapReduce程序默认值 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
slaves 文件,里面写上从节点所在的主机名字
该文件在hadoop 3.0后改为workers
vim workers
slave1
slave2
将 Master 上的 Hadoop 文件夹复制到各个节点上
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~/
scp ./hadoop.master.tar.gz root@slave1:/opt/hadoop #传输数据
# 解压(在slave1、slave2上执行)
tar -zxvf hadoop.master.tar.gz
配置好的环境变量也要远程发送给各个节点
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
然后试所有的计算机环境变量生效(在slave1、slave2上执行)
source /etc/profile
启动
首次启动需要在Master节点执行NameNode格式化:hdfs namenode -format
- 在启动集群之前需要关闭centos 的防火墙:
service iptables stop # 关闭防火墙服务
chkconfig iptables off # 禁止防火墙开机自启,就不用手动关闭了
- 在master节点上启动 hadoop
cd /usr/local/hadoop
sbin/start-all.sh
mr-jobhistory-daemon.sh start historyserver #启动jobhistoryserver来实现web查看作业的历史运行情况
另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report
查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。