【hadoop】4.伪分布式模式

简介

前面咱们讲到了hadoop拥有3种运行模式,搭建了最简答的本地运行模式并在其上运行了两个简单案例。本章节咱们学习伪分布模式。顾名思义,该模式外在看起来像是分布式,实际上只有一个节点。java

伪分布模式的有不一样的搭建方式,具体取决于咱们须要用到什么样的功能。前面提到过,Hadoop主要有3大模块:HDFS、YARN以及MapReduce。接下来咱们经过该模式搭建hadoop不一样的模块。node

从本章节你能够学习到:web

  1. hadoop的伪分布式运行模式。
  2. HDFS环境搭建
  3. YARN环境搭建及本地临时文件存储目录
  4. 在伪分布模式下运行wordcount案例。

一、搭建HDFS环境

本小节咱们将搭建HDFS组件,并在其上运行一个案例。shell

1.1 基础环境搭建

安装jdk以及hadoop,安装方式参考本系列第二章节。如今咱们已经准备好了和本地模式如出一辙的环境,接下来开始建立DFS须要的namenode以及datanode。apache

注意:在此以前最好配置好本身所搭建环境的主机名关系,例如我搭建的环境共有5台机器,他们的/etc/hosts文件以下:分布式

192.168.102.131 h131
192.168.102.132 h132
192.168.102.133 h133
192.168.102.134 h134
192.168.102.135 h135

同时主机名也最好设置一下,经过命令hostname h131进行设置。oop

注意,伪分布模式只需一台机器就能够,上面的列表只是为了后面的集群模式准备的,因此提早准备这样的环境也不是不行,不过本教程暂时用不到。学习

1.2 配置集群

配置文件的位置都位于/opt/module/hadoop-2.7.2/etc/hadoop下。配置内容放在<configuration>配置节中,其中h131是个人这台主机的主机名,记住写本身的主机名便可。测试

一、配置hadoop-env.sh,修改JAVA_HOME 路径,若是您已经参考了本系列教程的第2章内容,此处能够不作。网站

二、配置core-site.xml,添加配置

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

fs.defaultFS使用本地文件协议,查看官方文档可知其默认值为file:///;

三、配置hdfs-site.xml

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

dfs.replication默认值为3。

1.3 启动集群

经过2咱们已经完成了基本的hdfs配置。咱们如今配置了数据节点的信息,同时指定了文件的副本数,接下来咱们启动集群。

一、格式化namenode(第一次启动时须要格式化)

# hdfs namenode -format

hdfs位于bin下,因为咱们配置了环境变量,能够在任何地方直接调用。

二、启动namenode

# hadoop-daemon.sh start namenode

hadoop-daemon.sh位于hadoop/sbin下,因为咱们一样配置的环境变量,能够直接调用。

三、启动datanode

# hadoop-daemon.sh start datanode

四、查看结果:经过命令jps查看当前启动的java进行,能够看出,两个节点都已经启动。

9731 NameNode
9893 Jps
9822 DataNode

1.4 查看集群

前面咱们成功的启动了两个节点:HDFS的namenode和datanode。接下来咱们查看该集群的具体状况。

一、经过命令:查看当前启动的节点信息

# jps

二、经过日志:当咱们启动一个节点服务以后,在hadoop的文件夹下就会生成一个logs文件,在该文件中每个节点都有对应的日志信息,咱们能够经过该文件获取本身想要获取的信息,例如 hadoop-root-datanode-h132.log

三、经过可视化web:咱们也能够经过namenode开放的50070查看hadoop的管理网站——IP:50070. HDFS集群信息

若是没法正常访问该网站,尝试关闭50070端口的防火墙限制。另外,hadoop须要开放的端口目前没有仔细统计,既然是用做本身练习,最好仍是直接关闭防火墙好些。(systemctl stop firewalld)。到了生产环境中,这些端口的开放仍是须要具体的文档规范的,如今不必去纠结这些。

1.5 操做集群

接下来咱们往DFS文件系统中进行文件操做并运行一个简单案例。

一、在HDFS上建立一个user/zhaoyi文件夹

# hadoop fs -mkdir -p /user/zhaoyi

经过该命令咱们在HDFS文件系统中建立了/user/zhaoyi

想要学习更多的命令,请参考官方文档。

二、查看文件夹信息

# hadoop fs -ls -R /

获得以下的输出

drwxr-xr-x   - root supergroup          0 2018-04-25 23:41 /user
drwxr-xr-x   - root supergroup          0 2018-04-25 23:41 /user/zhaoyi

即咱们已经在根目录下建立了一个文件夹user以及其子文件夹zhaoyi.

你也能够经过前面提到的web访问进行查看,在最后一个菜单项utilities的下拉菜单项Browse the file system获取HDFS文件系统可视化信息。

三、删除文件夹 接下来咱们测试一下如何删除文件夹,即将user下的zhaoyi文件夹删掉

# hadoop fs -rm -r /user/zhaoyi

1.6 wordcount案例

以前咱们都是用本地文件来进行mapreduce的,此次咱们经过HDFS文件系统来帮咱们完成文件的输入与计算输出,测试案例选用wordcount。

一、在HDFS中建立一个input文件夹

# hadoop fs -mkdir /user/input

二、建立一个文件something,并往里面写入一些内容,例如

this is a beautiful flower?
yes, but I love FGO better.

三、将该文件上传到HDFS的input文件夹下

# hadoop fs -put something /user/input

你也能够多建立几个文件,并上传到input文件夹下面进行计算。

四、调用wordcount案例,输入为咱们HDFS的input文件夹,输出也在该目录下。

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

该命令前面咱们已经解释过各个参数的含义,不一样的是input的output指代的路径再也不是本地路径,而是HDFS协议的路径。

五、查看输出的结果

# hadoop fs -cat /user/output/part-r-00000

能够获得以下的输出:

FGO	1
I	1
a	1
beautiful	1
better.	1
but	1
flower?	1
is	1
love	1
this	1
yes,	1

一样,你也能够经过web管理网站查看这些文件的信息。

获得本身想要的结果以后,记得删除output文件夹,避免指定相同输出环境的计算用例会由于有同名文件夹而失败:hadoop fs -rf -r /user/output

二、搭建YARN环境

前面咱们提到过,YARN是Hadoop中负责资源调度的模块,1.x版本中甚至没有他的踪迹,可见这是2.x新增的组件。他包含了4个模块,接下来,咱们将准备在以前的基础上搭建YARN环境,建立资源管理节点(1)ResourceManager RM)以及节点管理节点(NodeManager NM)。

注意这是基于咱们1建立的HDFS环境之上的。

2.1 配置集群

注:Hadoop的配置文件都是位于/opt/module/hadoop-2.7.2/etc/hadoop下。

一、配置yarn的环境配置文件:yarn-env.sh,添加JAVA_HOME的具体路径信息

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

/opt/module/jdk1.8.0_131echo $JAVA_HOME输出的值,根据的您的环境进行设置。

二、配置yarn的配置文件: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>h132</value>
</property>

h132是我本台主机的主机名,请按您本身的主机名进行填写。一样是放在<configuration>配置节中。

三、配置mapreduce的环境配置文件,一样加入JAVA_HOME的具体信息

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

四、配置mapreduce的配置文件:mapred-site.xml,你会发现这个文件不存在。其实他有一个模板文件的:mapred-site.xml.template,将其从新命名为mapred-site.xml,而后在进行配置便可:

# mv mapred-site.xml.template mapred-site.xml

指定mapreduce从默认的local运行变为yarn上运行,往mapred-site.xml中添加:

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

查看官方文档可知mapreduce.framework.name的默认值为local,咱们如今将其修改成yarn.

至此,咱们的配置就完成了。以上步骤看起来不少,其实很简单,无非就是配置yarn以及mapreduce的相关参数。

2.2 启动集群

以前咱们已经启动了HDFS的datanode和namenode,接下来咱们启动yarn的RM(ResourceManager)以及NM(NodeManager)。

一、启动yarn的resourcemanager

# yarn-daemon.sh start resourcemanager

查看是否启动成功

# jps
9731 NameNode
10629 ResourceManager
9822 DataNode
10782 Jps

二、启动yarn的nodemanager

# yarn-daemon.sh start nodemanager

查看是否启动成功

# jps
9731 NameNode
10629 ResourceManager
10971 Jps
10877 NodeManager
9822 DataNode

2.3 集群查看

以上过程完成后,咱们的单台机器中就已经添加了yarn组件,接下来咱们查看添加yarn以后的变化,一样的,咱们能够经过jps命令查看,也能够经过web可视化界面查看。

前面咱们已经经过IP:50070查看HDFS的管理信息,接下来咱们能够经过8088端口查看集群的监控信息,包括mapreduce执行任务的具体记录等等,均可以从这个web服务中查看到。

集群监控地址

2.4 wordcount案例

接下来咱们运行wordcount案例,咱们和使用hdfs同样的操做方式便可。使用yarn处理的不一样在于其内部的处理,咱们之后会学到具体的内容,如今咱们看看运行过程当中的特色。

一、运行计算

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

和以前的没有任何区别。

二、查看网站的输出结果,咱们在任务开始的时候,不一样的刷新网站,能够看到以下的界面 yarn处理任务过程1

如今咱们看到,任务开始了,刚执行了一段。

yarn处理任务过程2 如今处理了一部份内容。

yarn处理任务过程3 任务完成。

相比较以前的HDFS处理方式,这个稍微慢了些。是由于任务调度的问题,并且目前咱们处理的东西也不多,当任务量大了以后,就能够获得其带来的实惠了。

另外,咱们也能够经过日志查看整个执行过程,好比下面这段比较有意思

FO mapreduce.Job:  map 0% reduce 0%
18/04/26 01:32:45 INFO mapreduce.Job:  map 100% reduce 0%
18/04/26 01:32:56 INFO mapreduce.Job:  map 100% reduce 100%
18/04/26 01:32:56 INFO mapreduce.Job: Job job_1524676888858_0001 completed successfully
18/04/26 01:32:56 INFO mapreduce.Job: Counters: 49

咱们能够看到mapreduce的过程。

2.5 修改本地文件存储目录

前面咱们提到,数据节点以及名称节点的数据都是存储在/tmp/下,查看/tmp下的目录能够发现,目录为tmp/hadoop-xxx(xxx为使用者用户名)。这显然不便于管理,咱们接下来学习一下如何修改此路径,将其放在咱们的/opt/module/hadoop-2.7.2路径下,方便统一管理。

一、查看官方文档,咱们能够了解到,配置存储目录的配置项位于core-site.xml中的hadoop.tmp.dir配置项,其默认值为/tmp/hadoop-${user.name},如今咱们来修改这个配置项,编辑core-site.xml,添加此配置项

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

能够看到,咱们将临时存储目录修改成/opt/module/hadoop-2.7.2/data/tmp了,接下来为了使这个配置生效,咱们须要重启集群,让集群从新读取配置文件。重启过程分为中止和启动两个步骤。

二、中止集群,按顺序依次中止各个节点:

# yarn-daemon.sh stop resourcemanager
# yarn-daemon.sh stop nodemanager
# hadoop-daemon.sh stop namenode
# hadoop-daemon.sh stop datanode

yarn-daemon.shhadoop-daemon.shshell脚本都位于/opt/module/hadoop-2.7.2/sbin目录下。

三、删除旧集群的临时目录,避免启动新集群的时候发生错误

# cd /tmp
# rm -rf hadoop-{your-user-name}

hadoop-{your-user-name}文件夹根据当前用户名命名,若是你使用root用户操做,这个文件夹会形如hadoop-root.若是你是aqua用户,该文件夹形如hadoop-aqua.

四、格式化名称节点。而后启动集群,按顺序依次启动各个节点:

# hadoop namenode -format
# hadoop-daemon.sh start namenode
# hadoop-daemon.sh start datanode
# yarn-daemon.sh start resourcemanager
# yarn-daemon.sh start nodemanager

操做的过程当中,每执行一步都不要忘了使用jps等命令查看是否达到预期的效果

如今,咱们就能够看到,临时文件夹在/opt/module/hadoop-2.7.2下面生成了,命名方式也受咱们的配置所制约。咱们查看一下当前的data的目录结构

# ls -R data
data:
tmp
data/tmp:
dfs  nm-local-dir
data/tmp/dfs:
data  name
data/tmp/dfs/data:
current  in_use.lock
data/tmp/dfs/data/current:
BP-191797622-192.168.102.132-1524740656851  VERSION
...

比较多默认生成的文件,让人眼花缭乱,具体每一个文件的用途,随着咱们学习的推动能够慢慢了解到,如今知道有这么一些文件就能够了。

接下来,咱们能够测试一下建立文件夹以及上传文件等操做是否正常便可。

五、测试集群是否正常

# hadoop fs -mkdir -p /user/zhaoyi
# touch test.txt 
# hadoop fs -put text.txt /user/zhaoyi

咱们递归建立了/user/zhaoyi文件夹,并往其中上传了一个/user/zhaoyi文件,下面咱们查看这些文件的信息便可:

# hadoop fs -ls -R /user
drwxr-xr-x   - root supergroup          0 2018-04-26 19:13 /user/zhaoyi
-rw-r--r--   1 root supergroup          0 2018-04-26 19:13 /user/zhaoyi/test.txt

能够看到,集群运行正常。

参考

  1. http://hadoop.apache.org/
  2. https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
  3. http://hadoop.apache.org/docs/r2.7.2/
相关文章
相关标签/搜索