大数据采集与处理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.3 伪分布式

Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的 Java 进程来运行,节点既作为NameNode也作为DataNode;同时,读取的是HDFS中的文件。

1解压Hadoop目录文件

复制Hadoop-3.2.2.tar.gz 到/opt/modules/pseudo目录下。

解压Hadoop-3.2.2.tar.gz,代码如图2-15所示。

图2-15 解压Hadoop目录文件

2.配置Hadoop环境变量

配置Hadoop环境变量,代码如图2-16所示。

图2-16 配置Hadoop环境变量

1)追加配置

追加配置代码如图2-17所示。

图2-17 追加配置代码

2)执行:source /etc/profile 使配置生效,验证 HADOOP_HOME 参数

验证配置代码如图2-18所示。

图2-18 验证配置代码

3)配置 Hadoop-env.sh、mapred-env.sh、yarn-env.sh 文件的 JAVA_HOME参数

配置JAVA_HOME参数的代码如图2-19所示。

图2-19 配置JAVA_HOME参数的代码

4)配置 core-site.xml文件

配置core-site.xml文件的代码如图2-20所示。

图2-20 配置core-site.xml文件的代码

[Hadoop@bigdata-senior01 ~]$ sudo vim ${HADOOP_HOME}/etc/Hadoop/core-site.xml

说明:

(1)fs.defaultFS 参数配置的是HDFS的地址。

配置HDFS地址的代码如图2-21所示。

图2-21 配置HDFS地址的代码

(2)Hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下,查看*-default.xml等默认配置文件,就可以看到很多依赖${Hadoop.tmp.dir}的配置。

默认的Hadoop.tmp.dir是/tmp/Hadoop-${user.name}。此时有个问题:NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,则系统会清空/tmp目录下的内容,导致NameNode元数据丢失。因为这是一个非常严重的问题,所以我们应该修改这个路径。

①创建临时目录,代码如图2-22所示。

图2-22 创建临时目录

②将临时目录的所有者修改为Hadoop,代码如图2-23所示。

图2-23 修改临时目录的所有者

③修改Hadoop.tmp.dir,代码如图2-24所示。

图2-24 修改Hadoop.tmp.dir

3配置、格式化、启动HDFS

1)配置hdfs-site.xml

配置hdfs-site.xml文件,代码如图2-25所示。

图2-25 配置hdfs-site.xml文件

dfs.replication 配置的是 HDFS存储时的备份数量,因为这里的伪分布式环境只有一个节点,所以这里设置为1。

2)格式化HDFS

格式化HDFS的结果如图2-26所示。

图2-26 格式化HDFS的结果

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

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

注意:

(1)格式化时,注意 Hadoop.tmp.dir 目录的权限问题,Hadoop 普通用户应该有读/写权限,可以将/opt/modules/pseudo/hadoop-3.2.2/data/tmp/ 的所有者改为 Hadoop。

[Hadoop@bigdata-senior01 Hadoop-3.2.2]$ sudo chown -R Hadoop:Hadoop /opt/data

(2)查看NameNode 格式化后的目录(如图2-27所示),格式化HDFS。

图2-27 查看NameNode格式化后的目录

说明:在真实大数据环境中,如果NameNode元数据占用的内存量达到了持久化条件,还会生成以下3个文件。

fsimage:NameNode元数据在内存满了后,存储元数据的文件。

fsimage*.md5:校验文件,用于校验fsimage的完整性。

seen_txid:Hadoop的版本。

VERSION文件里保存以下两个文件。

namespaceID:NameNode的唯一ID。

clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。

查看VERSION文件的代码及结果如图2-28所示。

图2-28 查看VERSION文件的代码及结果

(3)启动NameNode,代码及结果如图2-29所示。

图2-29 启动NameNode

(4)启动DataNode,代码及结果如图2-30所示。

图2-30 启动DataNode

(5)启动SecondaryNameNode,代码及结果如图2-31所示。

图2-31 启动SecondaryNameNode

(6)JPS命令查看是否成功启动,有结果则表明启动成功了。查看启动状态的代码及结果如图2-32所示。

图2-32 查看启动状态的代码及结果

(7)在HDFS上创建目录、上传、下载文件。

在HDFS 上创建目录,代码如图2-33所示。

图2-33 在HDFS上创建目录

上传本地文件到 HDFS上,代码如图2-34所示。

图2-34 上传本地文件到HDFS上

读取HDFS上的文件内容,代码及结果如图2-35所示。

图2-35 读取HDFS上的文件内容

从HDFS下载文件到本地,代码及结果如图2-36所示。

图2-36 从HDFS下载文件到本地

4配置和启动YARN

1)配置mapred-site.xml

编辑mapred-site.xml文件,代码如图2-37所示。

图2-37 编辑mapred-site.xml文件

添加配置参数如图2-38所示。

图2-38 添加配置参数

指定MapReduce运行在YARN框架上,代码如图2-39所示。

图2-39 指定MapRedure运行在YARN框架上

2)配置yarn-site.xml文件

配置yarn-site.xml文件如图2-40所示。

图2-40 配置yarn-site.xml文件

(1)yarn.nodemanager.aux-services 配置了YARN的默认混洗方式,选择为MapReduce 的默认混洗算法。

(2)yarn.resourcemanager.hostname 指定了 ResourceManager 运行在哪个节点上,配置ResourceManager运行参数的代码如图2-41所示。

图2-41 配置ResourceManager运行参数的代码

3)启动Resourcemanager,代码如图2-42所示

图2-42 启动ResourceManager

4)启动NodeManager,代码如图2-43所示

图2-43 启动NodeManager

5)查看是否成功启动,代码及结果如图2-44所示

图2-44 查看是否成功启动

从图2-44可以看到ResourceManager、NodeManager 已经成功启动了。

6)YARN的Web页面

YARN的Web客户端端口号是 8088,通过http://bigdata-senior01:8088可以查看。YARN的Web页面效果如图2-45所示。

5.运行MapReduce Job

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

图2-45 YARN的Web页面效果

1)创建测试用的Input文件

(1)创建输入目录,代码如图2-46所示。

图2-46 创建输入目录

(2)创建原始文件:在本地 /opt/data 目录中创建一个文件 wc.input,内容如图2-47所示。

图2-47 创建原始文件

(3)将wc.input文件上传到 HDFS 的/wordcountdemo/input目录中,代码及结果如图2-48所示。

图2-48 上传文件

2)运行WordCount MapReduce Job,代码及结果如图2-49所示

图2-49 运行WordCount MapReduce Job

3)查看输出结果目录,代码及结果如图2-50所示

图2-50 查看输出结果目录

(1)output 目录中有两个文件。_SUCCESS 文件是空文件,有这个文件说明Job执行成功。

(2)part-r-00000文件是结果文件,其中-r-说明这个文件是 Reduce 阶段产生的结果,MapReduce 程序执行时,可以没有Reduce阶段,但肯定会有Map阶段,如果没有,则Reduce 阶段的“-r-”应是“-m-”。

(3)一个Reduce 会产生一个以part-r- 开头的文件。

(4)查看输出文件内容,代码及结果如图2-51所示。

图2-51 查看输出文件内容

从图2-51可以看出结果是按照键值排好序的。

6.停止Hadoop

停止Hadoop的代码及结果如图2-52所示。

7.Hadoop 各功能模块的作用

1)HDFS模块

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

图2-52 停止Hadoop的代码及结果

2)YARN 模块

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

YARN模块是一个通用框架,不仅可以运行 MapReduce,还可以运行Spark、Storm等其他计算框架。

3)MapReduce 模块

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

8.开启历史服务

1)历史服务介绍

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

2)开启历史服务

开启历史服务的代码如图2-53所示,开启后,可以通过 Web 页面查看历史服务器。

图2-53 开启历史服务的代码

3)通过Web页面查看Job执行历史

(1)运行MapReduce任务,代码如图2-54所示。

图2-54 运行MapReduce任务

(2)Job执行中的状态如图2-55所示。

图2-55 Job执行中的状态

(3)查看Job历史,代码及结果如图2-56所示。

图2-56 查看Job历史

历史服务器的Web页面端口默认为19888,可以查看Web页面。

在Job任务页面最下面,单击Map或Reduce链接,访问其页面的详细内容。这时,我们无法查看Map或Reducede 的详细日志,这是因为没有开启日志聚集服务。

9.开启日志聚集

1)日志聚集介绍

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

2)开启日志聚集功能

(1)配置启用日志聚集功能。

Hadoop 默认不启用日志聚集功能。在 yarn-site.xml 文件里配置启用日志聚集功能,代码如图2-57所示。

图2-57 启用日志聚集功能

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

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

(2)修改配置文件参数如图2-58所示。

图2-58 修改配置文件参数

(3)重启YARN进程,代码如图2-59所示。

图2-59 重启YARN进程

(4)重启HistoryServer 进程,代码如图2-60所示。

图2-60 重启HistoryServer进程

3)测试日志聚集

运行一个 demo MapReduce,使之产生日志,代码如图2-61所示。

图2-61 测试日志聚集

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