1.虚拟机环境准备
- 三台虚拟机(静态IP, 关闭防火墙 , 修改主机名 , 配置免密登录 , 集群时间同步)
- Hadoop下载地址
https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/
2.集群规划
| 框架 | 192.168.31.155(hadoop001) | 192.168.31.23(hadoop003) | 192.168.31.24(hadoop003) | | —- | —- | —- | —- | | HDFS | NameNode , DataNode,JobHistoryServer | DataNode | SeconddaryNameNode, DataNode | | YARN | NodeManager | NodeManager | NodeManager , ResourceManger |
3.安装hadoop
登录192.168.31.155节点, 进入/opt目录 , 解压安装文件/opt
$ tar -zxvf hadoop-2.9.2.tar.gz - C /opt
查看是否解压成功
$ ll /opt/hadoop-2.9.2
添加Hadoop到环境变量vim /etc/profile
## HADOOP_HOME
export JAVA_HOME=/opt/jdk1.8.0_221
export HADOOP_HOME=/opt/hadoop-2.9.2
export JAVA_PATH=$JAVA_HOME/bin
export PATH=$JAVA_HOME:$JAVA_PATH:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
让环境变量生效
$ source /etc/profile
验证hadoop
$ hadoop version
校验结果
- hadoop 目录
bin目录: 堆hadoop进行操作的相关命令 , 如hadoop , hdfs等等
etc目录: hadoop的配置文件目录 , 如hdfs-site.xml , core-site.xml等等
lib目录: hadoop本地库(解压缩的依赖)
sbin目录: 存放的是hadoop集群启动停止相关脚本 , 命令
share目录: Hadoop的一些jar , 官方案例jar, 文档等
1.集群配置
注意: 所有的服务器都要使用hostname进行指定 , 否则会影响后面DataNode的注册
Hadoop集群配置 = HDFS集群配置 + MapReduce集群配置 + Yarn集群配置
- HDFS集群配置
- 将JDK路径给HDFS(hadoop-env.sh)
- 指定NameNode节点以及数据存储目录(修改core-site.xml)
- 指定SecondaryNameNode节点, (修改hdfs-site.xml)
- 指定DataNode从节点 (修改/etc/hadoop/slaves文件,每个节点配置信息独占一行)
- MapReduce集群配置
- 将JDK路径明确配置给MapReduce(修改mapred-env.sh)
- 指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)
- Yarn集群配置
- 将JDK路径明确配置给Yarn(修改yarn-env.sh)
- 指定ResourceManager老大节点所在你计算机节点(修改yarn-site.xml)
- 指定NodeManager节点(会通过slaves文件内容确定)
1.HDFS集群配置(hadoop001)
cd /opt/hadoop-2.9.2/etc/hadoop
- 配置: hadoop-env.sh
将JDK路径明确配置给HDFS
$ vim /hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_221
- 指定NameNode节点以及数据存储目录(修改core-site.xml)
```xml$ vim core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.9.2/data/tmp</value>
</property>
core-site.xml的默认配置
```xml
https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml
- 指定secondarynamenode节点(修改hdfs-site.xml)
```xml$ vim hdfs-site.xml
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop003:50090</value>
</property>
<!--副本数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
官方默认配置
```shell
https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
- 指定datanode从节点(修改slaves, 每个节点配置信息占一行)
$ vim slaves
hadoop001
hadoop002
hadoop003
注意: 该文件中添加的内容结尾不允许有空格 , 文件中不允许有空行
2.MapReduce集群配置(hadoop001)
指定MapReduce使用的JDK路径(修改mapred-env.sh)
$ vim mapred-env.sh
export JAVA_HOME=/opt/jdk1.8.0_221
指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)
$ mv mapred-site.template.xml mapred-site.xml
$ vim mapred-site.xml
```xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
mapred-site.xml默认配置
```shell
https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
3.集群配置(hadoop001)
指定JDK路径(修改yarn-env.sh)
$ vim yarn-env.sh
export JAVA_HOME=/opt/jdk1.8.0_221
指定ResourceManager的master节点信息(修改yarn-site.xml)
$ vim yarn-site.xml
<!--指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop003</value>
</property>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
yarn-site.xml的默认配置
https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
注意:
Hadoop安装目录所属用户和所属用户组信息 , 默认是501 dialout, 而我们操作hadoop集群的用户使用的是虚拟机的root用户,
为了避免出现信息混乱 , 修改安装目录所属用户和用户组
2.分发配置
编写集群分发脚本rsync-script
- rsync远程同步工具
rsync主要用于备份和镜像 , 具有速度快 , 避免复制相同内容和支持符号链接的优点.
rsync和scp区域 , 用rsync做文件的复制要比scp的速度要快 , rsync只对差异文件做更新 , scp是把所有文件都复制过去
基本语法
$ rsync -rvl $pdir/$fname $user@host:$pdir/$fname
# 命令 选项参数 要拷贝文件路径/名称 目的用户@主机:目的路径/名称
选项参数 | 选项 | 功能 | | —- | —- | | -r | 递归 | | -v | 显示复制过程 | | -l | 拷贝符号链接 |
- rsync案例
三台虚拟机安装rsync(执行安装需要保证机器联网)
$ yum install -y rsync
把hadoop001机器上的/opt下的软件同步到hadoop002服务器的root用户下的/opt
$ rsync -rvl /opt root@hadoop002:/opt
- 集群分发脚本编写
paramnum=$# if((paramnum==0)); then echo no params; exit; fi
2 根据传入的参数获取文件名称
p1=$1
file_name=basename $p1
echo fnmae=$file_name
3 获取输入参数的绝对路径
pdir=cd -P $(dirname $p1); pwd
echo pdir=$pidr
4.获取用户名称
user=whoami
5.开始分发数据
echo “————————————————linux@24” rsync -rvl $pdir/$file_name $user@192.168.31.24:$pdir echo “————————————————linux@23” rsync -rvl $pdir/$file_name $user@192.168.31.23:$pdir
2. 赋予脚本权限(hadoop001)
```shell
$ chmod 777 rsync-script
调用脚本形式: rsync-script文件名称
$ rsync-script /home/root/bin
调用脚本分发Hadoop安装目录到其他节点
$ rsync-script /opt/hadoop-2.9.2
4.启动集群
注意: 如果集群是第一次启动, 需要在NameNode所在节点格式化NameNode, 非第一次不用执行格式化NameNode操作
1.单节点启动(hadoop001)
$ hadoop namenode -format
格式化命令执行效果:
格式化后创建的文件:/opt/hadoop-2.9.2/data/tmp/dfs/name/current/在hadoop001上启动NameNode
$ hadoop-daemon.sh start namenode
$ jps
# jps之后会有NameNode进程在运行
在hadoop001/hadoop002/hadoop003上分别启动DataNode
$ hadoop-daemon.sh start datanode
$ jps
# jps之后 , hadoop001上面有NameNode/DataNode两个节点
# hadoop002上面DataNode一个节点
# hadoop003上面DataNode一个节点
web端查看Hdfs界面
http://192.168.31.155:50070/dfshealth.html#tab-overview
在自己本地hosts配置
hadoop001 192.168.31.155
hadoop002 192.168.31.24
hadoop003 192.168.31.23
查看HDFS集群正常节点Yarn集群单节点启动 ```shell [hadoop003]$ yarn-daemon.sh start resourcemanager [hadoop003]$ jps
就会出现DataNode ResourceManager
[hadoop002]$ yarn-daemon.sh start nodemanager [hadoop002]$ jps
就会出现DataNode && NodeManager
[hadoop001]$ yarn-daemon.sh start nodemanager
就会出现NameNode DataNode NodeManager
<a name="jEACG"></a>
## 2.集群启动
1. 如果已经单节点方式启动了Hadoop, 可以先停止之前的启动的NameNode和DataNode进程, 如果之前NameNode没有执行格式化, 这里就需要执行格式化操作
```shell
[hadoop001]$ hadoop namenode -format
[hadoop002]$ jps
DataNode
[hadoop003]$ jps
DataNode SecondaryNameNode
3. 启动YARN
```shell
[hadoop003]$ start-yarn.sh
注意: NameNode和ResourceManager不是在同一台机器, 不能再NameNode上启动YARN, 应该在ResourceManager所在的机器上启动YARN.
3.Hadoop集群启动停止命令总汇
- 各个服务组件逐一启动/停止
- 分别启动/停止HDFS组件 ```shell $ hadoop-daemon.sh start/stop [namenode/datanode/secondarynamenode]
2. 启动/停止YARN
```shell
$ yarn-daemon.sh start/stop [resourcemanager/nodemanager]
各个模块分开启动/停止(配置ssh的前提)常用
HDFS分布式存储
从linux本地文件系统上传下载文件验证HDFS集群工作正常
[hadoop001]$ hdfs dfs -mkdir /test/input # 在HDFS上面创建一个路径
[hadoop001]$ mkdir /opt/hadoop-2.9.2/workspace #在linux上面创建一个目录
[hadoop001]$ cd /opt/hadoop-2.9.2/workspace
[hadoop001]$ vim test.txt # 写入hello world
# 将本地文件上传到HDFS服务上
[hadoop001]$ hdfs dfs -put /opt/hadoop-2.9.2/workspace/test.txt /test/input
# 将HDFS下载文件到本地
[hadoop001]$ hdfs dfs -get /test/input/test.txt
- MapReduce分布式计算
在HDFS文件系统根目录下面创建一个wcinput文件夹
[hadoop001]$ hdfs dfs -mkdir /wcinput
在/opt/hadoop-2.9.2/workspace 目录下面创建一个wc.txt文件(本地文件系统)
[hadoop001]$ cd /opt/hadoop-2.9.2/workspace
[hadoop001]$ vim wc.txt
写入内容
A B C D E F E
A F R E S F G
保存退出
:wq
上传wc.txt到hdfs目录下 / wcinput下面
[hadoop001]$ hdfs dfs -put wc.txt /wcinput
执行程序
[hadoop001]$ cd /opt/hadoop-2.9.2
[hadoop001]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput
查看结果
[hadoop001]$ hdfs dfs -cat /wcoutput/part-r-00000
6.配置历史服务器
1.配置日志服务
在yarn中运行的任务产生的日志数据不能查看 , 为了查看程序的实例运行情况 , 需要配置一下历史日志服务器
- 配置mapred-site.xml ```shell [hadoop001]$ cd /opt/hadoop-2.9.2/etc/hadoop [hadoop001]$ vim mapred-site.xml
该文件加入如下的配置
```xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop001:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop001:19888</value>
</property>
分发到其他节点
[hadoop001]$ rysnc-script mapred-site.xml
启动历史服务器
[hadoop001]$ mr-jobhistory-daemon.sh start historyserver
查看历史服务器是否启动
[hadoop001]$ jps
查看JobHistory
http://hadoop001:19888/jobhistory
2.配置日志的聚集
日志聚集: 应用(JOB)运行完成以后 , 将应用运行的日志信息从各个task汇总上传到HDFS系统上.
日志聚集功能好处 : 可以方面的查看程序运行详情, 方面开发调试.
注意 , 开启日志聚集功能 , 需要重新NodeManager, ResourceManager和HistoryManager.
开启日志聚集功能步骤如下:配置yarn-site.xml
[hadoop001]$ vim yarn-site.xml
```xml
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop002:19888/jobhistory/logs</value>
</property>
2. 分发yarn-site.xml到集群其他节点
```shell
[hadoop001]$ rsync-script yarn-site.xml
- 关闭NodeManager, ResourceManager , HistoryManager ```shell [hadoop001]$ yarn-daemon.sh stop nodemanager [hadoop001]$ mr-jobhistory-daemon.sh stop historyserver
[hadoop002]$ yarn-daemon.sh stop nodemanager
[hadoop003]$ yarn-daemon.sh stop nodemanager [hadoop003]$ yarn-daemon.sh stop resourcemanager
4. 启动NodeManager , ResourceManager , HistoryManager
```shell
[hadoop001]$ yarn-daemon.sh stop nodemanager
[hadoop001]$ mr-jobhistory-daemon.sh stop historyserver
[hadoop002]$ yarn-daemon.sh stop nodemanager
[hadoop003]$ yarn-daemon.sh stop nodemanager
[hadoop003]$ yarn-daemon.sh stop resourcemanager
删除HDFS上已经存在的输出文件
[hadoop001]$ hdfs dfs -rm -R /wcoutput
执行WordCount程序
[hadoop001]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput
hadoop001 | hadoop002 | hadoop003 |
---|---|---|
start-dfs.sh/stop-dfs.sh |
mr-jobhistory-daemon.sh stop|start historyserver | | yarn-daemon.sh stop|start resourcemanager
start-yarn.sh/stop-yarn.sh |