Cent OS 7+Hadoop2.9.0 本地模式、伪分布模式、完全分布模式、HDFS HA+YRAN HA高可用模式、HDFS Federation模式搭建教程-适合新手

前言

Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的扎实程度,会决定在大数据技术道路上走多远。

这是一篇入门文章,Hadoop的学习方法很多,网上也有很多学习路线图。本文的思路是:以安装部署Apache Hadoop2.9.0版本为主线,来介绍Hadoop2.x的架构组成、各模块协同工作原理、技术细节。安装不是目的,通过安装认识Hadoop才是目的。

本文分为五个部分:

第一部分:Linux环境安装

Hadoop是运行在Linux,虽然借助工具也可以运行在Windows上,但是建议还是运行在Linux系统上,第一部分介绍Linux的配置、Java JDK安装等。

第二部分:Hadoop本地模式安装

Hadoop本地模式只是用于本地开发调试,或者快速安装体验Hadoop,这部分做简单的介绍。

第三部分:Hadoop伪分布式模式安装

学习Hadoop一般是在伪分布式模式下进行。这种模式是在一台机器上各个进程上运行Hadoop的各个模块,伪分布式的意思是虽然各个模块是在各个进程上分开运行的,但是只是运行在一个操作系统上的,并不是真正的分布式。

第四部分:完全分布式安装

完全分布式模式才是生产环境采用的模式,Hadoop运行在服务器集群上,生产环境一般都会做HA,以实现高可用。

第五部分:Hadoop HA安装

HA是指高可用,为了解决Hadoop单点故障问题,生产环境一般都做HA部署。这部分介绍了如何配置Hadoop2.x的高可用,并简单介绍了HA的工作原理。 
安装过程中,会穿插简单介绍涉及到的知识。希望能对大家有所帮助。

第一部分 环境安装

1、部署环境:

1)虚拟机版本:VMware 14.1.1

2)系统版本:CentOS 7.4.1708 64位,CentOS-7-x86_64-Everything-1708.iso

3Hadoophadoop-2.9.0.tar.gz

4JDKjdk-8u172-linux-x64.tar.gz ;

都是从官网上下载的当前最新版本哈

2、修改主机名和host、关闭防火墙等

安装   VMwareCent OS 7的过程就不再赘述了,大家可以去网上百度,教程比较多,安装Cent OS 7可参考https://blog.csdn.net/hui_2016/article/details/68927487。这里只介绍修改主机名和host、关闭防火墙等,这些是强烈建议调整的。

(1)永久修改主机名

修改配置文件 /etc/hostname,与之前版本的centos 以及其它linux差别较大

# vi etc/hostname

原始文件中,主机名是localhost.localdomain,我将其删除,然后改为bigdata01注意:要使用root用户,下面的命令也可以修改主机名

# hostnamectl  set-hostname  bigdata01

(2)配置Host

请注意使用root用户

# vi etc/hosts

原始文件中127.0.0.1是ipv4的环回地址,::1是ipv6的环回地址,我在下面加了自己虚拟机的地址和域名(域名与主机名相同),如果不加这个域名的话,下面访问YARN地址时不能通过虚拟机地址访问,只能通过127.0.0.1或者localhost访问。

(3)关闭防火墙

这个与与之前版本的centos 以及其它linux差别较大

# systemctl stop firewalld.service #停止firewall

# systemctl disable firewalld.service #禁止firewall开机启动

(4)关闭selinux

请注意使用root用户

selinux是Linux一个子安全机制,学习环境可以将它禁用。

# vi /etc/sysconfig/selinux

原始文件中设置的SELINUX=enforcing,我将其注释并改为disabled,如下图:

 

 

3、JDK安装

(1)安装包准备

将jdk-8u172-linux-x64.tar.gz放到虚拟机CentOS 7的目录下(目录自己决定),使用命令切换到root账户(因为java是公用的,所以就用root用户了)

(2)将JDK包解压、解包到指定的opt/application目录下

进入到安装包所在目录,执行如下命令

# tar -zxvf  jdk-8u172-linux-x64.tar.gz -C /opt/application

注意:-C为大写,application是我提前建好的专门用来放置安装后软件的

(3)在/etc/profile文件中配置java环境变量

修改/etc/profile文件,增加jdk的相关内容(JAVA_HOME、PATH等信息)。可以通过VI编辑器修改,也可以将/etc/profile下载到本机修改

 

export JAVA_HOME=/opt/application/jdk1.8.0_172

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# cd ../..

# cd etc

# vi profile

具体的修改步骤就不再赘述,不知道的地方请查资料,修改后截图:

 

(4)使相关配置生效

#source  profile

 

(5)验证JDK安装正确与否

# java -version

显示如下图内容即安装正确

注: linux下tar格式的JDK 包其实不是安装的,解压缩就可以了 

# echo $JAVA_HOME

#echo $PATH

#echo $CLASSPATH

#java –version  


第二部分 Hadoop本地模式安装

1、安装hadoop

(1)创建hadoop用户

  1. 用root用户添加一个名字和密码为hadoop的普通用户

# useradd hadoop

# passwd hadoop

由于密码过短,添加用户后让你输入新的密码,密码还设置为hadoop,然后再重新输入一遍即可,如下图:

  1. 给hadoop用户sudo权限

#vi etc/sudoers

设置权限,学习环境可以将hadoop用户的权限设置的大一些,但是生产环境一定要注意普通用户的权限限制。进行如下图设置后,使用su命令从root用户向hadoop用户切换时不用输入密码。

 

注意:如果root用户无权修改sudoers文件,先手动为root用户添加写权限。

# chmod u+w /etc/sudoers

 

  1. 切换到hadoop用户

[root@bigdata01 ~]$ su - hadoop

[hadoop@bigdata01 ~]$

  1. 创建存放hadoop文件的目录

注意:命令要加sudo,否则提示无权创建(如下图),因为opt是系统文件夹,只有root用户才有权限,同时不推荐修改opt目录权限,所以采用sudo,如果已经创建此文件夹,请忽略

[hadoop@bigdata01 ~]$ sudo mkdir /opt/application

  1. 将存放hadoop文件夹的application文件夹所有者指定为hadoop用户,

如果存放hadoop的目录的所有者不是hadoop,之后hadoop运行中可能会有权限问题,那么就将所有者改为hadoop。

[hadoop@bigdata01 ~]$ cd opt

[hadoop@bigdata01 ~]$ sudo chown -R hadoop:hadoop  application

注意:这里chown -R会递归修改权限,所以不要在application前面加/opt,否则opt文件夹的用户所有者也会变为hadoop用户

(2)安装包准备

将安装包hadoop-2.9.0.tar.gz放到虚拟机CentOS 7的目录下(目录自己决定,建议放到home/hadoop目录下,该目录是创建用户成功后自动生成的,hadoop用户有权限)

(3)将hadoop包解压、解包到指定的opt/application目录下

切换到hadoop用户(我的本地模式和伪分布模式我都是使用root用户安装的,所以下面有些截图是显示root,完全分布式模式下我就按照严格标准来了),进入到安装包所在目录,执行如下命令

# tar -zxvf  hadoop-2.9.0.tar.gz -C /opt/application

注意:-C为大写

(4)用hadoop自带的wordcount例子在本地模式下测试跑MapReduce程序

首先在opt/application目录下创建input文件夹,然后在input中创建wc.input文件,在文件中输入hadoop hive hbase mysql等词汇,这是用来让wordcount统计的

# cd  ../..

# cd opt/application

# mkdir input

# cd input

# touch wc.input

# vi wc.input

运行hadoop自带的MapReduce程序进行验证,命令结尾的output是输出文件夹(名字自定义),会自动创建

# cd ..

# cd hadoop-2.9.0

# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar wordcount   /opt/application/input/wc.input   output

这里可以看到job ID中有local字样,说明是运行在本地模式下的

(5)本地模式下,mapreduce是输出到本地

# cd output

# ls

 

输出目录中有_SUCCESS文件说明JOB运行成功,part-r-00000是输出结果文件,用vi命令打开part-r-0000文件,你会发现wc.input文件中的词汇输出到了该文件中,后面的数字是出现的次数,如下图:

注:截止到这里,hadoop本地模式已经安装完毕,本地模式是最简单的模式,所有模块都运行与一个JVM进程中,使用的本地文件系统,而不是HDFS,本地模式主要是用于本地开发过程中的运行调试用。下载hadoop安装包后不用任何设置,默认的就是本地模式。接下来开始相关配置,也就是网上所说的伪分布式(我认为就是单机模式),具体步骤不再赘述,只捡干货。


第三部分 Hadoop伪分布模式安装

1、配置hadoop

开始伪分布式的相关配置了

(1)在etc/profile文件中配置hadoop环境变量

在etc/profile文件中追加以下变量:

export HADOOP_HOME=/opt/application/hadoop-2.9.0

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

使配置生效:

# source  profile

验证HADOOP_HOME参数:

# echo $HADOOP_HOME

出现/opt/application/hadoop-2.9.0就说明配置成功了

(2)配置hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME参数

这三个文件都在hadoop-2.9.0/etc/hadoop目录下

  1. hadoop-env.sh这个文件本身是有java_home参数的,如下:

export JAVA_HOME=${JAVA_HOME}

这个参数大家根据实际情况处理吧,有时保持原样就可以,有时需改为

export  JAVA_HOME="/opt/application/jdk1.8.0_172",具体原因我还不太清楚。

如果启动namenode报错:找不到或无法加载主类 namenode,就需要从这里查找原因了。

  1. mapred-env.sh、yarn-env.sh这两个文件的export  JAVA_HOME参数原本都是注释的,我直接在下面添加了

export  JAVA_HOME="/opt/application/jdk1.8.0_172"

(3)配置core-site.xml

# vi  ${HADOOP_HOME}/etc/hadoop/core-site.xml

打开该xml文件后,发现几乎就是个空文件,需要在<configuration></configuration>之间添加fs.defaultFS和hadoop.tmp.dir参数

fs.defaultFS参数配置的是HDFS的地址,如下:

<property>

<name>fs.defaultFS</name>

<value>hdfs://bigdata01:8020</value>

</property>

hadoop.tmp.dir参数配置的是Hadoop临时目录,比如HDFS的NameNode数据和DataNode数据默认都存放这个目录下,查看*-default.xml等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir}的配置。默认的hadoop.tmp.dir是/tmp/hadoop-${user.name},此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。

  • 创建临时目录:

#  mkdir -p /opt/application/data/tmp

  • 修改hadoop.tmp.dir

 <property>

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

  <value>/opt/application/data/tmp</value>

  </property>

(4)配置hdfs-site.xml文件并格式化、启动HDFS

  • 配置hdfs-site.xml

# vi  ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

打开后发现同样是空文件,在<configuration></configuration>之间添加dfs.replication参数,该参数配置的是HDFS存储时的备份数量(又名副本数量、复制因子,默认为3,因为这里是伪分布式环境只有一个节点(单机的),所以这里设置为1,具体如下:

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

  • 格式化HDFS

# hdfs namenode -format

格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中。

格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/application /data目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功。

注意:

①格式化时,这里注意hadoop.tmp.dir目录的权限问题,应该hadoop普通用户有读写权限才行,可以将/opt/data的所有者改为你的登录用户。 

②查看NameNode格式化后的目录。

# ll /opt/application/data/tmp/dfs/name/current

注:

fsimage是NameNode元数据在内存满了后,持久化保存到的文件;

fsimage*.md5 是校验文件,用于校验fsimage的完整性;

seen_txid 是hadoop的版本;

vession文件里保存:

  • namespaceID:NameNode的唯一ID;
  • clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群(这个还没看太明白,慢慢体会吧)。

(5)启动NameNode

# ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode

也可以切换到sbin目录下,执行hadoop-daemon.sh start namenode,效果是一样的

(6)启动DataNode

# ${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode

(7)启动SecondaryNameNode

# ${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

 

前面并没有配置SecondaryNameNode的相关参数,但却要启动。笔者认为伪分布模式下只有一个节点,应该默认SecondaryNameNode节点就是当前机器,所以不用配置了。

(8)JPS命令查看是否启动成功

有结果就是启动成功了

(9)HDFS上测试创建目录、上传、下载文件

  • HDFS上创建目录

# ${HADOOP_HOME}/bin/hdfs dfs -mkdir /demo1

注意demo1前面的斜线一定要有,否则创建不同的目录

  • 上传本地文件到HDFS上

# ${HADOOP_HOME}/bin/hdfs dfs -put

${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1

  • 读取HDFS上的文件内容

# ${HADOOP_HOME}/bin/hdfs dfs -cat /demo1/core-site.xml

  • 从HDFS上下载文件到本地

# bin/hdfs dfs -get /demo1/core-site.xml

2、配置、启动YARN

(1)配置mapred-site.xml

默认是没有mapred-site.xml文件,但是在hadoop-2.9.0/etc/hadoop有个mapred-site.xml.template配置模板文件,需复制模板生成mapred-site.xml

# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

在mapred-site.xml文件中添加如下配置,指定mapreduce运行在yarn框架上:

<property>

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

<value>yarn</value>

</property>

(2)配置yarn-site.xml

添加如下配置:

<property>

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

           <value>mapreduce_shuffle</value>

</property>

<property>

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

    <value>bigdata01</value>

 </property>

 

  • yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
  • yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。

(3)启动Resourcemanager

# ${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

(4)启动nodemanager

# ${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

(5)查看是否启动成功

# jps

 

(6)YARN的Web页面

YARN的Web客户端默认端口号是8088,通过http://192.168.2.103:8088/或者http://bigdata01:8088可以查看。

 

3、运行MapReduce Job

在Hadoop的share目录里,自带了一些jar包,里面带有一些mapreduce实例小例子,位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar,可以运行这些例子体验刚搭建好的Hadoop平台,我们这里来运行最经典的WordCount实例。

 

 

(1)创建测试用的Input文件

 

在hdfs上创建输入目录:

# bin/hdfs dfs -mkdir -p /wordcountdemo/input

 

创建原始文件:

之前在本地/opt/application/input目录下我们已经创建一个文件wc.input,现在我在其中再加些词汇,内容如下:

 

 

将wc.input文件上传到HDFS的/wordcountdemo/input目录中:

# bin/hdfs dfs -put /opt/data/wc.input /wordcountdemo/input

可通过命令查看是否已经上传:

# bin/hdfs dfs -ls /wordcountdemo/input

(2)运行WordCount MapReduce Job

#  bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-

2.9.0.jar  wordcount  /wordcountdemo/input  /wordcountdemo/output

最后的output目录会自动创建

(3)查看输出结果目录

# bin/hdfs dfs -ls /wordcountdemo/output

  1. output目录中有两个文件,_SUCCESS文件是空文件,有这个文件说明Job执行成功。
  2. part-r-00000文件是结果文件,其中-r-说明这个文件是Reduce阶段产生的结果,mapreduce程序执行时,可以没有reduce阶段,但是肯定会有map阶段,如果没有reduce阶段这个地方有是-m-。
  3. 一个reduce会产生一个part-r-开头的文件。
  4. 查看输出文件内容。

# bin/hdfs dfs -cat /wordcountdemo/output/part-r-00000

发现将每个单词的出现次数进行了统计,结果是按照键值排好序的。

 

 

 

4、停止Hadoop

# sbin/yarn-daemon.sh stop nodemanager

# sbin/yarn-daemon.sh stop resourcemanager

#  sbin/hadoop-daemon.sh stop secondarynamenode

# sbin/hadoop-daemon.sh stop datanode

# sbin/hadoop-daemon.sh stop namenode

注:一定要先关闭nodemanager,如果先关闭resourcemanager,会报“nodemanager did not stop gracefully after 5 seconds: killing with kill -9”,这个问题让我查了好长时间!另外建议关闭各服务顺序和启动顺序相反,即先关闭后启动的服务

5、Hadoop各个功能模块的理解

(1)HDFS模块

HDFS负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS是个相对独立的模块,可以为YARN提供服务,也可以为HBase等其它模块提供服务。

(2)YARN模块

YARN是一个通用的资源协同和任务调度框架,是为了解决Hadoop1.x中MapReduce里NameNode负载太大和其它问题而创建的一个框架。

YARN是个通用框架,不止可以运行MapReduce,还可以运行Spark、Storm等其它计算框架。

(3)MapReduce模块

MapReduce是一个计算框架,它给出了一种数据处理的方式,即通过Map阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用。

 

6、开启历史服务

(1)历史服务介绍

Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。

(2)开启历史服务

# sbin/mr-jobhistory-daemon.sh start historyserver

开启后,可以通过Web页面查看历史服务器(伪分布式下这个地址是在mapred-site.xml中默认配置的):

http://bigdata01:19888/

(3)Web查看job执行历史

运行一个mapreduce任务

# bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar wordcount /wordcountdemo/input /wordcountdemo/output1

查看job历史

历史服务器的Web端口默认是19888,可以查看Web界面,如果想在宿主机上点击History查看,需在宿主机上配置host,否则提示无法访问。

但是在上面所显示的某一个Job任务页面的最下面,Map和Reduce个数的链接上,点击进入Map的详细信息页面,再查看某一个Map或者Reduce的详细日志是看不到的,是因为没有开启日志聚集服务,按照上图依次点下去就出现如下图提示:

7、开始日志聚集服务

(1)日志聚集介绍

MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。

 

(2)开启日志聚集

  1. 配置日志聚集功能:

Hadoop默认是不启用日志聚集的,在yarn-site.xml文件里配置启用日志聚集

 

<property>

<name>yarn.log-aggregation-enable</name>

<value>true</value>

          </property>

<property>

          <name>yarn.log-aggregation.retain-seconds</name>

<value>106800</value>

 </property>

注:

yarn.log-aggregation-enable:是否启用日志聚集功能

yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒

 

  1. 重启Yarn进程:

# sbin/stop-yarn.sh

# sbin/start-yarn.sh

  1. 重启HistoryServer进程:

# sbin/mr-jobhistory-daemon.sh stop historyserver

# sbin/mr-jobhistory-daemon.sh start historyserver

(3)测试日志聚集

运行一个demo MapReduce,使之产生日志:

# bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar wordcount  /wordcountdemo/input  /wordcountdemo/output2

注:输出文件不能与之前的文件重名

查看日志:

运行Job后,就可以在历史服务器Web页面查看各个Map和Reduce的日志了。 

第四部分 完全分布模式

完全分布式是真正利用多台Linux主机来进行部署Hadoop

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值