本文通过12个步骤实现Hadoop集群的完全分布式搭建
如有错误请指出
文章目录
1. 服务器准备
VMware Workstation Pro 15.5
三台 Centos 6.5 64bit
Apache Hadoop 2.6.0
3节点为例搭建,角色分配:
节点 | 角色分配 |
---|---|
node-01 | NameNode DataNode ResourceManager |
node-02 | DataNode NodeManager SecondaryNameNode |
node-03 | DataNode NodeManager |
2. 网络环境准备
采用NAT方式联网,并设置静态ip
vim /etc/sysconfig/network-scripts/ifcfg-eth0
# 修改这两个值
ONBOOT=yes
BOOTPROTO=static
# 添加三个值
# IP地址
IPADDR=192.168.56.139
# 网关
GATEWAY=192.168.56.2
# 子网掩码,默认255.255.255.0
NETMASK=255.255.255.0
3. 服务器系统设置
-
创建一个一般用户(可选)
# 创建一个一般用户 useradd linux123 passwd linux123 # 并把这个用户加到sudoers vim /etc/sudoers slave ALL=(ALL) NOPASSWD:ALL # 创建供这个用户操作的文件夹,并更改所有权 mkdir /opt/software /opt/module chown linux123:linux123 /opt/software /opt/module
-
同步时间
-
手动同步集群各机器时间
data -s "2020-02-12 02:02:02"
-
网络同步时间
ntpdate ntp1.aliyun.com
-
-
设置主机名
注意:主机名不能有下划线!!!
vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=node-01 # 配置完成reboot后生效
-
配置IP、主机名映射
vim /etc/hosts 192.168.56.128 node-01 192.168.56.129 node-02 192.168.56.130 node-03
-
配置ssh免密登录
# 生成ssh免密登录密钥 ssh-keygen -t rsa (四个回车) # 执行完后生成:id_rsa(私钥)、id_rsa.pub(公钥) # 将公钥拷贝到要免密登录的目标机器上(包括本机) ssh-copy-id node-01
-
配置防火墙
# 查看防火墙状态 service iptables status # 关闭防火墙 service iptables stop # 查看防火墙开机自启状态 chkconfig --list iptables # 关闭防火墙开机自启 chkconfig iptables off
4. JDK环境安装
-
首先检查机器是否自带java相关包
rpm -qa | grep java # java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 # tzdata-java-2013g-1.el6.noarch # java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 # 出现类似以上三条全部卸载即可: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 rpm -e --nodeps tzdata-java-2013g-1.el6.noarch rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 # 或 rpm -qa | grep java | xargs rpm -e --nodeps
-
安装JDK8
# 上传安装包后:以jdk-8u241-linux-x64.tar.gz为例 # 解压安装包 tar zxvf jdk-8u241-linux-x64.tar.gz -C /root/apps # 配置环境变量 vim /etc/profile export JAVA_HOME=/root/apps/jdk1.8.0_241 export PATH=$PATH:$JAVA_HOME/bin # 刷新配置 source /etc/profile
5. Hadoop安装
# 上传安装包后:以hadoop-2.6.0.tar.gz为例
# 解压安装包
tar zxvf hadoop-2.6.0.tar.gz
6. Hadoop文件配置:
一般在主节点进行修改,完毕后scp下发给其他各个从节点机器
配置文件在 hadoop/etc/hadoop下
-
hadoop-env.sh(hadoop运行环境相关脚本)
# 配置JAVA_HOME export JAVA_HOME=jdk路径
-
core-site.xml(hadoop核心配置)
<configuration> <!-- 指定hadoop所使用的文件系统的地址(HDFS中NameNode的地址),默认是linux文件系统--> <property> <name>fs.defaultFS</name> <!-- 文件系统://主机名:端口号 --> <value>hdfs://node-01:9000</value> </property> <!-- 指定hadoop运行时所产生文件的存储目录,默认/tmp/hadoop-${user-name} --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.6.0/tmp</value> </property> </configuration>
-
hdfs-site.xml(分布式文件系统HDFS相关配置)
<configuration> <!-- 指定2nn的位置 --> <property> <name>dfs.namenode.secondary.http-address</name> <!-- 主机名:端口号 --> <value>node-02:50090</value> </property> <!-- 指定HDFS的副本数量,默认:3 --> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
-
mapred-site.xml(MapReduce相关配置)
# 文件夹中只有mapred-site.xml.template模板文件,需要复制一份使用 mv mapred-site.xml.template mapred-site.xml
<configuration> <!-- 指定mr运行时框架,指定为yarn,默认为local(使用本地模式模拟分布式计算环境) --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 配置历史服务器 --> <property> <name>mapreduce.jobhistory.address</name> <value>node-01:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node-01:19888</value> </property> </configuration>
-
yarn-site.xml(Yarn相关配置)
<configuration> <!-- 指定Yarn中ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>node-01</value> </property> <!-- NodeManager上运行的附属服务 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <!-- 604800为秒数 --> <value>604800</value> </property> </configuration>
-
slaves文件(里面写从节点所在的主机名,会在这些主机上启动DataNode)
node-01 node-02 node-03
-
关于配置文件
- 在Hadoop官方文档中有几个默认的配置文件:
***-default.xml:这里面是hadoop的默认配置选项,如果用户没有更改,这里面的配置将生效
- 上面手动修改的是:
***-site.xml:这里面是用户需要自定义的配置选项
7. 将Hadoop添加到环境变量
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-2.6.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
8. 使用scp将配置文件发送给其他节点机器
# hadoop安装包
# scp -r 文件 用户名@主机名:目录
scp -r /export/server/hadoop-2.6.0 root@node-02:/export/server/
# 环境变量
scp -r /etc/profile root@node-02:/etc/ # 并再其他机器上source /etc/profile
9. 格式化NameNode
hdfs namenode -format
# 或 hadoop namenode -format
10. 启动
-
单个节点逐个启动(脚本位于$HADOOP_HOME/sbin目录下)
### 如果想要停止某个节点上某个角色,只需要把命令中的start改为stop即可 # 在主节点上启动HDFS NameNode: hadoop-daemon.sh start namenode # 在每个从节点上启动HDFS DataNode: hadoop-daemon.sh start datanode # 在主节点上启动YARN ResourceManager: yarn-daemon.sh start resourcemanager # 在每个从节点上启动YARN NodeManager yarn-daemon.sh start nodemanager
-
脚本一键启动
前提:需要配置slaves文件和ssh免密登录
### 停止改为stop即可 # 启动HDFS: $HADOOP_HOME/sbin/start-dfs.sh # 启动YARN: $HADOOP_HOME/sbin/start-yarn.sh
-
启动历史服务器
### 停止改为stop即可 mr-jobhistory-daemon.sh start historyserver
11. 查看集群UI
NameNode:
http://NN_host:port/ port默认50070
ResourceManager:
http://RM_host:port/ port默认8088
12. 运行MapReduce程序
在 $HADOOP_HOME/share/hadoop/mapreduce下有官方自带的MapReduce程序,可以通过如下命令进行运行测试
# 1.计算圆周率
hadoop jar hadoop-mapreduce-example-2.6.0.jar pi 20 50
# 2.计算单词数
hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount /hello/input /hello/output
# 创建文件夹
hdfs dfs -mkdir /hello