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 的日志了。