目录
一、Hadoop
1、MapReduce
1.1、理解MapReduce思想
1.2、分布式计算概念
1.3、MapReduce介绍
1.4、MapReduce特点
1.5、MapReduce局限性
1.6、MapReduce实例进程
1.7、MapReduce阶段组成
1.8、MapReduce数据类型
1.9、MapReduce官方示例
2、YARN
一、Hadoop
1、MapReduce
1.1、理解MapReduce思想
MapReduce的思想核心是"先分再合,分而治之"。
所谓"分而治之"就是把一个复杂的问题,按照一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的结果,然后把各部分的结果组成整个问题的最终结果。
这种思想来源于日常生活与工作时的经验。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。
Map表示第一阶段,负责“拆分”:即把复杂的任务分解为若干个“简单的子任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reduce表示第二阶段,负责“合并”:即对map阶段的结果进行全局汇总。
这两个阶段合起来正是MapReduce思想的体现。
MapReduce处理的数据类型是<key,value>键值对。
实例:全国人口普查、停车场一共停多少辆车。
1.2、分布式计算概念
分布式计算是一种计算方法,和集中式计算是相对的。
随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。
分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。
1.3、MapReduce介绍
Hadoop MapReduce是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。
MapReduce是一种面向海量数据处理的一种指导思想,也是一种用于对大规模数据进行分布式计算的编程模型。
1.4、MapReduce特点
易于编程
MapReduce框架提供了用于二次开发的接口;简单地实现一些接口,就可以完成一个分布式程序。任务计算交给计算框架去处理,将分布式程序部署到hadoop集群上运行,集群节点可以扩展到成百上千个等。
良好的扩展性
当计算机资源不能得到满足的时候,可以通过增加机器来扩展它的计算能力。基于MapReduce的分布式计算的特点可以随节点数目增长保持近似于线性的增长,这个特点是MapReduce处理海量数据的关键,通过将计算节点增至几百或者几千可以很容易地处理数百TB甚至PB级别的离线数据。
高容错性
Hadoop集群是分布式搭建和部署的,任何单一机器节点宕机了,它可以把上面的计算任务转移到另一个节点上运行,不影响整个作业任务的完成,过程完全是由Hadoop内部完成的。
适合海量数据的离线处理
可以处理GB、TB和PB级别的数据量
1.5、MapReduce局限性
MapReduce虽然有很多的优势,也有相对的局限性,局限性不代表不能做,而是在有些场景下实现的效果比较差,并不适合用MapReduce来处理,主要表现在以下方面:
1、实时计算性能差:MapReduce主要应用于离线作业,无法做到秒级或者亚秒级的数据响应。
2、不能进行流式计算:流式计算特点是数据是源源不断的计算,并且数据是动态的;而MapReduce作为一个离线计算框架,主要是针对静态数据集的,数据是不能动态变化的。
1.6、MapReduce实例进程
一个完整的MapReduce程序在分布式运行时有三类
1、MRAppMaster:负责整个MR程序的过程调度及状态协调
2、MapTask:负责map阶段的整个数据处理流程
3、ReduceTask:负责reduce阶段的整个数据处理流程
1.7、MapReduce阶段组成
一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段。
不能有诸如多个map阶段、多个reduce阶段的情景出现。
如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序串行运行。
1.8、MapReduce数据类型
注意:整个MapReduce程序中,数据都是以KV键值对的形式流转的。
在实际编程解决各种业务问题中,需要考虑每个阶段的输入输出KV分别是什么。
MapReduce内置了很多默认属性,比如排序、分组等,都和数据的K有关,所以说KV的类型数据确定及其重要的。
1.9、MapReduce官方示例
一个最终完整版本的MR程序需要用户编写的代码和Hadoop自己实现的代码整合在一起才可以。
其中用户负责map、reduce两个阶段的业务问题,Hadoop负责底层所有的技术问题。
由于MapReduce计算引擎天生的弊端(慢),当下企业中直接使用率已经日薄西山了,所以在企业中工作很少涉及到MapReduce直接编程,但是某些软件的背后还依赖MapReduce引擎。
可以通过官方提供的示例来感受MapReduce及其内部执行流程,因为后续的新的计算引擎比如Spark,当中就有MapReduce深深的影子存在。
示例说明--圆周率PI评估
示例程序路径:/export/server/hadoop-3.3.6/share/hadoop/mapreduce/
示例程序:hadoop-mapreduce-examples-3.3.6.jar
MapReduce程序提交命令:[hadoop jar | yarn jar] hadoop-mapreduce-examples-3.3.6.jar args...
提交到哪里去?提交到YARN集群上分布式执行。
评估圆周率PI的值
Monte Carlo方法
假设正方形边长为1,圆半径也为1,那么1/4圆的面积为:
在正方形内随机撒点,分布于1/4圆内的数量假设为a,分布于圆外的数量为b,N则是所产生的总数:N=a+b
那么数量a与N的比值应与1/4圆面积及正方形面积成正比,于是:
运行MapReduce程序评估一下圆周率的值,执行中可以去YARN页面上观察程序的执行的情况。
第一个参数:pi表示MapReduce程序执行圆周率计算任务
第二个参数:用于指定map阶段运行的任务task次数,并发度,这里是2。
第三个参数:用于指定每个map任务取样的个数,这里是4。
hadoop jar hadoop-mapreduce-examples-3.3.6.jar pi 2 4
示例:执行Hadoop官方自带的MapReduce案例,评估圆周率π的值
[root@node1 ~]# cd /export/server/hadoop-3.3.6/share/hadoop/mapreduce/
[root@node1 mapreduce]# ls
hadoop-mapreduce-client-app-3.3.6.jar hadoop-mapreduce-client-jobclient-3.3.6.jar hadoop-mapreduce-examples-3.3.6.jar
hadoop-mapreduce-client-common-3.3.6.jar hadoop-mapreduce-client-jobclient-3.3.6-tests.jar jdiff
hadoop-mapreduce-client-core-3.3.6.jar hadoop-mapreduce-client-nativetask-3.3.6.jar lib-examples
hadoop-mapreduce-client-hs-3.3.6.jar hadoop-mapreduce-client-shuffle-3.3.6.jar sources
hadoop-mapreduce-client-hs-plugins-3.3.6.jar hadoop-mapreduce-client-uploader-3.3.6.jar
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.6.jar pi 2 4
Number of Maps = 2
Samples per Map = 4
Wrote input for Map #0
Wrote input for Map #1
Starting Job
2024-01-03 00:05:35,990 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at node1/192.168.18.81:8032
2024-01-03 00:05:36,427 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_17042071157 02_0001
2024-01-03 00:05:36,633 INFO input.FileInputFormat: Total input files to process : 2
2024-01-03 00:05:36,739 INFO mapreduce.JobSubmitter: number of splits:2
2024-01-03 00:05:36,889 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1704207115702_0001
2024-01-03 00:05:36,889 INFO mapreduce.JobSubmitter: Executing with tokens: []
2024-01-03 00:05:37,048 INFO conf.Configuration: resource-types.xml not found
2024-01-03 00:05:37,048 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2024-01-03 00:05:37,469 INFO impl.YarnClientImpl: Submitted application application_1704207115702_0001
2024-01-03 00:05:37,517 INFO mapreduce.Job: The url to track the job: http://node1:8088/proxy/application_1704207115702_0001/
2024-01-03 00:05:37,518 INFO mapreduce.Job: Running job: job_1704207115702_0001
2024-01-03 00:05:44,645 INFO mapreduce.Job: Job job_1704207115702_0001 running in uber mode : false
2024-01-03 00:05:44,647 INFO mapreduce.Job: map 0% reduce 0%
2024-01-03 00:05:49,790 INFO mapreduce.Job: map 100% reduce 0%
2024-01-03 00:05:56,882 INFO mapreduce.Job: map 100% reduce 100%
2024-01-03 00:05:57,937 INFO mapreduce.Job: Job job_1704207115702_0001 completed successfully
2024-01-03 00:05:58,074 INFO mapreduce.Job: Counters: 54
File System Counters
FILE: Number of bytes read=50
FILE: Number of bytes written=831342
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=520
HDFS: Number of bytes written=215
HDFS: Number of read operations=13
HDFS: Number of large read operations=0
HDFS: Number of write operations=3
HDFS: Number of bytes read erasure-coded=0
Job Counters
Launched map tasks=2
Launched reduce tasks=1
Data-local map tasks=2
Total time spent by all maps in occupied slots (ms)=5594
Total time spent by all reduces in occupied slots (ms)=3894
Total time spent by all map tasks (ms)=5594
Total time spent by all reduce tasks (ms)=3894
Total vcore-milliseconds taken by all map tasks=5594
Total vcore-milliseconds taken by all reduce tasks=3894
Total megabyte-milliseconds taken by all map tasks=5728256
Total megabyte-milliseconds taken by all reduce tasks=3987456
Map-Reduce Framework
Map input records=2
Map output records=4
Map output bytes=36
Map output materialized bytes=56
Input split bytes=284
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=56
Reduce input records=4
Reduce output records=0
Spilled Records=8
Shuffled Maps =2
Failed Shuffles=0
Merged Map outputs=2
GC time elapsed (ms)=226
CPU time spent (ms)=1710
Physical memory (bytes) snapshot=887963648
Virtual memory (bytes) snapshot=8386064384
Total committed heap usage (bytes)=736624640
Peak Map Physical memory (bytes)=314757120
Peak Map Virtual memory (bytes)=2793766912
Peak Reduce Physical memory (bytes)=260431872
Peak Reduce Virtual memory (bytes)=2799820800
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=236
File Output Format Counters
Bytes Written=97
Job Finished in 22.166 seconds
Estimated value of Pi is 3.50000000000000000000
[root@node1 mapreduce]#
2、YARN
Hadoop分布式文件系统(二)
再小的努力,乘以365都很明显!
一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!