一、hadoop运行环境搭建

1.环境准备

  安装 hadoop 需要使用 Linux 系统,同时需要熟练使用 Linux 章节的全部命令,如果没有 Linux 基础建议先学习 Linux 基础。

相关工具下载地址:

2.安装 centos7 虚拟机并配置远程访问和静态 ip,配置完成后通过命令 systemctl restart network 重启网络服务。

BOOTPROTO='static'
IPADDR='192.168.88.130'
NETMASK='255.255.255.0'
GATEWAY='192.168.88.2'
DNS1='192.168.88.2'

BOOTPROTO:获取 ip 方式,设置为静态的,该值默认是 dhcp(动态分配 ip)

IPADDR:ip 地址

NETMASK:掩码

GATEWAY:网关,由虚拟机的虚拟网络编辑器中提供。

DNS1:域名解析服务器,一般由网关提供。

如果想要配置虚拟机的网段,可以在 VM 的>编辑>虚拟网络配置
在这里插入图片描述
修改主机名(主机名与ip对应) vi /etc/hostname

hadoop130

修改主机映射,在 /etc/hosts 文件加入如下映射

192.168.88.130 hadoop130 
192.168.88.131 hadoop131 
192.168.88.132 hadoop132 
192.168.88.133 hadoop133 
192.168.88.134 hadoop134

为了方便后面从 hdfs 上下载文件,windows 本地 host 文件也加入上面映射

3.禁用防火墙

systemctl stop firewalld #停止firewall 
systemctl disable firewalld #禁止firewall开机启动

4.创建目录 /opt/module/,将 hadoop-2.7.2.tar.gz ,jdk-8u144-linux-x64.tar.gz 上传到该目录并解压。

5.配置 jdk 和 hadoop 的环境变量

vi /etc/profile

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

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

source /etc/profile

6.hadoop version 和 java -version 判断环境变量是否可用。

二、hadoop 目录结构

  • bin 启动程序目录:存放对 Hadoop 相关服务(HDFS,YARN)进行操作的脚本
  • etc 配置目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
  • lib 依赖目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
  • sbin 超级管理员目录:存放启动或停止 Hadoop 相关服务的脚本
  • share 官方案例目录:存放 Hadoop 的依赖jar包、文档、和官方案例

三、hadoop 本地模式

  简单的解压和配置环境变量就可以运行本地模式,下面我们运行官方 WordCount 案例

  在 hadoop-2.7.2 目录下创建 input 文件夹

  将 hadoop 的 xml 配置文件复制到 input 文件夹

cp etc/hadoop/*.xml input

  执行 share 目录下的 MapReduce 程序 wordcount

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput

  查看输出目录 output 结果

cat wcoutput/*

四、hadoop 伪分布式模式

  1.配置:hadoop-env.sh

  修改里面的 JAVA_HOME

echo $JAVA_HOME
/opt/module/jdk1.8.0_144

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

  2.配置:core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop101:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

  3.配置:hdfs-site.xml

<!-- 指定HDFS副本的数量 -->
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

  4.格式化 NameNode(第一次启动时格式化,以后就不要总格式化,如果真的需要格式化,删除 /opt/module/hadoop-2.7.2/data 目录后再格式化)

bin/hdfs namenode -format

  5.启动 NameNode

sbin/hadoop-daemon.sh start namenode

  6.启动 DataNode

sbin/hadoop-daemon.sh start datanode

  7.查看集群是否启动成功

jps
13586 NameNode
13668 DataNode
13786 Jps

  注意:jps 是 JDK 中的命令,不是 Linux 命令。不安装 JDK 不能使用 jps

在 windows 的 web 端查看 HDFS 文件系统,建议配置 host 文件使其能正常映射到 centos7,如果不配置,后面将无法通过浏览器获取上传的分布式文件系统中的文件。

http://hadoop101:50070/dfshealth.html#tab-overview

测试案例
(a)在 HDFS 文件系统上创建一个 input 文件夹

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

(b)将测试文件里面全部的内容上传到文件系统上

bin/hdfs dfs -put input/* /user/input/

(c)查看上传的文件是否正确

bin/hdfs dfs -ls /user/input/ 
bin/hdfs dfs -cat /user/input/*

(d)运行MapReduce程序

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

(e)查看输出结果 命令行查看:

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

(f)将测试文件内容下载到本地

hdfs dfs -get /user/output/part-r-00000 ./wcoutput/

(g)删除输出结果

hdfs dfs -rm -r /user/output

练习:

1.安装 centos 后安装配置 hadoop 本地模式,并截图提交操作步骤。

五、伪分布式 YARN 运行

  YARN 是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、 NodeManager(NM)、ApplicationMaster(AM)。 ResourceManager 负责所有资源的监控、分配和管理; ApplicationMaster 负责每一个具体应用程序的调度和协调; NodeManager 负责每一个节点的维护。 对于所有的 applications,RM 拥有绝对的控制权和对资源的分配权。而每个 AM 则会和 RM 协商资源,同时和 NodeManager 通信来执行和监控 task。

  1.配置:yarn-env.sh

  修改 JAVA_HOME

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

  2.配置 yarn-site.xml

<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop101</value>
</property>

  3.配置 mapred-env.sh

  修改 JAVA_HOME

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

  4.配置: (对 mapred-site.xml.template 重新命名为) mapred-site.xml

<!-- 指定MR运行在YARN上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

  5.启动 yarn

  启动前必须保证 NameNode 和 DataNode 已经启动

  启动 ResourceManager

sbin/yarn-daemon.sh start resourcemanager

  启动 NodeManager

sbin/yarn-daemon.sh start nodemanager

  YARN的浏览器页面查看

  http://hadoop101:8088/cluster
(a)删除文件系统上的 output 文件

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

(b)执行 MapReduce 程序

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

(c)在浏览器查看运行过程

(d)查看运行结果

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

yarn的运行流程

  • 用户向 YARN 中提交应用程序,其中包括 ApplicationMaster 程序、启动 ApplicationMaster 的命令、用户程序等。
  • ResourceManager 为该应用程序分配第一个 Container,并与对应的 Node-Manager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster。
  • ApplicationMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManager 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
    ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。
  • 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。
  • NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
  • 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态。
  • 应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。

六、伪分布式启动历史服务器

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

1.配置:mapred-site.xml

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop101:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop101:19888</value>
</property>

2.启动历史服务器

sbin/mr-jobhistory-daemon.sh start historyserver

3.查看历史服务器是否启动

jps

4.web 查看 JobHistory

http://hadoop101:19888/jobhistory

七、伪分布式配置日志的聚集

  日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

  注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。

开启日志聚集功能具体步骤如下:

1.配置 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>

2.关闭 NodeManager 、ResourceManager 和 HistoryManager

sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver

3.启动 NodeManager 、ResourceManager和 HistoryManager

sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver

4.删除 HDFS 上已经存在的输出文件

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

5.执行 WordCount 程序

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

6.查看日志

http://hadoop101:19888/jobhistory
在这里插入图片描述
在这里插入图片描述

八、hadoop 集群模式

  1.scp(secure copy)安全拷贝

  scp 定义: scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

基本语法
scp    -r        $pdir/$fname                $user@hadoop$host:$pdir/$fname
命令   递归       要拷贝的文件路径/名称        目的用户@主机:目的路径/名称

  案例实操
(a)在 hadoop102 上,将 hadoop102 中 /opt/module 目录下的软件拷贝到 hadoop103,hadoop104 上。

scp -r /opt/module root@hadoop102:/opt/module

(b)将 hadoop102 中 /etc/profile 文件拷贝到hadoop103,hadoop104

配置环境变量

vi /etc/profile

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

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

source /etc/profile

注意:拷贝过来的配置文件别忘了 source 一下 /etc/profile

  2.rsync 远程同步工具

  rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。 rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。如果 centos 没有安装,使用 yum install -y rsync 安装。

基本语法
rsync    -rvl       $pdir/$fname              $user@hadoop$host:$pdir/$fname
命令     选项参数    要拷贝的文件路径/名称       目的用户@主机:目的路径/名称

选项参数说明

选项 功能

-r 递归

-v 显示复制过程

-l 拷贝符号连接

案例实操
(a)把hadoop102机器上的/opt/software目录同步到hadoop103服务器的root用户下的/opt/目录

rsync -rvl /opt/software/ root@hadoop102:/opt/software

xsync 集群分发脚本

需求:循环复制文件到所有节点的相同目录下

在/usr/local/bin目录下,创建 xsync 文件 chmod 777 xsync

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

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

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

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

  3.集群规划与配置
在这里插入图片描述
(1)配置 core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop131:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

(2)配置 hadoop-env.sh

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

(3)配置 hdfs-site.xml

<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>

<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop133:50090</value>
</property>

(4)配置yarn-env.sh

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

(5)配置 yarn-site.xml

<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop132</value>
</property>

(6)配置 mapred-env.sh

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

(7)配置mapred-site.xml

cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定MR运行在Yarn上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

(8)将配置好的131分发文件到132,133

xsync /opt/module/hadoop-2.7.2/

如果集群是第一次启动,需要格式化 NameNode

hadoop namenode -format

(9)配置集群启动的主机

vi /opt/module/hadoop-2.7.2/etc/hadoop/slaves

hadoop102
hadoop103
hadoop104

(10)SSH无密登录配置

一个 ssh 可以远程多个系统,在输入密码的情况下可以彼此访问,而 hadoop 群起时就需要免密登录,那就得将彼此间生成的密钥对存入对方的授权库中。

生成公钥和私钥

ssh-keygen -t rsa
ssh-copy-id hadoop131
ssh-copy-id hadoop132
ssh-copy-id hadoop133

注意:自己登录自己也要密码,所以也要把将公钥拷贝到自己身上。

在 131 上群起 hadoop 集群

start-dfs.sh

在 132 上启动 yarn

start-yarn.sh

分别到 132,133 上使用 jps 命令查看启动的是否与表格规划一致

web 查看 http://hadoop104:50090/status.html

停止只需要在对应启动的服务器上执行对应的 stop-dfs.sh 和 stop-yarn.sh

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐