Hadoop的基本概念和简单使用

1、概念

1.1、Hadoop 1.0和Hadoop 2.0

什么是Hadoo1.0

Hadoop1.0即第一代Hadoop,指的是版本为Apache Hadoop 0.20.x、1.x或者CDH3系列的Hadoop,内核主要是由HDFS和MapReduce两个系统组成。
其中MapReduce是一个离线处理框架,由编程模式(新旧API)运行时环境(JobTracker和TaskTracker)数据处理引擎(MapTask和ReduceTask)三部分组成。

什么是Hadoo2.0

Hadoop2.0即第二代Hadoop,指的是版本为Apache Hadoop 0.23.x、2.x或者CDH4系列的Hadoop,内核主要由HDFS、MapReduce和YARN三个系统组成,其中YARN是一个资源管理系统,负责集群资源管理和调度,MapReduce则是运行在YARN上的离线处理框架,它与Hadoop 1.0中的MapReduce在编程模型(新旧API)和数据处理引擎(MapTask和ReduceTask)两个方面是相同的。

两者区别

Hadoop整体框架区别

Hadoop1.0由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中HDFS由一个NameNode和多个DateNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。

Hadoop2.0为克服Hadoop1.0中的不足进行了下面改进:

  1. 针对Hadoop1.0单NameNode制约HDFS的扩展性问题,提出HDFS Federation,它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展,同时彻底解决了NameNode单点故障问题;
  2. 针对Hadoop1.0中的MapReduce在扩展性和多框架支持等方面的不足,它将JobTracker中的资源管理和作业控制分开,分别由ResourceManager(负责所有应用程序的资源分配)和ApplicationMaster(负责管理一个应用程序)实现,即引入了资源管理框架Yarn。
  3. Yarn作为Hadoop2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度,不仅限于MapReduce一种框架,也可以为其他框架使用,如Tez、Spark、Storm等

MapReduce计算框架区别

MapReduce1.0计算框架主要由三部分组成:编程模型、数据处理引擎和运行时环境。它的基本编程模型是将问题抽象成Map和Reduce两个阶段,其中Map阶段将输入的数据解析成key/value,迭代调用map()函数处理后,再以key/value的形式输出到本地目录,Reduce阶段将key相同的value进行规约处理,并将最终结果写到HDFS上;它的数据处理引擎由MapTask和ReduceTask组成,分别负责Map阶段逻辑和Reduce阶段的逻辑处理;它的运行时环境由一个JobTracker和若干个TaskTracker两类服务组成,其中JobTracker负责资源管理和所有作业的控制,TaskTracker负责接收来自JobTracker的命令并执行它。
MapReducer2.0具有与MRv1相同的编程模型和数据处理引擎,唯一不同的是运行时环境。MRv2是在MRv1基础上经加工之后,运行于资源管理框架Yarn之上的计算框架MapReduce。它的运行时环境不再由JobTracker和TaskTracker等服务组成,而是变为通用资源管理系统Yarn和作业控制进程ApplicationMaster,其中Yarn负责资源管理的调度而ApplicationMaster负责作业的管理。

Hadoop1与Hadoop2的区分还是非常大,HDFS和MR都有不同,最起码的配置文件就不一样。项目应用的话,建议尽量往高版本走。稳健一点的话稍低于最高版本的一个稳定版本即可。

1.2、MapReduce和HDFS

什么是MapReduce

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”,和它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
重点:
1、MapReduce是一种分布式计算模型,是Google提出的,主要用于搜索领域,解决海量数据的计算问题。
2、MR有两个阶段组成:Map和Reduce,用户只需实现map()和reduce()两个函数,即可实现分布式计算。

什么是HDFS

DFS即分布式文件系统,分布式文件存储在多个机器组成的集群中,用来管理分布式文件存储的系统称之为分布式文件系统。

HDFS即Hadoop分布式文件系统,它擅长存储大文件,流式读取,运行于一般性的商业硬件上。HDFS不适合存储大量的小文件,namenode会在内存中存储元数据,通常情况下每个文件、目录和块都将占用150个字节;也不适合任意并发写的场景,HDFS的写文件操作是append的模式。

扫描二维码关注公众号,回复: 11779003 查看本文章

1.3、NameNode和DataNode

什么是Block

在HDFS中,文件被分割成不同的块存储在集群的数据节点里,文件系统的元数据由文件系统集中管理。文件系统的块通常是512字节,但是HDFS默认128M,但是和普通的文件系统相比,如果一个文件没有达到128M,其并不会占满整个块。块默认如此大是为了减少寻址时间。抽象出块的概念的好处在于一个文件的大小可以超过整个磁盘,简化存储管理,很适合复制机制来实现高可用

什么是NameNode

NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。NameNode管理文件系统的命名空间,维护文件系统树、所有文件、目录以及块的元数据,元数据有两种namespace image和edit log。

什么是DataNode

DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。NameNode拥有Block和DataNode之间的映射关系,但是它并不持久化这些信息,这些信息来源依赖于DataNode启动时向NameNode发送的报告。DataNode维护着最终的Block,并定期向NameNode发送该DataNode包含的Block列表。

1.4、JobTracker和TaskTracker

什么是JobTracker

JobTracker是一个后台服务进程,启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。
JobTracker的主要功能:

  1. 作业控制:在hadoop中每个应用程序被表示成一个作业,每个作业又被分成多个任务,JobTracker的作业控制模块则负责作业的分解和状态监控。
    最重要的是状态监控:主要包括TaskTracker状态监控、作业状态监控和任务状态监控。主要作用:容错和为任务调度提供决策依据。
  2. 资源管理。

什么是TaskTracker

TaskTrackerJobTracker和Task之间的桥梁:一方面,从JobTracker接收并执行各种命令:运行任务、提交任务、杀死任务等;另一方面,
将本地节点上各个任务的状态通过心跳周期性汇报给JobTracker。TaskTracker与JobTracker和Task之间采用了RPC协议进行通信。
TaskTracker的主要功能:

  1. 汇报心跳:Tracker周期性将所有节点上各种信息通过心跳机制汇报给JobTracker。这些信息包括两部分:
    机器级别信息:节点健康情况、资源使用情况等。
    任务级别信息:任务执行进度、任务运行状态等。
  2. 执行命令:JobTracker会给TaskTracker下达各种命令,主要包括:启动任务(LaunchTaskAction)、提交任务(CommitTaskAction)、杀死任务(KillTaskAction)、
    杀死作业(KillJobAction)和重新初始化(TaskTrackerReinitAction)。

1.5、ResourceManager和NodeManager

ResourceManager 是基于应用程序对资源的需求进行调度的 ; 每一个应用程序需要不同类型的资源因此就需要不同的容器。ResourceManager 是一个中心的服务,它做的事情是调度、启动每一个 Job 所属的ApplicationMaster、另外监控 ApplicationMaster 的存在情况。

NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器(ResourceManager )汇报。
ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。

2、Hadoop的简单使用

Hadoop集群的搭建请参考《CentOS7下Hadoop集群搭建》

2.1 创建文件夹

在HDFS上创建文件夹 /test/input

[root@hadoop-master bin]# hadoop fs -mkdir -p /test/input

2.2 查看创建的文件夹

[root@hadoop-master bin]# hadoop fs -ls /
Found 1 items
drwxr-xr-x   - root supergroup          0 2020-08-19 12:19 /test
[root@hadoop-master bin]# hadoop fs -ls /test
Found 1 items
drwxr-xr-x   - root supergroup          0 2020-08-19 12:19 /test/input

2.3 上传文件

准备测试文件

[root@hadoop-master test]# vi hw_hadoop.txt 
[root@hadoop-master test]# cat hw_hadoop.txt 
hello world leo825
hello world hadoop
hello that girl
hello that boy

把文件上传到HDFS的/test/input文件夹中

[root@hadoop-master test]# hadoop fs -put ./hw_hadoop.txt /test/input

检查上传结果

[root@hadoop-master test]#  hadoop fs -ls /test/input
Found 1 items
-rw-r--r--   2 root supergroup         69 2020-08-19 12:26 /test/input/hw_hadoop.txt

2.4 下载文件

[root@hadoop-master local]# hadoop fs -get /test/input/hw_hadoop.txt ./
[root@hadoop-master local]# ll
总用量 12
drwxr-xr-x.  2 root  root     6 4月  11 2018 bin
drwxr-xr-x.  2 root  root     6 4月  11 2018 etc
drwxr-xr-x.  2 root  root     6 4月  11 2018 games
drwxr-xr-x.  4 root  root    30 8月   8 10:59 hadoop
-rw-r--r--.  1 root  root    69 8月  19 16:52 hw_hadoop.txt

2.5 运行一个mapreduce的demo程序:wordcount

运行以下examples-2.7.3.jar程序中的wordcount

hadoop jar /usr/local/hadoop/apps/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar  wordcount /test/input /test/output

执行结果

[root@hadoop-master test]# hadoop jar /usr/local/hadoop/apps/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar  wordcount /test/input /test/output
20/08/19 17:25:55 INFO client.RMProxy: Connecting to ResourceManager at hadoop-master/192.168.223.131:8032
20/08/19 17:25:56 INFO input.FileInputFormat: Total input paths to process : 1
20/08/19 17:25:56 INFO mapreduce.JobSubmitter: number of splits:1
20/08/19 17:25:57 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1597810488836_0001
20/08/19 17:25:57 INFO impl.YarnClientImpl: Submitted application application_1597810488836_0001
20/08/19 17:25:57 INFO mapreduce.Job: The url to track the job: http://hadoop-master:8088/proxy/application_1597810488836_0001/
20/08/19 17:25:57 INFO mapreduce.Job: Running job: job_1597810488836_0001
20/08/19 17:26:08 INFO mapreduce.Job: Job job_1597810488836_0001 running in uber mode : false
20/08/19 17:26:08 INFO mapreduce.Job:  map 0% reduce 0%
20/08/19 17:26:18 INFO mapreduce.Job:  map 100% reduce 0%
20/08/19 17:26:25 INFO mapreduce.Job:  map 100% reduce 100%
20/08/19 17:26:26 INFO mapreduce.Job: Job job_1597810488836_0001 completed successfully
20/08/19 17:26:26 INFO mapreduce.Job: Counters: 49
	File System Counters
		FILE: Number of bytes read=88
		FILE: Number of bytes written=237555
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=184
		HDFS: Number of bytes written=54
		HDFS: Number of read operations=6
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=2
	Job Counters 
		Launched map tasks=1
		Launched reduce tasks=1
		Rack-local map tasks=1
		Total time spent by all maps in occupied slots (ms)=6450
		Total time spent by all reduces in occupied slots (ms)=4613
		Total time spent by all map tasks (ms)=6450
		Total time spent by all reduce tasks (ms)=4613
		Total vcore-milliseconds taken by all map tasks=6450
		Total vcore-milliseconds taken by all reduce tasks=4613
		Total megabyte-milliseconds taken by all map tasks=6604800
		Total megabyte-milliseconds taken by all reduce tasks=4723712
	Map-Reduce Framework
		Map input records=4
		Map output records=12
		Map output bytes=117
		Map output materialized bytes=88
		Input split bytes=115
		Combine input records=12
		Combine output records=7
		Reduce input groups=7
		Reduce shuffle bytes=88
		Reduce input records=7
		Reduce output records=7
		Spilled Records=14
		Shuffled Maps =1
		Failed Shuffles=0
		Merged Map outputs=1
		GC time elapsed (ms)=131
		CPU time spent (ms)=1490
		Physical memory (bytes) snapshot=290959360
		Virtual memory (bytes) snapshot=4160589824
		Total committed heap usage (bytes)=154607616
	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=69
	File Output Format Counters 
		Bytes Written=54

在YARN Web界面:http://192.168.223.131:8088/cluster

count
查看输出结果:

[root@hadoop-master test]# hadoop fs -ls /test/output
Found 2 items
-rw-r--r--   2 root supergroup          0 2020-08-19 17:26 /test/output/_SUCCESS
-rw-r--r--   2 root supergroup         54 2020-08-19 17:26 /test/output/part-r-00000
[root@hadoop-master test]# hadoop fs -cat /test/output/part-r-00000
boy	1
girl	1
hadoop	1
hello	4
leo825	1
that	2
world	2

猜你喜欢

转载自blog.csdn.net/u011047968/article/details/107913010