1、虚拟机环境准备
1、准备三台CentOS虚拟机系统
参考:VirtualBox 之安装CentOS
2、设置主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=cnode1
3、关闭防火墙
# 查看防火墙状态
service iptables status
1) 永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
4、配置IP、主机名映射
1)首先配置第一台机器的hosts
,信息如下:
192.168.56.61 cnode1
192.168.56.62 cnode2
192.168.56.63 cnode3
2)将配置好的hosts
分发到其他机器。
sudo scp /etc/hosts root@<IP>:/etc/hosts
5、同步时间
# 查看时间
date
# 安装同步时间工具
yum install ntpdate
# 网络同步时间
ntpdate cn.pool.ntp.org
6、配置SSH免密登陆
# 生成ssh免登陆密钥(三个回车)
ssh-keygen -t rsa
执行完命令后,会生成私钥(id_rsa
)、公钥(id_rsa.pub
),放到当前用户根目录下的.ssh
文件夹中。
一般是需要在节点上执行启动脚本的机器上生成公私钥后,将公钥分发出去。
# 将公钥拷贝到要免密登陆的目标机器上
# 本机也要配置免密登陆
ssh-copy-id cnode1
ssh-copy-id cnode2
ssh-copy-id cnode3
参考:https://blog.youkuaiyun.com/const_/article/details/99290754
7、JDK环境安装
Hadoop使用Java开发的,所以必须安装JDK。
# 上传JDK安装包
jdk-8u191-linux-x64.tar.gz
# 解压安装包
tar -xvf jdk-8u191-linux-x64.tar.gz -C /opt/
# 如果JDK目录所属用户不是当前用户,可用下面的命令修改所属用户
chown root:root -R jdk1.8.0_191
# 配置环境变量
vi /etc/profile
# 在末尾行添加
export JAVA_HOME=实际的Java根目录
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$PATH:$JAVA_HOME/bin
# 刷新配置
source /etc/profile
java -version
将JDK包和配置好的环境变量分发到其他机器,因为其他机器的用户名和本机相同,所以这里分发命令中可以省略用户名。
scp -r /opt/jdk1.8.0_191/ cnode2:/opt/
scp -r /opt/jdk1.8.0_191/ cnode3:/opt/
scp -r /etc/profile cnode2:/etc/
scp -r /etc/profile cnode3:/etc/
然后分别在其他机器上执行刷新配置命令。
2、Hadoop2.x安装
1、Hadoop下载地址:
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.0/
2、上传Hadoop安装包
hadoop-2.7.0.tar.gz
3、解压安装包
tar -xvf hadoop-2.7.0.tar.gz -C /opt/
chown root:root -R hadoop-2.7.0/
这里设置Hadoop环境变量在下面的步骤中介绍。
3、Hadoop配置文件修改
集群部署角色分配如下:
node1 | node2 | node3 | |
---|---|---|---|
HDFS | NameNode | DateNode | DateNode |
YARN | ResourceManager、NodeManager | NodeManager、secondaryNameNode | NodeManager |
1、配置:hadoop-env.sh
Hadoop运行环境配置文件。
修改 hadoop-env.sh
,指定JAVA_HOME
路径。
vi hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_191
2、配置:core-site.xml
Hadoop核心配置文件。
在hadoop
根目录创建tmp
文件夹。mkdir -p tmp
vi core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cnode1:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录,默认:/tmp/hadoop-${user.name} -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.0/tmp</value>
</property>
3、配置:hdfs-site.xml
HDFS配置文件。
vi hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定Hadoop辅助NameNode主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cnode2:50090</value>
</property>
<!-- 禁用权限检查-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
4、配置:yarn-site.xml
vi yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cnode1</value>
</property>
5、配置:mapred-site.xml
将 mapred-site.xml.template
重新命名为 mapred-site.xml
。
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6、配置:slaves
${HADOOP_HOME}/etc/hadoop/slaves
vi slaves
cnode1
cnode2
cnode3
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
7、配置Hadoop环境变量
vi /etc/profile
# 文件末尾添加Hadoop路径
export HADOOP_HOME=/opt/hadoop-2.7.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 刷新配置
source /etc/profile
# 测试是否安装成功
hadoop version
8、将配置好的Hadoop和环境变量分发到其他机器
scp -r /opt/hadoop-2.7.0/ cnode2:/opt
scp -r /opt/hadoop-2.7.0/ cnode3:/opt
scp -r /etc/profile cnode2:/etc/
scp -r /etc/profile cnode3:/etc/
如果编写了集群分发文件脚本,使用如下命令进行分发文件。
xsync /opt/hadoop-2.7.0/
xsync /etc/profile/
分发环境变量配置后记得刷新配置。
如果编写了集群分发命令脚本,使用如下命令进行分发命令。
xcall source /etc/profile
集群分发脚本编写参考:
https://blog.youkuaiyun.com/const_/article/details/99221979
4、Hadoop集群启动
如果集群是第一次启动,需要格式化NameNode,并且在第一次格式化后,以后就不要再格式化了,不然集群会出错的。(本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的。)
如果必须要进行格式化,一定要先停止上次启动的所有namenode和datanode进程,然后再删除hadoop.tmp.dir
指定的目录和Hadoop根目录下logs
文件夹数据。
# 在主节点上格式化NameNode(第一次启动时格式化,以后就不要总格式化)
hdfs namenode -format
启动Hadoop集群,需要启动HDFS、YARN两个集群。
1、单节点逐个启动
# 在cnode1主节点上启动HDFS NameNode
sbin/hadoop-daemon.sh start namenode
# 在cnode2、cnode3从节点上分别启动HDFS DataNode
sbin/hadoop-daemon.sh start datanode
注意:启动YARN前必须保证NameNode和DataNode已经启动。
# 在cnode1主节点上启动YARN ResourceManager
sbin/yarn-daemon.sh start resourcemanager
# 在cnode2、cnode3从节点上启动YARN NodeManager
sbin/yarn-daemon.sh start nodemanager
Hadoop后台管理界面:
http://cnode1:50070
YARN资源调度管理界面:
http://cnode1:8088/
2、脚本一键启动
如果配置了etc/hadoop/slaves
和ssh
免密登陆,就可以使用程序脚本启动所有Hadoop两个集群的相关进程。
# 在cnode1主节点上执行。
# 启动HDFS集群
sbin/start-dfs.sh
# 启动YARN集群
sbin/start-yarn.sh
# 停止集群:
sbin/stop-dfs.sh
sbin/stop-yarn.sh
注意:NameNode
和ResourceManger
如果不是同一台机器,不能在NameNode
上启动 YARN
,应该在ResouceManager
所在的机器上启动YARN
。
3、查看启动后的相关进程
Web端查看SecondaryNameNode:
http://cnode2:50090/status.html