Hadoop 集群配置
安装Hadoop
1. 安装 Hadoop
-
版本信息
安装Hadoop版本信息为 Apache Hadoop 原始版本,版本号为:2.9.2
链接:https://pan.baidu.com/s/1mSYVBWEQsZRX-npBOA2cXw
提取码: ceck -
上传文件
文件上传到主机1( linux121)中,路径信息为:/opt/lagou/software/
修改文件权限:
chmod 755 hadoop-2.9.2.tar.gz
修改完成后文件如下图所示:
-
安装 Hadoop
进行解压,并设置解压路径为 :
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/lagou/servers
查看是否解压成功
ll /opt/lagou/servers/hadoop-2.9.2
-
修改目录用户和用户组
Hadoop安装目录所属用户和所属用户组信息,默认是501 dialout,而我们操作Hadoop集群的用户使
用的是虚拟机的root用户,为了避免出现信息错乱,修改Hadoop安装目录所属用户和用户组chown -R root:root /opt/lagou/servers/hadoop-2.9.2
修改后的结果参照上图
-
Hadoop 目录说明
2. 添加环境变量
-
添加环境变量
vim /etc/profile
-
添加内容:
# HADOOP_HOME export HADOOP_HOME=/opt/lagou/servers/hadoop-2.9.2 # Hadoop安装目录 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
-
刷新,使环境变量生效
source /etc/profile
-
验证
hadoop version
集群规划
框架 | 主机1 (linux121) | 主机2 (linux122) | 主机3 (linux123) |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
Yarn | NodeManager | NodeManager | NodeManager、ResourceManager |
需要配置的内容
Hadoop集群配置 = HDFS集群配置 + MapReduce配置 + Yarn配置
- HDFS 集群配置
1. 将 JDK 路径明确配置给 HDFS,修改文件为: hadoop-env.sh
2. 指定 namenode 节点以及数据存储目录,修改文件为: core-site.xml
3. 指定 secondarynamenode 节点,修改文件为:hdfs-site.xml
4. 指定 datanode 从节点,每个节点配置信息占一行,修改文件为:etc/hadoop/slaves - MapReduce 集群配置
1. 将 jdk 路径明确配置给 MapReduce,修改文件为:**mapred-env.sh **
2. 指定 MapReduce 计算框架运行 Yarn 资源调度框架,修改文件为:mapred-site.xml - Yarn 集群配置
1. 将JDK路径明确配置给Yarn,修改文件为:yarn-env.sh
2. 指定 ResourceManager 老大节点所在计算机节点,修改文件为:yarn-site.xml
3. 指定 NodeManager 节点,通过 slaves 文件内容确定 - 配置历史服务器
- 设置历史服务器节点,修改文件为: mapred-site.xml
- 配置日志聚集,修改文件为:**yarn-site.xml **
- 涉及到的文件及目录(部分)
配置集群
1. HDFS 集群配置
切换目录为: cd /opt/lagou/servers/hadoop-2.9.2/etc/hadoop
-
修改 hadoop-env.sh 文件,将jdk明确配置给 HDFS
vim hadoop-env.sh # 修改或者添加的内容为 export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
-
指定 namenode 节点以及数据存储目录
vim core-site.xml # 要添加的内容为: <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://linux121:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/lagou/servers/hadoop-2.9.2/data/tmp</value> </property>
-
指定secondarynamenode节点
vim hdfs-site.xml # 要添加的内容 <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>linux123:50090</value> </property> <!--副本数量 --> <property> <name>dfs.replication</name> <value>3</value> </property>
-
指定datanode从节点
vim slaves # 添加的内容为 linux121 linux122 linux123
!!! 该文件中添加的内容结尾不允许有空格,文件中不允许有空行
2. MapReduce集群配置
-
指定MapReduce使用的jdk路径
vim mapred-env.sh # 要添加或者修改的内容 export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
-
指定MapReduce计算框架运行Yarn资源调度框架
# 修改文件名,去掉 template 后缀 mv mapred-site.xml.template mapred-site.xml vim mapred-site.xml # 添加的内容 <!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
3. Yarn集群配置
-
指定JDK路径
vim yarn-env.sh # 添加的内容 export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
-
指定ResourceMnager的master节点信息
vim yarn-site.xml # 添加的内容 <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>linux123</value> </property> <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
-
指定 nodemanager 节点
配置 HDFS 时已经设置过,无需再修改。要设置的文件为: slaves
4. 配置历史服务器
-
设置历史服务器节点
vim mapred-site.xml # 添加的内容 <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>linux121:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>linux121:19888</value> </property>
-
配置日志聚集
vim yarn-site.xml # 添加的内容 <!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置7天 (按需求进行设置)--> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <property> <name>yarn.log.server.url</name> <value>http://linux121:19888/jobhistory/logs</value> </property>
第一台主机的全部配置已完成,剩余主机的配置一样的设置。接下来使用 rsync 进行文件分发,将Hadoop 内容分发给剩余主机。
分发配置
rsync 工具
-
rsync 远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
-
基本语法
# 基本语法 rsync -rvl $pdir/$fname $user@$host:$pdir/$fname # 说明 命令 选项参数 要拷贝文件路径/名称 目的用户名@主机地址:目的路径/名称
-
选项参数说明
选项 功能 -r 递归 -v 显示复制过程 -l 拷贝符号连接
-
-
安装 rsync
yum install -y rsync
-
编写分发脚本
在 /usr/lcoal/bin 目录下创建文件: rsync-script,并修改文件权限
cd /usr/lcoal/bin touch rsync-script chmod 777 rsync-script
创建好的文件如下图所示:
添加内容:
vim rsync-script # 添加的脚本内容 #!/bin/bash #1 获取命令输入参数的个数,如果个数为0,直接退出命令 paramnum=$# if((paramnum==0)); then echo no params; exit; fi #2 根据传入参数获取文件名称 p1=$1 file_name=`basename $p1` echo fname=$file_name #3 获取输入参数的绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 获取用户名称 user=`whoami` #5 循环执行rsync for((host=121; host<124; host++)); do echo ------------------- linux$host -------------- rsync -rvl $pdir/$file_name $user@linux$host:$pdir done
-
测试脚本功能
# 将该脚本分发到其它两台主机上 rsync-script rsync-script
-
切换主机查看文件是否拷贝完成
分发配置
-
调用脚本分发Hadoop安装目录到其它节点
rsync-script /opt/lagou/servers/hadoop-2.9.2
-
分发完成后进行按照 环境配置 分别为其余主机添加Hadoop环境变量
-
分发完成后进行验证
集群启动
-
非第一次不可以执行格式化
-
第一次启动前在 namenode 节点进行格式化 namenode
格式化命令
hadoop namenode -format
格式化后创建的文件目录:
cd /opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current
单节点启动
-
在主机1上启动 namenode
启动并查看进程
# 启动 hadoop-daemon.sh start datanode # 查看 jps
-
在三台主机上分别启动 datanode
# 启动datanode hadoop-daemon.sh start datanode # 查看当前进程 jps
-
web端查看 hdfs 界面
url :
http://linux121:50070/dfshealth.html#tab-overview
图中圈出来的是集群正常节点
-
启动 yarn
- 启动 resourcemanager
# 启动yarn 需要在yarn节点上执行命令 yarn-daemon.sh start resourcemanager # 查看当前进程 jps
-
启动 nodemanager
# 分别在三台主机上执行 yarn-daemon.sh start nodemanager # 查看 jps
查看三台主机中是否启动了 nodemanager
- 启动 resourcemanager
至此,完成单节点启动的方式全部完成。接下来尝试群起的方式
群启
关闭相关进程
-
如果已经单节点方式启动了Hadoop,可以先停止之前的启动的Namenode与Datanode进程,
-
如果之前Namenode没有执行格式化,这里需要执行格式化!!!
-
关闭命令
# 关闭 resourcemanager yarn-daemon.sh stop resourcemanager # 关闭 nodemanager yarn-daemon.sh stop nodemanager # 关闭 datanode hadoop-daemon.sh stop datanode # 关闭 namenode hadoop-daemon.sh stop namenode
全部关闭后查看进程,发现只有 jps 一个进程
群启启动
-
启动 hdfs
在主机1中执行命令 :
start-dfs.sh
可以看到在三台主机的 datanode 都已经启动
-
启动 yarn
NameNode和ResourceManger不是在同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN
在主机3中执行命令:
start-yarn.sh
可以看到三台主机中的 nodemanager 已经启动
-
在三台主机中分别查看进程进行验证
Hadoop启动、停止命令汇总
单个服务组件逐一启动、停止
-
HDFS 命令
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
-
Yarn 命令
yarn-daemon.sh start / stop resourcemanager / nodemanager
各个模块分开启动【群启】、停止
-
HDFS 命令
start-dfs.sh / stop-dfs.sh
-
Yarn 命令
start-yarn.sh / stop-yarn.sh
集群测试
体验 HDFS 存储
# 从 hdfs 上创建存储目录
hdfs dfs -mkdir -p /test/input
# 创建测试用的目录,存放测试文件
mkdir -p /usr/mkdir/testDirs
# 创建文件,并添加内容 hello Hadoop hdfs
vim hello.txt
# 上传Linux文件到hdfs中
hdfs dfs -put /usr/mkdir/testDirs/hello.txt /test/input
通过web查看存储的文件
删除本地文件,从hdfs下载文件到本地
# 删除文件
rm -f hello.txt
# 下载文件
hdfs dfs -get /test/input/hello.txt
体验 mapreduce 计算
-
在 hdfs 中创建一个 wcinput 目录文件
hdfs dfs -mkdir /wcinput
-
在本地目中创建文件 wc.txt,并添加内容
vim wc.txt # 添加内容 hadoop mapreduce yarn hdfs hadoop mapreduce mapreduce yarn lagou lagou lagou
-
上传 wc.txt 文件到 hdfs /input目录中
hdfs dfs -put wc.txt /wcinput
-
切换目录到 Hadoop 官方案例目录
cd /opt/lagou/servers/hadoop-2.9.2/share/hadoop/mapreduce/
执行命令
hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput
查看结果 hdfs dfs -cat /wcoutput/part-r-00000
查看日志
URL http://linux121:19888/jobhistory
如果不能进入,查看一下 ucloud 外网防火墙,添加对应的端口信息