1. Hadoop简介

Hadoop的组件

下图显示了 Hadoop 生态系统的各种组件。 图表  描述已自动生成

Apache Hadoop 由两个子项目组成

  • Hadoop MapReduce : MapReduce 是一种计算模型及软件架构,编写在Hadoop上运行的应用程序。这些MapReduce程序能够对大型集群计算节点并行处理大量的数据。
  • HDFS (Hadoop Distributed File System): HDFS 处理 Hadoop 应用程序的存储部分。 MapReduce应用使用来自HDFS的数据。HDFS创建数据块的多个副本,并集群分发它们到计算节点。这种分配使得应用可靠和极其迅速的计算。

虽然 Hadoop 是因为 MapReduce 和分布式文件系统 HDFS 而最出名的, 该术语也是在分布式计算和大规模数据处理的框架下的相关项目。 Apache Hadoop 的其他相关的项目包括有:Hive,HBase,Mahout,Sqoop , Flume 和 ZooKeeper。

Hadoop 功能

  • 适用于大数据分析 作为大数据在自然界中趋于分布和非结构化,Hadoop 集群最适合于大数据的分析。因为,它处理逻辑(未实际数据)流向计算节点,更少的网络带宽消耗。这个概念被称为数据区域性概念,它可以帮助提高基于 Hadoop 应用程序的效率。
  • 可扩展性 HADOOP集群通过增加附加群集节点可以容易地扩展到任何程度,并允许大数据的增长。 另外,标度不要求修改到应用程序逻辑。
  • 容错 HADOOP生态系统有一个规定,来复制输入数据到其他群集节点。这样一来,在集群某一节点有故障的情况下,数据处理仍然可以继续,通过使用存储另一个群集节点上的数据。

2. HDFS基本操作实验

2.1. 启动HDFS

进入Hadoop目录启动分布式文件系统。以下命令将启动namenode以及数据节点作为集群。

1
2
3
# service ssh restart
# cd /usr/local/hadoop
# sbin/start-dfs.sh

运行结果:

image-20230401005200928

2.2. 将数据插入HDFS

假设我们在本地系统中的称为file.txt的文件中有数据,应该保存在hdfs文件系统中。按照以下步骤在Hadoop文件系统中插入所需的文件。

  1. 创建本地文件file.txt
1
2
2.  # touch /home/file.txt
3. # echo "hello world" > /home/file.txt

image-20230401005302312

2.您必须创建一个输入目录。

1
2
# hadoop fs -mkdir /user
# hadoop fs -mkdir /user/input

image-20230401005326263

3.使用put命令将数据文件从本地系统传输并存储到Hadoop文件系统。

1
# hadoop fs -put /home/file.txt /user/input

image-20230401005353620

4.可以使用ls命令验证文件。

1
# hadoop fs -ls /user/input

image-20230401005457489

2.3. 从HDFS检索数据

现在我们在HDFS中已经有一个名为file.txt的文件。下面给出的是从Hadoop文件系统中检索所需文件的简单示例。

  1. 最初,使用cat命令查看HDFS中file.txt的数据。
1
# hadoop fs -cat /user/input/file.txt

image-20230401005513420

  1. 使用get命令将文件从HDFS获取到本地文件系统。
1
2
# mkdir /home/hadoop_tp
# hadoop fs -get /user/input/ /home/hadoop_tp/

image-20230401005523626

  1. 查看拉取的文件
1
2
3
# ls /home/hadoop_tp/input/
# cat /home/hadoop_tp/input/file.txt
hello world

image-20230401010008034

2.4. 删除HDFS中所有数据

1
# hadoop fs -rm -r -f /user

image-20230401010030315

3. MapReduce基本操作实验

实验目的

熟悉MapReduce的架构和基本操作。查看官方给的例子,在Hadoop的伪分布式模式下,以grep为实验对象了解执行MapReduce作业的过程,了解mapper函数和reducer函数。

实验原理

Hadoop MapReduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上TB级别的数据集。

一个MapReduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在 文件系统中。 整个框架负责任务的调度和监控,以及重新执行已经失败的任务。

通常,MapReduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说,计算节点和存储节点通常在一起。这种配置允许框架在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。

MapReduce框架由一个单独的master和每个集群节点一个slave共同组成。master负责调度构成一个作业的所有任务,这些任务分布在不同的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由master指派的任务。

实验步骤

3.1 启动YARN

1
2
# cd /usr/local/hadoop
# sbin/start-yarn.sh

image-20230401010046446

3.2 查看hadoop官方给了哪些例子

1
2
# cd bin
# hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar

image-20230401010224365

3.3 以grep例子作为实验,查看grep例子的用法

grep例子的作用是给出一个正则表达式和一系列文件(也可以是单个文件),统计正则表达式匹配到的单词的次数。

想要知道具体某个例子怎么使用,可以在上面的命令后面跟上这个例子的名称加–help:

1
# hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep --help

image-20230401010250578

可以看到,grep例子后面跟着的是输入文件目录和输出文件目录,然后是正则表达式。

3.4 创建要处理的数据

我们先在Hadoop安装目录/usr/local/hadoop下创建一个文件,使用如下命令快速创建:

1
2
3
4
5
6
# cd /usr/local/hadoop
# echo "hello world.the world is hadoop world" > input.txt
# cat input.txt
hello world.the world is hadoop world

# bin/hdfs dfs -put input.txt /

image-20230401010329336

echo 命令会输出双引号中的字符串,而>命令则将输出重定向到文件input.txt中。

3.5 用hadoop命令提交作业,运行作业

1
# bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input.txt output world

image-20230401010344588

3.6 查看结果

1
2
4.  # bin/hdfs dfs -cat output/p*
5. 3 world

可以看到,在结果文件中显示,匹配到正则表达式:world的次数为3次。