目录
- 一、节点部署角色目录
- 二、下载软件
- 三、基础设施
- 1、安装必要插件
- 2、设置IP及主机名
- 3、时间同步
- 4、jdk安装
- 5、ssh免密登录
- 四、Hadoop部署
- 1、目录及环境变量准备
- 2、安装
- 3、修改配置文件
- 4、分发文件
- 5、启动hadoop集群
- 6、集群部署验证
一、节点部署角色目录
节点 | ip | NN | SNN | DN | RM | NM | HS |
---|---|---|---|---|---|---|---|
node1 | 192.168.88.11 | √ | √ | ||||
node2 | 192.168.88.12 | √ | √ | √ | √ | ||
node3 | 192.168.88.13 | √ | √ | ||||
node4 | 192.168.88.14 | √ | √ |
HDFS | YARN | MapReduce |
---|---|---|
NameNode(NN) | ResourceManager(RM) | HistoryServer(HS) |
SecondNameNode (SNN) | NodeManager(NM) | |
DataNode (DN) |
二、下载软件
三、基础设施
全部节点执行
1、安装必要插件
安装第三方epel源
yum install -y epel-release
yum install -y net-tools vim
2、设置IP及主机名
配置静态ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改为如下配置(node1主机配置其他主机类推)
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #这里需要修改为静态
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=12c71633-86c5-4225-8089-f28f2a26e373
DEVICE=ens33
ONBOOT=yes #这里需要修改为yes
# 添加以下配置
IPADDR=192.168.88.11 #自行定义
NETMASK=255.255.255.0
GATEWAY=192.168.88.2 #自行定义
DNS1=223.5.5.5
DNS2=114.114.114.114
其中IPADDR和GATEWAY要修改为自己的网路配置参考:编辑->虚拟网络编辑器->NAT模式的网络->NAT设置 可以点击更改设置改成和我一致的
重启网络
systemctl restart network
设置主机名(node1主机执行其他主机类推)
hostnamectl --static set-hostname node1
设置hostname映射
vim /etc/hosts
添加如下映射
192.168.88.11 node1
192.168.88.12 node2
192.168.88.13 node3
192.168.88.14 node4
关闭防火墙
# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动
systemctl disable firewalld
3、时间同步
centos7最小版镜像自带chrony
vim /etc/chrony.conf
修改为阿里和腾讯的ntp服务
server ntp1.aliyun.com iburst prefer
server time1.cloud.tencent.com iburst
重启chronyd服务
systemctl restart chronyd
# 开机自启动
systemctl enable chronyd
查看状态如下即可
systemctl status chronyd
4、jdk安装
推荐使用rpm方式
上传下载的 jdk-8u381-linux-x64.rpm文件并执行以下命令(会安装在/usr/java目录下)
rpm -i jdk-8u381-linux-x64.rpm
执行完后配置环境变量
vim /etc/profile
在最下方添加
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
重新加载配置
source /etc/profile
5、ssh免密登录
新增hadoop用户
useradd hadoop
passwd hadoop
切换到hadoop用户
su hadoop
先输入密码自己登录下自己生成.ssh目录
ssh localhost
生成秘钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
分发密钥(node1执行)
#后面是想要免密登录的节点主机名
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
ssh-copy-id node4
测试node1登录各个节点是否免密例如登录node2
ssh node2
四、Hadoop部署
1、目录及环境变量准备
所有节点执行(root)
新建bigdata目录
mkdir /opt/bigdata
给hadoop用户赋权
chown -R hadoop:hadoop /opt/bigdata
配置环境变量
vim /etc/profile
在最下方添加
export HADOOP_HOME=/opt/bigdata/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重新加载配置
source /etc/profile
2、安装
node1节点执行(先在node1上安装和配置后面分发到各个节点)
切换到hadoop用户
su hadoop
上传hadoop压缩包并解压到/opt/bigdata目录
tar -zxvf hadoop-3.3.6.tar.gz -C /opt/bigdata
3、修改配置文件
node1节点执行
跳转到hadoop配置文件目录
cd /opt/bigdata/hadoop-3.3.6/etc/hadoop/
- hadoop-env.sh
第54行去掉注释并添加java_home路径
export JAVA_HOME=/usr/java/default
- core-site.xml
<configuration>
<!-- NameNode地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- hadoop数据存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/bigdata/hadoop-3.3.6/data</value>
</property>
<!-- HDFS网页登录使用的静态用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<!-- SecondNameNode web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
</configuration>
- workers
DataNode节点主机名列表
node2
node3
node4
- mapred-site.xml
<configuration>
<!-- 执行MapReduce的方式:yarn/local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node2:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node2:19888</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node2:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
4、分发文件
node1节点执行
把/opt/bigdata/的目录及文件分发到node2、3、4节点
scp -r /opt/bigdata/ node2:/opt/
scp -r /opt/bigdata/ node3:/opt/
scp -r /opt/bigdata/ node4:/opt/
5、启动hadoop集群
格式化NameNode
hdfs namenode -format
格式化NameNode会产生新的集群id,导致DataNode中记录的的集群id和刚生成的NameNode的集群id不 一致,DataNode找不到NameNode。所以,格式化NameNode时,一定要先删除每个节点的data目录和logs日志,然后再格式化NameNode,一般只在搭建初期执行这一次。
在node1执行
启动hadoop集群
# 启动集群
start-all.sh
# 停止集群
stop-all.sh
或者HDFS和YARN单独启动
# 启动
start-dfs.sh
start-yarn.sh
# 停止
stop-dfs.sh
stop-yarn.sh
启动历史服务(node2节点)
mapred --daemon start historyserver
6、集群部署验证
- 每个节点执行jps命令验证hdfs集群启动的角色是否正确
node1 NN、RM
node2 SNN、DN、NM、HS
node3 DN、NM
node4 DN、NM
- 访问NN的webUI地址 http://192.168.88.11:9870
- 访问YARN的webUI 地址:http://192.168.88.11:8088
-
测试HDFS上传文件
# 创建hadoop目录
hdfs dfs -mkdir /hadoop
# 上传文件到hadoop目录
hdfs dfs -put ~/hadoop-3.3.6.tar.gz /hadoop
- 测试MR任务
自己编写一个word.txt文档上传到HDFS的/hadoop/input目录下
# 新建input目录
hdfs dfs -mkdir /hadoop/input
# 上传文件
hdfs dfs -put ~/word.txt /hadoop/input
使用Hadoop自带的脚本测试wordcount
hadoop jar /opt/bigdata/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /hadoop/input /hadoop/output
查看计算结果
hdfs dfs -cat /hadoop/output/part-r-00000