虚拟机上的Hadoop伪分布式和完全分布式的搭建

目录

    • 一、Hadoop
      • 1.Hadoop的组成
        • 1.1HDFS架构概述
        • 1.2YARN架构概述
        • 1.3MapReduce架构概述
    • 二、Hadoop的搭建
      • 1.运行环境
        • 1.1安装JDK
        • 1.2安装Hadoop
      • 2.伪分布式运行模式
        • 2.1配置文件说明
        • 2.2启动HDFS并运行MapReduce程序
        • 2.3启动YARN并运行MapReduce程序
        • 2.4配置历史服务器
        • 2.5配置日志的聚集
      • 3.完全分布式运行模式
        • 3.1虚拟机准备
        • 3.2编写集群分发脚本
        • 3.3集群配置
          • 集群启动/停止方式总结

一、Hadoop

1.Hadoop的组成

简单了解一下Hadoop2.x时代的组成:
HDFS 负责数据存储
Yarn 负责资源调度
MapReduce 负责计算
Common 辅助工具

1.1HDFS架构概述

HDFS(Hadoop Distributed File System)
(1)NameNode (nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的快列表和块所在的DataNode等。
(2)DataNode (dn):在本地文件系统存储文件块数据,以及块数据的校验和。
(3)Secondary NameNode (2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。

1.2YARN架构概述

  1. ResourceManager(RM)主要作用如下:
    (1)处理客户端请求
    (2)监控NodeManager
    (3)启动或监控ApplicationMaster
    (4)资源的分配与调度
  2. NodeManger(NM)主要作用如下:
    (1)管理单个节点上的资源
    (2)处理来自ResourceManager的命令
    (3)处理来自ApplicationMaster的命令
  3. ApplicationMaster(AM)作用如下:
    (1)负责数据的切分
    (2)为应用程序申请资源并分配给内部的任务。
    (3)任务的监控与容错。
  4. Container
    Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
    虚拟机上的Hadoop伪分布式和完全分布式的搭建_第1张图片

1.3MapReduce架构概述

MapReduce 将计算过程分为两个阶段:Map和Reduce:
(1)Map阶段并行处理输入数据。
(2)Reduce阶段对Map结果进行汇总

二、Hadoop的搭建

1.运行环境

前期准备这一部分看需求进行配置

   修改 vim /etc/udev/rules.d/70-persistent-net.rules , 拷贝mac地址
   修改 vim /etc/sysconfig/network-scripts/ifcfg-eth0 , 修改mac地址以及IP地址
   修改 vim /etc/sysconfig/network  修改主机名
   修改 vim /etc/hosts ,配置 IP与主机名的映射.
  1. 修改主机名
 vim /etc/sysconfig/network

配置IP与主机名的映射:

vim /etc/hosts

添加如下内容:

192.168.17.101 hadoop101
192.168.17.102 hadoop102
192.168.17.103 hadoop103
192.168.17.104 hadoop104
  1. 关闭防火墙
    查看防火墙状态:
service iptables status

临时关闭防火墙:

service iptables stop

开机时关闭防火墙:

chkconfig iptables off
  1. 创建Linux用户
    这里添加了名为 fseast 的新用户:
useradd fseast
passwd fseast
  1. 配置Linux用户具有root权限
    对/etc/sudoers文件添加:
fseast ALL=(ALL)       NOPASSWD:ALL

NOPASSWD是普通用户sudo的时候不需要密码。
接下来的操作都将使用fseast用户操作

  1. 创建文件夹
    在/opt下创建 software 和 module 两个目录,一个存放软件包,一个放解压后的文件。(使用fseast用户创建要使用sudo)
    改变这两个目录所有者:
 chown fseast:fseast 目录

关闭图形化界面:
修改 /etc/inittab

id:3:initdefault:

1.1安装JDK

这里使用的Linux版本是Centos6.8,
JDK版本是1.8,
Hadoop版本是2.7.2

  1. 安装JDK
    先把软件包上传到software 目录
    解压:
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/

配置环境变量:
在/etc/profile文件加上:

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

使其生效:

source /etc/profile

测试jdk是否安装成功:

java -version

1.2安装Hadoop

Hadoop下载地址:
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/

  1. 上传安装包到software,解压:
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

解压后查看目录结构:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第2张图片
(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

  1. 将Hadoop添加到环境变量:
    在/etc/profile文件添加:
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使其生效:

source /etc/profile

测试是否安装成功:

 hadoop version

2.伪分布式运行模式

2.1配置文件说明

Hadoop配置文件分为两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第3张图片
(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

2.2启动HDFS并运行MapReduce程序

(1). 修改配置文件:
进入/opt/module/hadoop-2.7.2/etc/hadoop 目录
(a)配置:hadoop-env.sh
修改改配置文件的JAVA_HOME路径(其实单台节点不配JAVA_HOME也可以读的到该变量):

export JAVA_HOME=/opt/module/jdk1.8.0_144

(b)配置:core-site.xml

<configuration>

<property>
<name>fs.defaultFSname>
    <value>hdfs://hadoop101:9000value>
property>


<property>
	<name>hadoop.tmp.dirname>
	<value>/opt/module/hadoop-2.7.2/data/tmpvalue>
property>
configuration>

(c)配置:hdfs-site.xml

<configuration>

<property>
        <name>dfs.replicationname>
        <value>1value>
property>
configuration>

(2). 启动集群
(a)格式化NameNode(第一次启动时格式化,以后就不要总格式化,原因下面说)

bin/hdfs namenode -format

(b)启动NameNode

hadoop-daemon.sh start namenode

(c)启动DataNode

hadoop-daemon.sh start datanode

(3). 查看集群
(a)查看是否启动成功

[fseast@hadoop101 hadoop-2.7.2]$ jps
5203 DataNode
5353 Jps
5102 NameNode

(b)web端查看HDFS文件系统
http://hadoop101:50070/
使用hadoop101的话需要配置Windows的hosts文件。
成功进入:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第4张图片(c)查看产生的Log日志
要习惯根据日志提示信息去分析问题、解决Bug。
这里日志文件目录为:/opt/module/hadoop-2.7.2/logs

(4). 操作集群:
(a)在HDFS文件系统上创建一个input文件夹

hdfs dfs -mkdir -p /user/fseast/input

(b)将测试文件内容上传到文件系统上
先在本地创建一个文件wc.input,并写入一些单词,然后上传到文件系统上:

hdfs dfs -put wc.input /user/fseast/input

(c)运行MapReduce程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/fseast/input/ /user/fseast/output

这个 /user/fseast/output目录不用提前在HDFS创建。

(d)查看输出结果

hdfs dfs -cat /user/fseast/output/*

浏览器查看:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第5张图片

【为什么不能重复格式化NameNode?】
Hadoop的NameNode和DataNode有对应的clusterID,NameNode的cID在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current/VERSION文件中,DataNode的cID在/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/VERSION文件中,正常情况下这NameNode和DataNode的cID要一致。当重复格式化NameNode的时候,会导致NameNode的clusterID与DataNode的clusterID不一致。启动的时候便会出现问题。
所以,以后一定要格式化的时候,先关闭进程,删除/opt/module/hadoop-2.7.2下的data和logs这两个目录。
我截了NameNode的clusterID与DataNode的clusterID:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第6张图片虚拟机上的Hadoop伪分布式和完全分布式的搭建_第7张图片

2.3启动YARN并运行MapReduce程序

(1)配置集群
(a)配置yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

(b)配置yarn-site.xml


<property>
 		<name>yarn.nodemanager.aux-servicesname>
 		<value>mapreduce_shufflevalue>
property>


<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop101value>
property>

(c)配置:mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

(d)配置: (对mapred-site.xml.template复制一份并重新命名为) mapred-site.xml


<property>
		<name>mapreduce.framework.namename>
		<value>yarnvalue>
property>

切记上面的配置都要在

(2)启动集群
(a)启动前必须保证NameNode和DataNode已经启动
(b)启动ResourceManager

yarn-daemon.sh start resourcemanager

(c)启动NodeManager

yarn-daemon.sh start nodemanager

截图:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第8张图片
(3)集群操作
(a)YARN的浏览器页面查看:http://hadoop101:8088
如图所示:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第9张图片(b)删除文件系统上的output文件

hdfs dfs -rm -R /user/fseast/output

(c)执行MapReduce程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/fseast/input /user/fseast/output

执行MapReduce程序的时候,如果你一直刷新页面,就可以看的到变化:
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第10张图片虚拟机上的Hadoop伪分布式和完全分布式的搭建_第11张图片

2.4配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

  1. 配置mapred-site.xml:

<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop101:10020value>
property>

<property>
    <name>mapreduce.jobhistory.webapp.addressname>
    <value>hadoop101:19888value>
property>

  1. 启动历史服务器
mr-jobhistory-daemon.sh start historyserver
  1. 查看历史服务器是否启动:
    虚拟机上的Hadoop伪分布式和完全分布式的搭建_第12张图片

  2. 查看JobHistory:http://hadoop101:19888/jobhistory
    如图所示:
    虚拟机上的Hadoop伪分布式和完全分布式的搭建_第13张图片点击上方圈起来的位置:
    虚拟机上的Hadoop伪分布式和完全分布式的搭建_第14张图片再点击圈起来的地方:
    虚拟机上的Hadoop伪分布式和完全分布式的搭建_第15张图片他说没有开启聚集,那就开启一下日志的聚集:

2.5配置日志的聚集

  1. 配置yarn-site.xml:

<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>


<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>

  1. 关闭NodeManager 、ResourceManager和HistoryServer
[fseast@hadoop101 hadoop]$ yarn-daemon.sh stop resourcemanager
[fseast@hadoop101 hadoop]$ yarn-daemon.sh stop nodemanager
[fseast@hadoop101 hadoop]$ mr-jobhistory-daemon.sh stop historyserver
  1. 启动NodeManager 、ResourceManager和HistoryServer
[fseast@hadoop101 hadoop]$ yarn-daemon.sh start resourcemanager
[fseast@hadoop101 hadoop]$ yarn-daemon.sh start nodemanager
[fseast@hadoop101 hadoop]$ mr-jobhistory-daemon.sh start historyserver
  1. 删除HDFS上已经存在的输出文件
hdfs dfs -rm -R /user/fseast/output
  1. 执行WordCount程序
[fseast@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/fseast/input /user/fseast/output

再按照上面,查看日志,
先进JobHistory,http://hadoop101:19888/jobhistory
虚拟机上的Hadoop伪分布式和完全分布式的搭建_第16张图片虚拟机上的Hadoop伪分布式和完全分布式的搭建_第17张图片虚拟机上的Hadoop伪分布式和完全分布式的搭建_第18张图片虚拟机上的Hadoop伪分布式和完全分布式的搭建_第19张图片

3.完全分布式运行模式

3.1虚拟机准备

再准备三台虚拟机:hadoop102、hadoop103、hadoop104,修改主机名,IP地址,配置/etc/hosts文件,

3.2编写集群分发脚本

  1. scp(secure copy)安全拷贝
    把上面安装好的jdk和Hadoop发送到新建的三台虚拟机(记得先停掉hadoop的那些进程):
[fseast@hadoop101 opt]$ scp -r /opt/module root@hadoop102:/opt/
[fseast@hadoop101 opt]$ scp -r /opt/module root@hadoop103:/opt/
[fseast@hadoop101 opt]$ scp -r /opt/module root@hadoop104:/opt/

改变传过去目录的所有者:

[fseast@hadoop102 opt]$ sudo chown fseast:fseast -R module/
  1. rsync 远程同步工具
    rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
    rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

实例:
把hadoop101机器上的/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录:

[fseast@hadoop101 opt]$ sudo rsync -av /opt/software/ hadoop102:/opt/software

拷贝环境变量配置文件:

[fseast@hadoop101 etc]$ sudo rsync -av /etc/profile hadoop102:/etc/profile

使环境变量生效:source /etc/profile

脚本实现:
目的:后面在hadoop102节点上修改了某些文件时,不需要一个个传到另外两个节点,启动 shell 脚本时加上参数即可:
(a)在/home/fseast目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:

[fseast@hadoop102 ~]$ mkdir bin
[fseast@hadoop102 ~]$ cd bin/
[fseast@hadoop102 bin]$ touch xsync
[fseast@hadoop102 bin]$ vim xsync

在该文件中编写如下代码:

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for((host=103; host<105; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -av $pdir/$fname $user@hadoop$host:$pdir
done

(b)修改脚本 xsync 具有执行权限

[fseast@hadoop102 bin]$ chmod 777 xsync

(c)调用脚本形式:xsync 文件名称
如:
把/home/fseast/bin同步到其他两台节点:

[fseast@hadoop102 bin]$ xsync /home/fseast/bin

注意:如果将xsync放到/home/fseast/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。出现不能使用的情况,大多是全局变量PATH没有/home/fseast/bin路径。

3.3集群配置

以下的完全分布式配置是完整的配置,也就是默认没有配置伪分布式情况下的。

配置文件三个.env结尾的文件都只是配了 JAVA_HOME ,所以也可不配,只需要在/home/fseast/.bashrc文件中加上 source /etc/profile
NameNode,ResourceManager,SecondaryNameNode三个节点比较耗资源,最好不要放在同一台机器。
  1. 集群部署规划
    虚拟机上的Hadoop伪分布式和完全分布式的搭建_第20张图片
  2. SSH免密登录配置
    (1) 生成公钥和私钥:
[fseast@hadoop102 ~]$ ssh-keygen -t rsa

然后按三次回车,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

(2) 将公钥拷贝到要免密登录的目标机器上

[fseast@hadoop102 .ssh]$ ssh-copy-id hadoop102
[fseast@hadoop102 .ssh]$ ssh-copy-id hadoop103
[fseast@hadoop102 .ssh]$ ssh-copy-id hadoop104

在hadoop103也要做相同操作,这里hadoop104可以操作也可以不做。

  1. 配置集群
    配置集群的文件在hadoop102节点配置,配置完后再使用上面的脚本同步就好。
    这里是按照没有配伪分布式情况下的配置文件,在前面配过伪分布式那么有些配过了那就不需要重复配了。
    所用需要配置的文件都在目录:
    /opt/module/hadoop-2.7.2/etc/hadoop/slaves

(1)核心配置文件
配置core-site.xml(伪分布式配过,只需要修改NameNode的节点名即可。):


<property>
		<name>fs.defaultFSname>
      <value>hdfs://hadoop102:9000value>
property>


<property>
		<name>hadoop.tmp.dirname>
		<value>/opt/module/hadoop-2.7.2/data/tmpvalue>
property>

(2)HDFS配置文件
配置hadoop-env.sh(伪分布式配过):

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置hdfs-site.xml(副本数量伪分布式配过,不过需要修改):


<property>
		<name>dfs.replicationname>
		<value>3value>
property>


<property>
      <name>dfs.namenode.secondary.http-addressname>
      <value>hadoop104:50090value>
property>

(3)YARN配置文件
配置yarn-env.sh(伪分布式配过):

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置yarn-site.xml(伪分布式配过,需要修改ResourceManager的地址,前面配的日志聚集也可保留):


<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>


<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>


<property>
		<name>yarn.nodemanager.aux-servicesname>
		<value>mapreduce_shufflevalue>
property>


<property>
		<name>yarn.resourcemanager.hostnamename>
		<value>hadoop103value>
property>

(4)MapReduce配置文件
配置mapred-env.sh(伪分布式配过):

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置mapred-site.xml(伪分布配过,没配过的需要复制mapred-site.xml.template文件并改名为mapred-site.xml再配置):


<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop102:10020value>
property>

<property>
    <name>mapreduce.jobhistory.webapp.addressname>
    <value>hadoop102:19888value>
property>


<property>
		<name>mapreduce.framework.namename>
		<value>yarnvalue>
property>

(5)配置slaves(没有配过):
为了群起集群的时候,知道哪台节点是从节点

hadoop102
hadoop103
hadoop104
  1. 在集群上分发配置好的Hadoop配置文件
[fseast@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
  1. 群起集群
    (1)如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
hdfs namenode -format

(2)启动HDFS
在hadoop102(NameNode)执行:

start-dfs.sh

(3)启动YARN
在hadoop103(ResourceManager)执行:

start-yarn.sh

(4)Web端查看SecondaryNameNode:
http://hadoop104:50090

虚拟机上的Hadoop伪分布式和完全分布式的搭建_第21张图片

集群启动/停止方式总结
  1. 各个服务组件逐一启动/停止
    (1)分别启动/停止HDFS组件
    hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
    hadoop-daemon.sh start / stop datanode
    hadoop-daemon.sh start / stop secondarynamenode
    (2)启动/停止YARN
    yarn-daemon.sh start / stop resourcemanager
    yarn-daemon.sh start / stop nodemanager

  2. 各个模块分开启动/停止(配置ssh是前提)
    (1)整体启动/停止HDFS

start-dfs.sh   /  stop-dfs.sh

(2)整体启动/停止YARN

 start-yarn.sh  /  stop-yarn.sh

下一篇:阿里云服务器上的Hadoop伪分布式和完全分布式的搭建

你可能感兴趣的:(Hadoop)