Hadoop系列之完全分布式环境搭建及测试验证

前置条件:

  1. 已制作好CentOS 虚拟机模板。
  2. 该模板安装好Oracle JDK,且 JAVA_HOME 值为/usr/java/jdk1.8.0_171-amd64/jre。

CentOS 模板安装可参博客: https://blog.csdn.net/gobitan/article/details/80993354

 

准备三台虚拟机

  1. 搭建完全 Hadoop 分布式最少需要三台服务器,假设三台服务器的 IP 地址如下:

 192.168.159.194 hadoop01

192.168.159.195 hadoop02

192.168.159.196 hadoop03

 

  1. 配置要求:建议每台虚拟机的配置最低为 2 核 4G,如果内存确实有限,可以将 hadoop02 和 hadoop03 的内存降为 2G,但 hadoop01 的内存不能低于 4G,因为根据后面的安排,

hadoop01 作为主节点,上面部署的服务较多。

 

概述

完全分布式包含多个节点,按功能可划分为:

  1. 主节点(master):如 NameNode 和ResourceManager
  2. 备节点(slave):如 DataNode和NodeManager
  3. 辅助服务:如 Web App Proxy Server 和 MapReduce Job History server
 
 

部署架构

 

配置文件

可分为三类:

  1. 只读的默认配置文件,包括

hadoop-2.7.3/share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.xml

hadoop-2.7.3/share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

hadoop-2.7.3/share/doc/hadoop/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

hadoop-2.7.3/share/doc/hadoop/hadoop-mapreduce-client/hadoop-mapreduce-client- core/mapred-default.xml

  1. site 相关的配置,包括:

hadoop-2.7.3/etc/hadoop/core-site.xml

hadoop-2.7.3/etc/hadoop/hdfs-site.xml

hadoop-2.7.3/etc/hadoop/yarn-site.xml

hadoop-2.7.3/etc/hadoop/mapred-site.xml

控制脚本文件,在 hadoop-2.7.3/etc/hadoop/*-env.sh

 

说明:以下操作在 hadoop01 上进行。

第一步:操作系统配置

  1. 修改/etc/hostname 的内容为 hadoop01
  2. 修改/etc/hosts 的内容为

  备注:配置这里主要是想通过域名或者IP地址找到相应的机器

127.0.0.1 localhost

192.168.159.194  hadoop01

192.168.159.195  hadoop02

192.168.159.196  hadoop03

  1. 重启操作系统[root@centos7 ~]# init 6

 

第二步:Hadoop 安装包下载

可以在官网 https://archive.apache.org/dist/hadoop/core/hadoop-2.7.3/hadoop-2.7.3.tar.gz 

 

第三步:解压 hadoop 包

将 hadoop-2.7.3.tar.gz 上传到/root 目录下。

[root@hadoop01 ~]# cd /opt/

[root@hadoop01 opt]# tar zxf ~/hadoop-2.7.3.tar.gz

[root@hadoop01 opt]# cd hadoop-2.7.3/

创建 hadoop 需要的目录

[root@hadoop01 ~]# mkdir -p /opt/hadoop-2.7.3/data/namenode

[root@hadoop01 ~]# mkdir -p /opt/hadoop-2.7.3/data/datanode

 

第四步:配置Hadoop

配置 hadoop-env.sh

编辑 etc/hadoop/hadoop-env.sh,修改 JAVA_HOME 的值如下: # The java implementation to use.

备注:这样做是避免,Hadoop配置文件中读不到$JAVA_HOME而报错。

export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64/jre

配置core-site.xml

编辑 etc/hadoop/core-site.xml,修改如下:

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://hadoop01:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/opt/hadoop-2.7.3/hadoop-tmp</value>

</property>

</configuration>

说明:hadoop.tmp.dir 默认值为"/tmp/hadoop-${user.name}"。Linux 操作系统重启后,这个目录会被清空,这可能导致数据丢失,因此需要修改。

fs.defaultFS:定义master的URI和端口

配置 hdfs-site.xml

编辑 etc/hadoop/hdfs-site.xml,修改如下:

<configuration>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>/opt/hadoop-2.7.3/data/namenode</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/opt/hadoop-2.7.3/data/datanode</value>

</property>

</configuration>

dfs.replication:配置文件复制数量

dfs.namenode.name.dirNN所使用的元数据保存

dfs.datanode.data.dir:保存dn节点数据的路径

配置 mapred-site.xml

[root@hadoop01 hadoop-2.7.3]# cd etc/hadoop/

[root@hadoop01 hadoop]# mv mapred-site.xml.template mapred-site.xml

[root@hadoop01 hadoop]# cd ../../

编辑 etc/hadoop/mapred-site.xml,修改如下:

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<!-- MapReduce JobHistory Server IPC host:port -->

<name>mapreduce.jobhistory.address</name>

<value>hadoop01:10020</value>

</property>

<property>

<!-- MapReduce JobHistory Server Web UI host:port -->

<name>mapreduce.jobhistory.webapp.address</name>

<value>hadoop01:19888</value>

</property>

</configuration>

mapreduce.framework.nameyarn :启用yarn 作为资源管理框架

mapreduce.jobhistory.address:MapReduce JobHistory服务器IPC主机:端口

mapreduce.jobhistory.webapp.address:配置web地址

  1. 配置 yarn-site.xml

编辑 etc/hadoop/yarn-site.xml,修改如下:

<configuration>

<property>

<!-- The hostname of the RM. Default value:0.0.0.0 -->

<name>yarn.resourcemanager.hostname</name>

<value>hadoop01</value>

</property>

<property>

<!-- A comma separated list of services where service name should only contain a-zA- Z0-9_ and can not start with numbers -->

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

yarn.resourcemanager.hostname:配置主机名

yarn.nodemanager.aux-services:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序

配置 etc/hadoop/slaves

  该文件指定哪些服务器节点是datanode节点。删除locahost,添加所有datanode节点的主机名

编辑 etc/hadoop/slaves,修改如下:

hadoop01

hadoop02

hadoop03

 

配置 hadoop 的环境变量

编辑/etc/profile,在文件末尾加上如下内容:

export HADOOP_HOME=/opt/hadoop-2.7.3

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

说明:需要执行” . /etc/profile”让环境变量生效。

 

注意:下面第五步的操作需要依次在 hadoop01、hadoop02 和 hadoop03 上执行。

第五步:配置 SSH 无密登录及同步配置

hadoop01 上的操作

生成私钥和公钥对[root@hadoop01~]# ssh-keygen -t rsa

本机免登录

[root@hadoop01 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

执行如下命令验证 SSH 本机免登录配置,如下:

[root@hadoop01 ~]# ssh localhost [root@hadoop01 ~]# ssh hadoop01

 

hadoop01 到 hadoop02 的免登录

[root@hadoop01 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop02

执行如下命令验证 SSH 到hadoop02 免登录配置,如下:

[root@hadoop01 ~]# ssh hadoop02

 

hadoop01 到 hadoop03 的免登录

[root@hadoop01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop03

执行如下命令验证 SSH 到hadoop03 免登录配置,如下:

[root@hadoop01 ~]# ssh hadoop03

 

同 步 /etc/hosts 到 hadoop02 和 hadoop03

[root@hadoop01 ~]# scp /etc/hosts hadoop02:/etc/hosts

[root@hadoop01 ~]# scp /etc/hosts hadoop03:/etc/hosts

 

同 步 /etc/profile 到 hadoop02 和 hadoop03

[root@hadoop01 ~]# scp /etc/profile hadoop02:/etc/profile

[root@hadoop01 ~]# scp /etc/profile hadoop03:/etc/profile

 

同步 hadoop 包及配置到 hadoop02 和 hadoop03

[root@hadoop01 ~]# scp -r /opt/hadoop-2.7.3/ hadoop02:/opt/hadoop-2.7.3/

[root@hadoop01 ~]# scp -r /opt/hadoop-2.7.3/ hadoop03:/opt/hadoop-2.7.3/

 

hadoop02 上的操作

  1. 修改/etc/hostname 的内容为 hadoop02
  2. 重 启 hadoop02 [root@centos7 ~]# init 6

 

hadoop03 上的操作

  1. 修改/etc/hostname 的内容为 hadoop03
  2. 重 启 hadoop03 [root@centos7 ~]# init 6

 

第六步:格式化HDFS 文件系统

注意:本步操作在hadoop01 上进行。

[root@hadoop01 ~]# hdfs namenode -format

如果执行成功,会在日志末尾看到格式化成功的提示,如下:

INFO common.Storage: Storage directory /opt/hadoop-2.7.3/hadoop-tmp/dfs/name has been successfully formatted.

 

第七步:启动HDFS

[root@hadoop01 ~]# start-dfs.sh

hadoop01: starting namenode, logging to /opt/hadoop-2.7.3/logs/hadoop-root- namenode-hadoop01.out

hadoop01: starting datanode, logging to /opt/hadoop-2.7.3/logs/hadoop-root-datanode- hadoop01.out

hadoop03: starting datanode,  logging to /opt/hadoop-2.7.3/logs/hadoop-root-datanode- hadoop03.out

hadoop02: starting datanode, logging to /opt/hadoop-2.7.3/logs/hadoop-root-datanode- hadoop02.out

注意:这里在 hadoop01 上启动了 NameNode、DataNode 和 SecondaryNameNode,在

hadoop02 和 hadoop03 上分别启动了 DataNode。

 

查看 haoop01 上启动的进程

[root@hadoop01 ~]# jps

4950 SecondaryNameNode

4653 NameNode

4751 DataNode

上面的启动命令启动了 HDFS 的管理节点 NameNode 和数据节点 DataNode,以及

NameNode 的辅助节点,即 SecondaryNameNode。

 

查看 hadoop02 上启动的进程

[root@hadoop02 ~]#  jps

1290 DataNode

查看 hadoop03 上启动的进程

[root@hadoop03 ~]#  jps

1261 DataNode

第 八 步 : 启 动 YARN [root@hadoop01 ~]# start-yarn.sh

  starting yarn daemons

starting resourcemanager, logging to /opt/hadoop-2.7.3/logs/yarn-root-resourcemanager- hadoop01.out

hadoop01: starting nodemanager, logging to /opt/hadoop-2.7.3/logs/yarn-root- nodemanager-hadoop01.out

hadoop03: starting nodemanager, logging to /opt/hadoop-2.7.3/logs/yarn-root- nodemanager-hadoop03.out

hadoop02: starting nodemanager, logging to /opt/hadoop-2.7.3/logs/yarn-root- nodemanager-hadoop02.out

[root@hadoop01 ~]#

注意:这里在 hadoop01 启动了 ResourceManager 和 NodeManager,在 hadoop02 和

hadoop03 上分别启动了 NodeManager。

查看 haoop01 上启动的进程

[root@hadoop01 ~]# jps

4950 SecondaryNameNode

4653 NameNode

5342 ResourceManager

4751 DataNode

5439 NodeManager

 

查看 hadoop02 上启动的进程

[root@hadoop02 ~]# jps

 1591 NodeManager

1290 DataNode

 

查看 hadoop03 上启动的进程[root@hadoop03 ~]# jps

1563 NodeManager

1261 DataNode

第九步:启动 historyserver

[root@hadoop01 dfs]# mr-jobhistory-daemon.sh

start historyserver

starting historyserver, logging to /opt/hadoop-2.7.3/logs/mapred-root-historyserver- hadoop01.out

 

确认进程已启动[root@hadoop01 ~]# jps

4950 SecondaryNameNode

4653 NameNode

5342 ResourceManager

4751 DataNode

5439 NodeManager

17947 JobHistoryServer

粗体部分为新启动的进程

 

第十步:查看 Hadoop 集群的各个Web 界面

  1. 查看 NameNode 的 Web 界面http://192.168.159.194:50070

 

 
   
 
 

查看ResourceManager 的 Web 界面http://192.168.159.194:8088

 
 

查看 Job History Server 的web 页面http://192.168.159.194:19888/

 

第十一步:创建 HDFS 目录,以便执行MapReduce 任务

[root@hadoop01 ~]# hdfs dfs -mkdir -p /user/root

注意:这里的 root,如果你是其他用户就换成相应的用户名。

 

第十二步:拷贝输入文件到分布式文件系统

[root@hadoop01 ~]# cd /opt/hadoop-2.7.3/

[root@hadoop01 hadoop-2.7.3]# hdfs dfs -put etc/hadoop input

这里举例拷贝et/hadoop 目录下的文件到HDFS 中。

 

查看拷贝结果

[root@hadoop01 hadoop-2.7.3]# hdfs dfs -ls input


 

 

第十三步:运行 Hadoop自带的 WordCount 例子

[root@hadoop01 ~]# cd /opt/hadoop-2.7.3/

[root@hadoop01 hadoop-2.7.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'

说明:

  1. 这个例子是计算某个目录下所有文件中包含某个字符串的次数,这里是匹配'dfs[a-z.]+' 的次数;
  2. 中间有报如下错误, 可忽略。"18/05/14 00:03:54 WARN io.ReadaheadPool: Failed readahead on ifile EBADF: Bad file descriptor"
 
 

 

各个节点上进程的变化

hadoop01 上新增进程:YarnChild、MRAppMaster 和 RunJar

hadoop02 和 hadoop03 上有多个新增的 YarnChild 进程。

第十四步:将结果从分布式文件系统拷贝到本地

[root@ hadoop01 hadoop-2.7.3]# hdfs dfs -get output output

[root@ hadoop01 hadoop-2.7.3]# cat output/*

6 dfs.audit.logger

4 dfs.class

3 dfs.server.namenode.

2 dfs.period

2 dfs.audit.log.maxfilesize

2 dfs.audit.log.maxbackupindex

1 dfsmetrics.log

1 dfsadmin

1 dfs.servers

1 dfs.replication

1 dfs.file

 

或者直接查看

[root@hadoop01 hadoop-2.7.3]# hdfs dfs -cat output/*

这里可以看到每个包含dfs 的关键词在 etc/hadoop 的所有文件中出现的次数的统计。

 

第十五步:验证结果

用 linux 命令来统计一下"dfs.class"的次数,结果为 4 次,与 mapreduce 统计的一致。

[root@hadoop01 hadoop-2.7.3]#grep -r 'dfs.class' etc/hadoop/

etc/hadoop/hadoop- metrics.properties:dfs.class=org.apache.hadoop.metrics.spi.NullContext etc/hadoop/hadoop- metrics.properties:#dfs.class=org.apache.hadoop.metrics.file.FileContext etc/hadoop/hadoop-metrics.properties:# dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext etc/hadoop/hadoop-metrics.properties:# dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 [root@hadoop01 hadoop-2.7.3]#

 

第十六步:停止集群

  1. 停止 historyserver

[root@hadoop01 ~]# mr-jobhistory-daemon.sh stop historyserver

  1. 停止 YARN

[root@hadoop01 hadoop-2.7.3]# stop-yarn.sh

  1. 停止 HDFS

[root@hadoop01 hadoop-2.7.3]# stop-dfs.sh

猜你喜欢

转载自blog.csdn.net/LUFANZHENG/article/details/82967005