IT技术之家

首页 > 大数据

大数据

CENTOS上的网络安全工具(九)走向Hadoop(1) SingleNode模式安装与配置_lhyzws

发布时间:2022-10-24 20:49:08 大数据 0次 标签:大数据 java hadoop
简介CentOS 8 Stream下Hadoop之SingleNode模式的安装部署...

? ? ? ? 如果只是在小型企业中构架网络安全,单机的suricata、arkime等工具基本够用了。大型的企业,必然带来更大的需要分析的数据量,如果只是粗略统计一下,提取个别典型协议的少数要素,大致SiLK也就够了,但一旦需要细致的分析观察不同协议的多种要素,则如上篇所述,数据量将大大超出单机所能承受的水平,走向分布式集群化,几乎是必然的方向。

? ? ? ? Hadoop可以算是分布式计算的地基了,大多数分布式计算平台和应用,其底层还是会使用Hadoop的组件,玩分布式,Hadoop是绕不开的一步。说起这个,十数年前机缘巧合之下选修过一门“网格计算”的课程——其实是太过粗心,选课的时候看成“网络计算”了,不过说实话内涵也差异不大,只不过主课老师知道此事以后不太高兴——也是我自己嘴瓢。那时云计算的概念才刚刚冒头,Hadoop还没有主宰天下,课程主要就是介绍各种类似的分布式系统,当然构建hadoop环境也是作业之一。那个时候构建hadoop相当麻烦,活活折腾一个星期也是至今记忆犹新,最后的结果也就是提交一个分布式程序,实在是未能引起我的兴趣。现在想想,估计也是象牙塔内,不知需求的潮头在何方罢了。如前所述,一旦把这件事放在一个领域的需求中,比如网络安全数据的分析,只要顺着需求,最终几乎必然求诸于Hadoop。回头看看,大数据为什么在电商行业找到蓬勃发展的土壤,实属因果必然。

? ? ? ? 一、Hadoop工作模式

????????网络上关于Hadoop安装的指南很多,比较头疼的一点在于Hadoop迭代版本不少,在几个大的版本之间安装配置的变化也不小,各种指南发布时间不一,配置方式各异,实在是很难判断选择。所以,为了准确起见,选择Hadoop的官方安装指南——虽然这份指南在集群化安装方面也语焉不详,但是在单节点安装上,还是具有指导意义的:

? ? ? ? 话说到这里,也就牵出来Hadoop的3种工作模式:

? ? ? ? SingleNode 单节点模式。单节点模式顾名思义,就是在一台主机上安装Hadoop的主要组件,但更重要的是,所有组件在一个Java虚拟机进程中运行。单节点模式是Hadoop的默认模式,该模式对与Hadoop的调试非常有用。

? ? ? ? Pseudo-Distributed 伪分布式模式。伪分布式模式也运行在一台主机上,不同与单节点模式的是,它运行在不同的、分离的Java虚拟机进程中——直观的区别就是,需要进行类似于分布式运行环境的配置文件编辑设置。

? ? ? ? Fully-Distributed 完全分布式模式。完全分布式模式支持从几个几点到数千个节点的Hadoop工作集群配置。

? ? ? ? 一开始我也很纳闷一个分布式平台为什么非要搞出2个非分布式工作模式。实际上,不同的工作模式有其不同的用途,更重要的是,对于新手来说,3个工作模式也恰好是理解学习Hadoop安装部署的3个阶梯。

? ? ? ? 二、SingleNode模式的安装部署

????????1. Java环境安装

? ? ? ? 从前面关于工作模式的描述可知,Hadoop依赖于Java虚拟机环境,所以部署Hadoop,最为重要的一点(在单节点模式下可能是唯一的前提),是部署正确的Java环境。

? ? ? ? 根据官方说法,也是如此:

? ? ? ? ?当然ssh在单节点模式下还用不着,后面再说。

? ? ? ?(1) Hadoop与Java版本匹配:

? ? ? ? Hadoop和Java环境都可以参考官方指示下载。

????????

?????????由于在CentOS中可以在线安装java环境,方便起见,这里仅下载了Hadoop-3.3.3:

[root@bogon ~]# wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz 
--2022-08-11 23:09:04--  https://dlcdn.apache.org/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz
正在解析主机 dlcdn.apache.org (dlcdn.apache.org)... 151.101.2.132, 2a04:4e42::644
正在连接 dlcdn.apache.org (dlcdn.apache.org)|151.101.2.132|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:645040598 (615M) [application/x-gzip]
正在保存至: “hadoop-3.3.3.tar.gz”
hadoop-3.3.3.tar.gz             0%[                                                  ]   4.58M  47.5KB/s  剩余 3h 54m

????????很大,600多MB,从官方网站上要下载几个小时,最好是下好了存好。

? ? ? ? 根据官网描述,针对Hadoop-3.3.3,Java 8是可以支持的

? ? ? ? 当然也有一些不支持的特性,不过仅仅是简单的学习部署,似乎也没有碰上过:

? ? ? ? ?(2)在CentoOS 8 Stream中安装Java 1.8.0

????????epel-release安装

????????在CentOS 8 中,可以在安装epel包的前提下,直接安装Java1.8.0。如同前面的离线安装方法一样,我们可以先下载安装包构建repo库,安装的时候指定对应的库进行安装。

[root@bogon ~]# yum install epel-release -y
CentOS Stream 8 - AppStream                                       3.5 MB/s |  24 MB     00:07    
CentOS Stream 8 - BaseOS                                          5.4 MB/s |  25 MB     00:04    
CentOS Stream 8 - Extras                                           10 kB/s |  18 kB     00:01    
CentOS Stream 8 - Extras common packages                          2.9 kB/s | 4.6 kB     00:01    
依赖关系解决。
==================================================================================================
 软件包                    架构                版本                     仓库                 大小
==================================================================================================
安装:
 epel-release              noarch              8-11.el8                 extras               24 k

事务概要
==================================================================================================
安装  1 软件包

总下载:24 k
安装大小:35 k
下载软件包:
epel-release-8-11.el8.noarch.rpm                                   33 kB/s |  24 kB     00:00    
--------------------------------------------------------------------------------------------------
总计                                                               15 kB/s |  24 kB     00:01     
CentOS Stream 8 - Extras                                          1.6 MB/s | 1.6 kB     00:00    
导入 GPG 公钥 0x8483C65D:
 Userid: "CentOS (CentOS Official Signing Key) <security@centos.org>"
 指纹: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 来自: /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
导入公钥成功
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                                                   1/1 
  安装    : epel-release-8-11.el8.noarch                                                      1/1 
  运行脚本: epel-release-8-11.el8.noarch                                                      1/1 
  验证    : epel-release-8-11.el8.noarch                                                      1/1 

已安装:
  epel-release-8-11.el8.noarch                                                                    

完毕!

????????检查Java环境

????????在安装Java环境之前,首先需要检查CentOS是否自带了Java,如果自带,可能存在版本不符合情况,最好是先用rpm -e命令删除掉。

[root@bogon share]# java
bash: java: 未找到命令...
[root@bogon share]# rpm -qa|grep jdk
[root@bogon share]# rpm -qa|grep java

????????确认没有Java环境后,可以使用yum list一下可以安装的Java-1.8.0组件,这些都是需要安装的。? ? ?

[root@bogon share]# yum list java-1.8*
上次元数据过期检查:0:19:09 前,执行于 2022年07月13日 星期三 09时56分06秒。
可安装的软件包
java-1.8.0-openjdk.x86_64                              1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-accessibility.x86_64                1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-demo.x86_64                         1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-devel.x86_64                        1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-headless.x86_64                     1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-headless-slowdebug.x86_64           1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-javadoc.noarch                      1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-javadoc-zip.noarch                  1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-slowdebug.x86_64                    1:1.8.0.322.b06-11.el8           appstream
java-1.8.0-openjdk-src.x86_64                          1:1.8.0.322.b06-11.el8           appstream

? ? ? ? 使用yum downloader下载,以便后面离线安装。

[root@bogon share]# yumdownloader java-1.8.0-openjdk*
Extra Packages for Enterprise Linux 8 - x86_64                    1.8 MB/s |  13 MB     00:07    
Extra Packages for Enterprise Linux Modular 8 - x86_64            319 kB/s | 465 kB     00:01    
(1/10): java-1.8.0-openjdk-accessibility-1.8.0.322.b06-11.el8.x86 732 kB/s | 109 kB     00:00    
(2/10): java-1.8.0-openjdk-1.8.0.322.b06-11.el8.x86_64.rpm        906 kB/s | 346 kB     00:00    
(3/10): java-1.8.0-openjdk-demo-1.8.0.322.b06-11.el8.x86_64.rpm   1.5 MB/s | 2.0 MB     00:01    
(4/10): java-1.8.0-openjdk-devel-1.8.0.322.b06-11.el8.x86_64.rpm  3.8 MB/s | 9.8 MB     00:02    
(5/10): java-1.8.0-openjdk-javadoc-1.8.0.322.b06-11.el8.noarch.rp 3.1 MB/s |  15 MB     00:04    
(6/10): java-1.8.0-openjdk-headless-1.8.0.322.b06-11.el8.x86_64.r 3.4 MB/s |  34 MB     00:10    
(7/10): java-1.8.0-openjdk-slowdebug-1.8.0.322.b06-11.el8.x86_64. 1.3 MB/s | 351 kB     00:00    
(8/10): java-1.8.0-openjdk-headless-slowdebug-1.8.0.322.b06-11.el 3.2 MB/s |  36 MB     00:11    
(9/10): java-1.8.0-openjdk-javadoc-zip-1.8.0.322.b06-11.el8.noarc 4.2 MB/s |  42 MB     00:09    
(10/10): java-1.8.0-openjdk-src-1.8.0.322.b06-11.el8.x86_64.rpm   5.4 MB/s |  46 MB     00:08  

????????Java在线安装

????????估计是epel的某些配置的缘故,实际java的离线安装可能会存在一些问题,由于我们关注点并不在如何构建完备的repo库,所以偷懒取巧了——这里首先在线安装一下,看看问题在哪里:

[root@bogon share]# yum install java-1.8.0-openjdk* -y
上次元数据过期检查:0:02:56 前,执行于 2022年08月12日 星期五 01时09分48秒。
依赖关系解决。
==================================================================================================
 软件包                              架构   版本                               仓库          大小
==================================================================================================
安装:
 java-1.8.0-openjdk                  x86_64 1:1.8.0.322.b06-11.el8             @commandline 346 k
 java-1.8.0-openjdk-accessibility    x86_64 1:1.8.0.322.b06-11.el8             @commandline 109 k
 java-1.8.0-openjdk-demo             x86_64 1:1.8.0.322.b06-11.el8             @commandline 2.0 M
 java-1.8.0-openjdk-devel            x86_64 1:1.8.0.322.b06-11.el8             @commandline 9.8 M
 java-1.8.0-openjdk-headless         x86_64 1:1.8.0.322.b06-11.el8             @commandline  34 M
 java-1.8.0-openjdk-headless-slowdebug
                                     x86_64 1:1.8.0.322.b06-11.el8             @commandline  36 M
 java-1.8.0-openjdk-javadoc          noarch 1:1.8.0.322.b06-11.el8             @commandline  15 M
 java-1.8.0-openjdk-javadoc-zip      noarch 1:1.8.0.322.b06-11.el8             @commandline  42 M
 java-1.8.0-openjdk-slowdebug        x86_64 1:1.8.0.322.b06-11.el8             @commandline 351 k
 java-1.8.0-openjdk-src              x86_64 1:1.8.0.322.b06-11.el8             @commandline  46 M
安装依赖关系:
 copy-jdk-configs                    noarch 4.0-2.el8                          appstream     31 k
 java-atk-wrapper                    x86_64 0.33.2-6.el8                       appstream     86 k
 javapackages-filesystem             noarch 5.3.0-1.module_el8.0.0+11+5b8c10bd appstream     30 k
 lksctp-tools                        x86_64 1.0.18-3.el8                       baseos       100 k
 ttmkfdir                            x86_64 3.0.9-54.el8                       appstream     62 k
 tzdata-java                         noarch 2022a-2.el8                        appstream    191 k
 xorg-x11-fonts-Type1                noarch 7.5-19.el8                         appstream    522 k
启用模块流:
 javapackages-runtime                       201801                                               

事务概要
==================================================================================================
安装  17 软件包

总计:186 M
总下载:1.0 M
安装大小:669 M
下载软件包:
(1/7): copy-jdk-configs-4.0-2.el8.noarch.rpm                      128 kB/s |  31 kB     00:00    
(2/7): javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd  97 kB/s |  30 kB     00:00    
(3/7): java-atk-wrapper-0.33.2-6.el8.x86_64.rpm                   254 kB/s |  86 kB     00:00    
(4/7): ttmkfdir-3.0.9-54.el8.x86_64.rpm                           224 kB/s |  62 kB     00:00    
(5/7): tzdata-java-2022a-2.el8.noarch.rpm                         560 kB/s | 191 kB     00:00    
(6/7): lksctp-tools-1.0.18-3.el8.x86_64.rpm                       504 kB/s | 100 kB     00:00    
(7/7): xorg-x11-fonts-Type1-7.5-19.el8.noarch.rpm                 992 kB/s | 522 kB     00:00    
--------------------------------------------------------------------------------------------------
总计                                                              593 kB/s | 1.0 MB     00:01     
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  运行脚本: copy-jdk-configs-4.0-2.el8.noarch                                                 1/1 
  运行脚本: java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64                         1/1 
  准备中  :                                                                                   1/1 
  安装    : javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch                1/17 
  安装    : lksctp-tools-1.0.18-3.el8.x86_64                                                 2/17 
  运行脚本: lksctp-tools-1.0.18-3.el8.x86_64                                                 2/17 
  安装    : tzdata-java-2022a-2.el8.noarch                                                   3/17 
  安装    : copy-jdk-configs-4.0-2.el8.noarch                                                4/17 
  安装    : java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64                        5/17 
  运行脚本: java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64                        5/17 
  安装    : java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el8.x86_64              6/17 
  运行脚本: java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el8.x86_64              6/17 
  安装    : ttmkfdir-3.0.9-54.el8.x86_64                                                     7/17 
  安装    : xorg-x11-fonts-Type1-7.5-19.el8.noarch                                           8/17 
  运行脚本: xorg-x11-fonts-Type1-7.5-19.el8.noarch                                           8/17 
  安装    : java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64                                 9/17 
  运行脚本: java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64                                 9/17 
  安装    : java-atk-wrapper-0.33.2-6.el8.x86_64                                            10/17 
  安装    : java-1.8.0-openjdk-accessibility-1:1.8.0.322.b06-11.el8.x86_64                  11/17 
  安装    : java-1.8.0-openjdk-demo-1:1.8.0.322.b06-11.el8.x86_64                           12/17 
  安装    : java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64                          13/17 
  运行脚本: java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64                          13/17 
  安装    : java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64                      14/17 
  运行脚本: java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64                      14/17 
  安装    : java-1.8.0-openjdk-src-1:1.8.0.322.b06-11.el8.x86_64                            15/17 
  安装    : java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch                        16/17 
  安装    : java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarch                    17/17 
  运行脚本: copy-jdk-configs-4.0-2.el8.noarch                                               17/17 
  运行脚本: java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64                       17/17 
  运行脚本: java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el8.x86_64             17/17 
  运行脚本: java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64                                17/17 
  运行脚本: java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64                          17/17 
  运行脚本: java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64                      17/17 
  运行脚本: java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch                        17/17 
  运行脚本: java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarch                    17/17 
  验证    : copy-jdk-configs-4.0-2.el8.noarch                                                1/17 
  验证    : java-atk-wrapper-0.33.2-6.el8.x86_64                                             2/17 
  验证    : javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch                3/17 
  验证    : ttmkfdir-3.0.9-54.el8.x86_64                                                     4/17 
  验证    : tzdata-java-2022a-2.el8.noarch                                                   5/17 
  验证    : xorg-x11-fonts-Type1-7.5-19.el8.noarch                                           6/17 
  验证    : lksctp-tools-1.0.18-3.el8.x86_64                                                 7/17 
  验证    : java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64                                 8/17 
  验证    : java-1.8.0-openjdk-accessibility-1:1.8.0.322.b06-11.el8.x86_64                   9/17 
  验证    : java-1.8.0-openjdk-demo-1:1.8.0.322.b06-11.el8.x86_64                           10/17 
  验证    : java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64                          11/17 
  验证    : java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64                       12/17 
  验证    : java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el8.x86_64             13/17 
  验证    : java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch                        14/17 
  验证    : java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarch                    15/17 
  验证    : java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64                      16/17 
  验证    : java-1.8.0-openjdk-src-1:1.8.0.322.b06-11.el8.x86_64                            17/17 

已安装:
  copy-jdk-configs-4.0-2.el8.noarch                                                               
  java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64                                                
  java-1.8.0-openjdk-accessibility-1:1.8.0.322.b06-11.el8.x86_64                                  
  java-1.8.0-openjdk-demo-1:1.8.0.322.b06-11.el8.x86_64                                           
  java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64                                          
  java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64                                       
  java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el8.x86_64                             
  java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch                                        
  java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarch                                    
  java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64                                      
  java-1.8.0-openjdk-src-1:1.8.0.322.b06-11.el8.x86_64                                            
  java-atk-wrapper-0.33.2-6.el8.x86_64                                                            
  javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch                               
  lksctp-tools-1.0.18-3.el8.x86_64                                                                
  ttmkfdir-3.0.9-54.el8.x86_64                                                                    
  tzdata-java-2022a-2.el8.noarch                                                                  
  xorg-x11-fonts-Type1-7.5-19.el8.noarch                                                          

完毕!

? ? ? ? 离线安装Java环境

? ? ? ? 如上文所说,直接使用createrepo的方法并不顺利:

[root@localhost ~]# yum install java-1.8.0-openjdk* -y
上次元数据过期检查:0:05:44 前,执行于 2022年08月12日 星期五 01时44分14秒。
依赖关系解决。
================================================================================
 软件包                                架构   版本                   仓库  大小
================================================================================
安装:
 java-1.8.0-openjdk                    x86_64 1:1.8.0.322.b06-11.el8 base 346 k
 java-1.8.0-openjdk-accessibility      x86_64 1:1.8.0.322.b06-11.el8 base 109 k
 java-1.8.0-openjdk-demo               x86_64 1:1.8.0.322.b06-11.el8 base 2.0 M
 java-1.8.0-openjdk-devel              x86_64 1:1.8.0.322.b06-11.el8 base 9.8 M
 java-1.8.0-openjdk-headless           x86_64 1:1.8.0.322.b06-11.el8 base  34 M
 java-1.8.0-openjdk-headless-slowdebug x86_64 1:1.8.0.322.b06-11.el8 base  36 M
 java-1.8.0-openjdk-javadoc            noarch 1:1.8.0.322.b06-11.el8 base  15 M
 java-1.8.0-openjdk-javadoc-zip        noarch 1:1.8.0.322.b06-11.el8 base  42 M
 java-1.8.0-openjdk-slowdebug          x86_64 1:1.8.0.322.b06-11.el8 base 351 k
 java-1.8.0-openjdk-src                x86_64 1:1.8.0.322.b06-11.el8 base  46 M
安装依赖关系:
 copy-jdk-configs                      noarch 4.0-2.el8              base  31 k
 java-atk-wrapper                      x86_64 0.33.2-6.el8           base  86 k
 javapackages-filesystem               noarch 5.3.0-1.module_el8.0.0+11+5b8c10bd
                                                                     base  30 k
 lksctp-tools                          x86_64 1.0.18-3.el8           base 100 k
 ttmkfdir                              x86_64 3.0.9-54.el8           base  62 k
 tzdata-java                           noarch 2022a-2.el8            base 191 k
 xorg-x11-fonts-Type1                  noarch 7.5-19.el8             base 522 k

事务概要
================================================================================
安装  17 软件包

总计:186 M
安装大小:669 M
下载软件包:
运行事务检查
对于模块软件包 'javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch' 没有可用的模块元数据,它将不能被安装至此系统上
错误:对于模块软件包没有可用的模块元数据

????????对比yumdownloader下载和实际安装过程,容易发现真正的安装过程中还安装了7个依赖项?copy-jdk-configs、?java-atk-wrapper、?javapackages-filesystem、lksctp-tools、ttmkfdir ? ? ? ? ? ? ? 、tzdata-java、xorg-x11-fonts-Type1。但在离线安装过程中,自建的repodata没有识别这7个依赖项,也就是说,这7个包是需要手动下载和安装的。? ?【具体是何原因,此处也没有深究,如有知晓,望不吝赐教】

? ? ? ? 所以,依次在在线环境中下载下来:

[root@bogon share]# yumdownloader copy-jdk-configs-4.0-2.el8.noarch
上次元数据过期检查:0:18:02 前,执行于 2022年08月12日 星期五 01时09分48秒。
copy-jdk-configs-4.0-2.el8.noarch.rpm                             592 kB/s |  31 kB     00:00    
[root@bogon share]# yumdownloader javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch
上次元数据过期检查:0:18:30 前,执行于 2022年08月12日 星期五 01时09分48秒。
javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch 343 kB/s |  30 kB     00:00    
[root@bogon share]# yumdownloader lksctp-tools-1.0.18-3.el8.x86_64
上次元数据过期检查:0:18:47 前,执行于 2022年08月12日 星期五 01时09分48秒。
lksctp-tools-1.0.18-3.el8.x86_64.rpm                              977 kB/s | 100 kB     00:00    
[root@bogon share]# yumdownloader tzdata-java-2022a-2.el8.noarch
上次元数据过期检查:0:19:07 前,执行于 2022年08月12日 星期五 01时09分48秒。
tzdata-java-2022a-2.el8.noarch.rpm                                1.0 MB/s | 191 kB     00:00    
[root@bogon share]# yumdownloader xorg-x11-fonts-Type1-7.5-19.el8.noarch
上次元数据过期检查:0:19:41 前,执行于 2022年08月12日 星期五 01时09分48秒。
xorg-x11-fonts-Type1-7.5-19.el8.noarch.rpm                        1.1 MB/s | 522 kB     00:00    
[root@bogon share]# yumdownloader ttmkfdir-3.0.9-54.el8.x86_64
上次元数据过期检查:0:20:47 前,执行于 2022年08月12日 星期五 01时09分48秒。
ttmkfdir-3.0.9-54.el8.x86_64.rpm                                  675 kB/s |  62 kB     00:00    
[root@bogon share]# yumdownloader java-atk-wrapper-0.33.2-6.el8.x86_64
上次元数据过期检查:0:21:34 前,执行于 2022年08月12日 星期五 01时09分48秒。
java-atk-wrapper-0.33.2-6.el8.x86_64.rpm                          373 kB/s |  86 kB     00:00    
[root@bogon share]# 

? ? ? ? 对这7个依赖包中除java-atk-wrapper外的6个,使用rpm命令逐次安装:

[root@bogon share]# rpm -ivh copy-jdk-configs-4.0-2.el8.noarch.rpm 
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:copy-jdk-configs-4.0-2.el8       ################################# [100%]
[root@bogon share]# rpm -ivh ttmkfdir-3.0.9-54.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:ttmkfdir-3.0.9-54.el8            ################################# [100%]
[root@bogon share]# rpm -ivh tzdata-java-2022a-2.el8.noarch.rpm 
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:tzdata-java-2022a-2.el8          ################################# [100%]
[root@bogon share]# rpm -ivh xorg-x11-fonts-Type1-7.5-19.el8.noarch.rpm 
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:xorg-x11-fonts-Type1-7.5-19.el8  ################################# [100%]
[root@bogon share]# rpm -ivh lksctp-tools-1.0.18-3.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:lksctp-tools-1.0.18-3.el8        ################################# [100%]
[root@bogon share]# rpm -ivh javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch.rpm 
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:javapackages-filesystem-5.3.0-1.m################################# [100%]

? ? ? ? 然后安装Java:

[root@bogon share]# yum install java-1.8.0-openjdk* -y
上次元数据过期检查:0:16:42 前,执行于 2022年08月12日 星期五 01时44分14秒。
依赖关系解决。
================================================================================
 软件包                        架构   版本                   仓库          大小
================================================================================
安装:
 java-1.8.0-openjdk            x86_64 1:1.8.0.322.b06-11.el8 @commandline 346 k
 java-1.8.0-openjdk-accessibility
                               x86_64 1:1.8.0.322.b06-11.el8 @commandline 109 k
 java-1.8.0-openjdk-demo       x86_64 1:1.8.0.322.b06-11.el8 @commandline 2.0 M
 java-1.8.0-openjdk-devel      x86_64 1:1.8.0.322.b06-11.el8 @commandline 9.8 M
 java-1.8.0-openjdk-headless   x86_64 1:1.8.0.322.b06-11.el8 @commandline  34 M
 java-1.8.0-openjdk-headless-slowdebug
                               x86_64 1:1.8.0.322.b06-11.el8 @commandline  36 M
 java-1.8.0-openjdk-javadoc    noarch 1:1.8.0.322.b06-11.el8 @commandline  15 M
 java-1.8.0-openjdk-javadoc-zip
                               noarch 1:1.8.0.322.b06-11.el8 @commandline  42 M
 java-1.8.0-openjdk-slowdebug  x86_64 1:1.8.0.322.b06-11.el8 @commandline 351 k
 java-1.8.0-openjdk-src        x86_64 1:1.8.0.322.b06-11.el8 @commandline  46 M
安装依赖关系:
 java-atk-wrapper              x86_64 0.33.2-6.el8           base          86 k

事务概要
================================================================================
安装  11 软件包

总计:185 M
安装大小:667 M
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  运行脚本: java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64       1/1 
  准备中  :                                                                 1/1 
  安装    : java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64      1/11 
  运行脚本: java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64      1/11 
  安装    : java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64               2/11 
  运行脚本: java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64               2/11 
  安装    : java-atk-wrapper-0.33.2-6.el8.x86_64                           3/11 
  安装    : java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el    4/11 
  运行脚本: java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el    4/11 
  安装    : java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64     5/11 
  运行脚本: java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64     5/11 
  安装    : java-1.8.0-openjdk-accessibility-1:1.8.0.322.b06-11.el8.x86    6/11 
  安装    : java-1.8.0-openjdk-demo-1:1.8.0.322.b06-11.el8.x86_64          7/11 
  安装    : java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64         8/11 
  运行脚本: java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64         8/11 
  安装    : java-1.8.0-openjdk-src-1:1.8.0.322.b06-11.el8.x86_64           9/11 
  安装    : java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarc   10/11 
  安装    : java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch      11/11 
  运行脚本: java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64     11/11 
  运行脚本: java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64              11/11 
  运行脚本: java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el   11/11 
  运行脚本: java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64    11/11 
  运行脚本: java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64        11/11 
  运行脚本: java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarc   11/11 
  运行脚本: java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch      11/11 
  验证    : java-atk-wrapper-0.33.2-6.el8.x86_64                           1/11 
  验证    : java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64               2/11 
  验证    : java-1.8.0-openjdk-accessibility-1:1.8.0.322.b06-11.el8.x86    3/11 
  验证    : java-1.8.0-openjdk-demo-1:1.8.0.322.b06-11.el8.x86_64          4/11 
  验证    : java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64         5/11 
  验证    : java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64      6/11 
  验证    : java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el    7/11 
  验证    : java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch       8/11 
  验证    : java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarc    9/11 
  验证    : java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64    10/11 
  验证    : java-1.8.0-openjdk-src-1:1.8.0.322.b06-11.el8.x86_64          11/11 

已安装:
  java-1.8.0-openjdk-1:1.8.0.322.b06-11.el8.x86_64                              
  java-1.8.0-openjdk-accessibility-1:1.8.0.322.b06-11.el8.x86_64                
  java-1.8.0-openjdk-demo-1:1.8.0.322.b06-11.el8.x86_64                         
  java-1.8.0-openjdk-devel-1:1.8.0.322.b06-11.el8.x86_64                        
  java-1.8.0-openjdk-headless-1:1.8.0.322.b06-11.el8.x86_64                     
  java-1.8.0-openjdk-headless-slowdebug-1:1.8.0.322.b06-11.el8.x86_64           
  java-1.8.0-openjdk-javadoc-1:1.8.0.322.b06-11.el8.noarch                      
  java-1.8.0-openjdk-javadoc-zip-1:1.8.0.322.b06-11.el8.noarch                  
  java-1.8.0-openjdk-slowdebug-1:1.8.0.322.b06-11.el8.x86_64                    
  java-1.8.0-openjdk-src-1:1.8.0.322.b06-11.el8.x86_64                          
  java-atk-wrapper-0.33.2-6.el8.x86_64                                          

完毕!
[root@bogon share]# 

????????这次能够比较顺利的安装,并且把java-atk-wrpper一并安装上。

? ? ? ? 检查安装是否成功

????????安装完成后,执行一下java,并查看java的路径,以确认安装成功:

[root@bogon share]# which java
/usr/bin/java
[root@bogon share]# java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
[root@bogon share]# 

? ? ? ? 2. 解压并配置Hadoop

? ?? ? ?单节点下,Hadoop的安装配置相对简单,核心其实就配置Java环境这一点。

? ? ? ? (1)解压Hadoop

????????解压之前下载的hadoop的压缩包:

[root@bogon ~]# pwd
/root
[root@bogon ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  initial-setup-ks.cfg
模板  图片  下载  桌面  share
[root@bogon ~]# tar zxvf share/hadoop-3.3.3.tar.gz
…………
…………
[root@bogon ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  initial-setup-ks.cfg
模板  图片  下载  桌面  hadoop-3.3.3     share

? ? ? ? 方便起见,更改解压出来的目录名称为hadoop:

[root@bogon ~]# mv hadoop-3.3.3 hadoop
[root@bogon ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  initial-setup-ks.cfg
模板  图片  下载  桌面  hadoop           share
[root@bogon ~]# 

? ? ? ? (2)配置Hadoop的Java环境

? ? ? ? 从前面执行which java的命令可得到java的工作目录为/usr/bin/java,所以需要编辑hadoop安装目录下的etc/hadoop/hadoop-env.sh文件。

[root@bogon ~]# cd hadoop/
[root@bogon hadoop]# ls
bin  include  libexec         licenses-binary  NOTICE-binary  README.txt  share
etc  lib      LICENSE-binary  LICENSE.txt      NOTICE.txt     sbin
[root@bogon hadoop]# cd etc
[root@bogon etc]# cd hadoop/
[root@bogon hadoop]# pwd
/root/hadoop/etc/hadoop
[root@bogon hadoop]# ls
capacity-scheduler.xml            kms-log4j.properties
configuration.xsl                 kms-site.xml
container-executor.cfg            log4j.properties
core-site.xml                     mapred-env.cmd
hadoop-env.cmd                    mapred-env.sh
hadoop-env.sh                     mapred-queues.xml.template
hadoop-metrics2.properties        mapred-site.xml
hadoop-policy.xml                 shellprofile.d
hadoop-user-functions.sh.example  ssl-client.xml.example
hdfs-rbf-site.xml                 ssl-server.xml.example
hdfs-site.xml                     user_ec_policies.xml.template
httpfs-env.sh                     workers
httpfs-log4j.properties           yarn-env.cmd
httpfs-site.xml                   yarn-env.sh
kms-acls.xml                      yarnservice-log4j.properties
kms-env.sh                        yarn-site.xml
[root@bogon hadoop]# vim hadoop-env.sh 

????????将其中注释的export JAVA_HOME一行解除注释,并设置为对应的java目录,注意bin不要有,设为/usr就行,hadoop的配置文件会自动加上bin这一级的目录。

###
# Generic settings for HADOOP
###

# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/usr

# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=

# Location of Hadoop's configuration information.  i.e., where this
# file is living. If this is not defined, Hadoop will attempt to
# locate it based upon its execution path.

? ? ? ? 配置完成后在hadoop安装目录下执行bin/hadoop,如果java环境配置有错,则会报错,比如多加了bin目录的情况下:

[root@bogon hadoop]# bin/hadoop
ERROR: /usr/bin/bin/java is not executable.

? ? ? ? 正确情况下,应该会给出hadoop的帮助:

[root@bogon hadoop]# bin/hadoop
Usage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
  where CLASSNAME is a user-provided Java class

  OPTIONS is none or any of:

buildpaths                       attempt to add class files from build tree
--config dir                     Hadoop config directory
--debug                          turn on shell script debug mode
--help                           usage information
hostnames list[,of,host,names]   hosts to use in slave mode
hosts filename                   list of hosts to use in slave mode
loglevel level                   set the log4j level for this command
workers                          turn on worker mode

  SUBCOMMAND is one of:


    Admin Commands:

daemonlog     get/set the log level for each daemon

    Client Commands:

archive       create a Hadoop archive
checknative   check native Hadoop and compression libraries availability
classpath     prints the class path needed to get the Hadoop jar and the
              required libraries
conftest      validate configuration XML files
credential    interact with credential providers
distch        distributed metadata changer
distcp        copy file or directories recursively
dtutil        operations related to delegation tokens
envvars       display computed Hadoop environment variables
fs            run a generic filesystem user client
gridmix       submit a mix of synthetic job, modeling a profiled from
              production load
jar <jar>     run a jar file. NOTE: please use "yarn jar" to launch YARN
              applications, not this command.
jnipath       prints the java.library.path
kdiag         Diagnose Kerberos Problems
kerbname      show auth_to_local principal conversion
key           manage keys via the KeyProvider
rumenfolder   scale a rumen input trace
rumentrace    convert logs into a rumen trace
s3guard       manage metadata on S3
trace         view and modify Hadoop tracing settings
version       print the version

    Daemon Commands:

kms           run KMS, the Key Management Server
registrydns   run the registry DNS server

SUBCOMMAND may print help when invoked w/o parameters or with -h.

????????3.执行示例程序

? ? ? ? 在hadoop安装目录下的share/hadoop/mapreduce子目录下,有一些标准的mapreduce示例,我们可以用它来进一步检查hadoop是否已经安装好。以经典的正则命中统计为例。

????????(1)准备输入文件夹

? ? ? ? 将etc/hadoop子目录下的xml作为单词统计的输入材料,在hadoop安装目录下构建一个input目录,把这些xml文件拷贝进去。

[root@bogon hadoop]# mkdir input
[root@bogon hadoop]# cp etc/hadoop/*.xml input
[root@bogon hadoop]# ls input
capacity-scheduler.xml  hadoop-policy.xml  hdfs-site.xml    kms-acls.xml  mapred-site.xml
core-site.xml           hdfs-rbf-site.xml  httpfs-site.xml  kms-site.xml  yarn-site.xml

? ? ? ? (2)执行示例

[root@bogon hadoop]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar grep input output 'dfs[a-z.]+'

? ? ? ? hadoop 使用 jar作为参数时,指运行一个jar文件,后跟jar文件的地址,再其后是jar文件mapreduce程序的参数了,大意包括input路径,output路径,然后是grep一个正则表达式。即以dfs打头跟随多个a到z中任意字符的模板进行匹配。

????????输出信息很多,大致如下,这里就不全贴了:

[root@bogon hadoop]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar grep input output 'dfs[a-z.]+'
2022-08-12 08:48:15,446 INFO impl.MetricsConfig: Loaded properties from hadoop-metrics2.properties
2022-08-12 08:48:15,527 INFO impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s).

……………………………………

2022-08-12 08:48:16,017 INFO mapred.MapTask: kvstart = 26214396(104857584); kvend = 26214396(104857584); length = 1/6553600
2022-08-12 08:48:16,023 INFO mapred.MapTask: Finished spill 0
2022-08-12 08:48:16,031 INFO mapred.Task: Task:attempt_local1761871804_0001_m_000000_0 is done. And is in the process of committing
2022-08-12 08:48:16,032 INFO mapred.LocalJobRunner: map
2022-08-12 08:48:16,032 INFO mapred.Task: Task 'attempt_local1761871804_0001_m_000000_0' done.
2022-08-12 08:48:16,036 INFO mapred.Task: Final Counters for attempt_local1761871804_0001_m_000000_0: Counters: 18
	File System Counters
		FILE: Number of bytes read=294005
		FILE: Number of bytes written=920614
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
	Map-Reduce Framework
		Map input records=275
		Map output records=1
		Map output bytes=17
		Map output materialized bytes=25
		Input split bytes=106
		Combine input records=1
		Combine output records=1
		Spilled Records=1
		Failed Shuffles=0
		Merged Map outputs=0
		GC time elapsed (ms)=0
		Total committed heap usage (bytes)=214433792
	File Input Format Counters 
		Bytes Read=11765
2022-08-12 08:48:16,036 INFO mapred.LocalJobRunner: Finishing task: attempt_local1761871804_0001_m_000000_0

……………………………………

2022-08-12 08:48:17,935 INFO mapreduce.Job:  map 100% reduce 100%
2022-08-12 08:48:17,936 INFO mapreduce.Job: Job job_local404996045_0002 completed successfully
2022-08-12 08:48:17,942 INFO mapreduce.Job: Counters: 30
	File System Counters
		FILE: Number of bytes read=1200994
		FILE: Number of bytes written=3672544
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
	Map-Reduce Framework
		Map input records=1
		Map output records=1
		Map output bytes=17
		Map output materialized bytes=25
		Input split bytes=116
		Combine input records=0
		Combine output records=0
		Reduce input groups=1
		Reduce shuffle bytes=25
		Reduce input records=1
		Reduce output records=1
		Spilled Records=2
		Shuffled Maps =1
		Failed Shuffles=0
		Merged Map outputs=1
		GC time elapsed (ms)=0
		Total committed heap usage (bytes)=656408576
	Shuffle Errors
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters 
		Bytes Read=123
	File Output Format Counters 
		Bytes Written=23
[root@bogon hadoop]# 

? ? ? ? cat一下output下的输出,结果如下:

[root@bogon hadoop]# ls output
part-r-00000  _SUCCESS
[root@bogon hadoop]# cat output/*
1	dfsadmin
[root@bogon hadoop]# 

? ? ? ? 基本上到这一步就可以确定Singlenode的hadoop安装成功。

? ? ? ? (3)执行示例的解析

? ? ? ? 现在还是需要弄明白一个问题,刚才执行的那一大串究竟是在干啥?

? ? ? ? 把share/hadoop/mapreduce下的hadoop-mapreduce-examples-3.3.3.jar文件解压出来看看:

? ? ? ? 容易看出,实际grep参数的含义,就是执行jar文件中的Grep.class,而这个Grep.class的源文件,就在share/hadoop/mapreduce/sources下的hadoop-mapreduce-examples-3.3.3-sources.jar中。同样,解压弄出来后,找到Grep.java文件,其中的内容如下:

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.hadoop.examples;

import java.util.Random;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.map.InverseMapper;
import org.apache.hadoop.mapreduce.lib.map.RegexMapper;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
import org.apache.hadoop.mapreduce.lib.reduce.LongSumReducer;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/* Extracts matching regexs from input files and counts them. */
这里注释给出了该类实现的功能,即根据正则从输入文件中匹配,并计数。
Grep类继承自Configured,实现Tool接口
public class Grep extends Configured implements Tool {
  private Grep() {}                               // singleton

  public int run(String[] args) throws Exception {
    if (args.length < 3) {
      System.out.println("Grep <inDir> <outDir> <regex> [<group>]");    这里能够看出Grep的参数要求,和之前我们输入时一致的。如果输入参数有错,这里会报错并退出。
      ToolRunner.printGenericCommandUsage(System.out);
      return 2;
    }

    Path tempDir =
      new Path("grep-temp-"+
          Integer.toString(new Random().nextInt(Integer.MAX_VALUE)));

    Configuration conf = getConf();
    conf.set(RegexMapper.PATTERN, args[2]);
    if (args.length == 4)
      conf.set(RegexMapper.GROUP, args[3]);

    Job grepJob = Job.getInstance(conf);
    
    try {
      
      grepJob.setJobName("grep-search");
      grepJob.setJarByClass(Grep.class);

      FileInputFormat.setInputPaths(grepJob, args[0]);

      grepJob.setMapperClass(RegexMapper.class);

      grepJob.setCombinerClass(LongSumReducer.class);
      grepJob.setReducerClass(LongSumReducer.class);

      FileOutputFormat.setOutputPath(grepJob, tempDir);
      grepJob.setOutputFormatClass(SequenceFileOutputFormat.class);
      grepJob.setOutputKeyClass(Text.class);
      grepJob.setOutputValueClass(LongWritable.class);

      grepJob.waitForCompletion(true);

      Job sortJob = Job.getInstance(conf);
      sortJob.setJobName("grep-sort");
      sortJob.setJarByClass(Grep.class);

      FileInputFormat.setInputPaths(sortJob, tempDir);
      sortJob.setInputFormatClass(SequenceFileInputFormat.class);

      sortJob.setMapperClass(InverseMapper.class);

      sortJob.setNumReduceTasks(1);                 // write a single file
      FileOutputFormat.setOutputPath(sortJob, new Path(args[1]));
      sortJob.setSortComparatorClass(          // sort by decreasing freq
        LongWritable.DecreasingComparator.class);

      sortJob.waitForCompletion(true);
    }
    finally {
      FileSystem.get(conf).delete(tempDir, true);
    }
    return 0;
  }

  public static void main(String[] args) throws Exception {
    int res = ToolRunner.run(new Configuration(), new Grep(), args);
    System.exit(res);
  }

}

?????????具体MapReduce程序的内容留待后面再说。这里,只需要知道,Grep实际是继承了Configured类并实现了Tool接口,这样就可以使用ToolRunner直接调用起来,并且,内部通过名为GrebJob的Job对象执行了正则类的内部MR操作,通过名为sortJob的Job对象执行了排序操作后输出结果。

? ? ? ? 本来打算一文到底,结果发现内容实在太多,分段写吧。第一部分到此为止,预知后事如何,倾听下回分解……