并发大数据分布式大杂烩

并发编程:

1. 多任务

抢占式:总控制权在操作系统中,操作系统会轮流询问每一个任务是否需要的CPU,需要的话就让让它用,不过在一定时间之后,操作系统会剥夺当前任务的CPU使用权,让它排在询问队列的最后,再去询问下一个任务。

协作式:一个任务得到了CPU时间,除非它自己放弃使用CPU,否则将完全霸占CPU,所以任务之间需要协作--使用一段时间之后就放弃使用CPU,其它任务也是这样,才能保证系统的正常运行。

2. volatile关键字:

提醒编译器它后面所定义的变量随时有可能发生变化,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读数据。

如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的情况。

比如:外设数据的读取。多个线程都需要去读取这个数据的时候,也需要小心

 

Hadoop:

Common:最底层模块,为Hadoop各子项目提供各种工具

HDFS:具有高容错性的文件系统

MapReduce:编程模型

HBase:分布式的,面向列的开源数据库

ZooKeeper:分布式的服务框架,解决分布式系统中的一致性问题

Hive:基于Hadoop的数据仓库工具,将结构化的数据映射为一张表

Pig:对大数据进行分析和评估的工具

Mahout:机器学习和数据挖掘,利用MapReduce实现K-means,Naive Bayes等

MapReduce理论介绍:

MapReduce编程模型:

1. MapReduce采用“分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分结点共同完成,然后通过整合各个节点的中间结果,得到最终的结果。简单点:MapReduce就是:任务的分解与结果的汇总。

2. 在Hadoop中,只想MapReduce任务的机器角色有两个:JobTracker & TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。

3. 在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储,工作调度,负载均衡,容错均衡,容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map 和 reduce。map负责把任务的分解成为多个任务,reduce负责把分解后多任务处理的结果汇总起来。

Note:

用MapReduce处理的数据集必须具有这样的特点:待处理的数据集可以分解为许多小的数据集,而且每一个数据集都可以完全并行地处理。


必须会解释的关键名词:

Map:

1. 是指MapReduce框架中的Map过程,即将一个分片根据用户定义的Map逻辑处理后,经由MapReduce框架处理,形成输出结果,然后供后续的Reduce过程使用

2. 是指用户定义Java程序实现Mapper类的map接口的用户自定义逻辑,时常称之为mapper.

Reduce:

1. MapReduce框架中的Reduce过程,即将Map的结果作为输入,根据用户定义的Reduce逻辑,将结果处理并汇总,输出最后的结果。

2. 是指用户定义Java程序实现Reduce类的reduce接口的用户自定义逻辑,时常称之为reducer

Shuffle:

当一个map任务完成之后,节点可能还要继续执行更多的map任务,但这时候也开始把map任务的中间输出交换到需要它们的reducer中去。

Partition:

每一个Reduce节点会被分派到中间输出的键集合中的一个不同的子集合,这些子集合被称之为partitions,是reduce任务的输入数据,每一个map任务生成的键值对有可能会隶属于任意的partition,有着相同键的数值总是在一起被reduce,不管它是来自哪个mapper。因此,所有的map节点必须把不同的中间数据发往何处达成一致。Partition类就是用来决定给定键值对的去向,默认的分类器partitioner会计算 键的hash值并基于这个结果来把键赋值到相应的partition上。

Sort:

每一个reduce任务负责归约(reducing)关联到相同键上的所有数值,每一个节点收到的中间键集合在被送到具体的reducer那里前就已经自动被Hadoop排序过了。

Combiner:

它在Mapper之后Reducer之前运行,Combiner是可选的,如果这个过程适合你的作业,Cmibiner实例会在每一个运行map任务的节点上运行。Comniner会接收特点节点的Mapper实例的输出作为输入,接着Combiner的输出会被发送到Reducer那里,而不是发送Mapper的输出。Combiner是一个“迷你reduce”过程,它只处理单台机器产生的数据。

Reporter:

是用于MapReduce应用程序进度报告,设定应用级别的状态消息,更新Counters(计数器)的机制。


是时候放几张图了:

  1. 输入大量数据
  2. 对数据进行分组,其实就是split操作
  3. 然后做一个mapping,就是把单词切分出来
  4. shuffing就是把数据扔到需要做计数的组里面去
  5. Reducing就是合并数据结果
  6. Final result输出结果

没看懂:再来一张更详细的:

map/reduce/shuffle/Partition/Sort/Combiner/Reporter

第一步,将文件拆分为splits,由于测试用的文件较小,所以每个文件为一个split,并将文件按行分割形成键值对<key, values>,如上图所示,这一步由MapReuce框架自动完成,其中偏移量(即key值)包括了回车所占的字符数

第二步,将分割好的<key, value>键值对交给用户定义的map方法进行处理,生成新的<key, value>对,如上图所示。

第三步,得到map方法输出的<key, value>对后,Mapper会将它们按照key值进行排序,并执行Combine过程,将key值相同的value值累加,得到Mapper的最终输出结果,如上所示。

第四步,Reducer先对Mapper接收的数据进行排序,再交由用户定义的reduce方法进行处理,得到新的<key, value>对,并作为WordCount的输出结果,如上图。

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/mr_xiaoz/article/details/81254346