hadoop实战(一) hadoop基本概念

释放双眼,带上耳机,听听看~!

一、理解Hadoop

       
Hadoop_wiki上定义,
Apache Hadoop 
is an open-source
 software framework
 used for distributed storage
 and processing of very large data sets
.
就是说**Hadoop是(大数据下)分布式的数据处理框架。**所以我们从 如下两个方面理解Hadoop。[我们接下来重点从Hadoop的改进上来说]

1.既然是分布式计算环境,那么跟一般的框架有什么不同呢?

比如一般地SETI@home这个框架,在分布式计算的时候会在client和server之间进行数据传输,所以它更适合于计算密集型任务,而不适合于数据密集型任务。那么在大数据环境下,该框架就显得低效了。so,可以很容易想到的一个改进就是不进行大量的数据迁移,这就是Hadoop的思想,“将代码向数据迁移,尽量让计算发生在数据驻留之地”,这就与Hadoop**“面向数据密集型处理”**的设计目标一致。

2.作为

数据处理框架,与SQL数据库有什么不同?

1)Hadoop多面向非结构化文本数据的处理(使用key-value对),SQL是结构化数据库;

2)可以使用MR建立复杂的数据统计模型,SQL使用基本的操作语句;

3)Hadoop是面向离线批量处理,SQL多是在线操作。

二、理解MapReduce

        MapReduce是Hadoop的数据处理模型,其基本原语是Mapper(过滤、转换)和Reducer(聚合)。再后面的介绍中我们还会发现MapReduce过程中还有Partitioning和Shuffling,这两者是通用过程,已经默认实现在MapReduce处理过程中了,不需要再编程设计实现了。

       所以MR的数据流是:

hadoop实战(一) hadoop基本概念

三、从WordCount理解

        下面我们从一个简单的wordcount例子来理解Hadoop的设计思想,看看这样一个框架到底带给我们什么?

        给定一个句子,统计其中的单词数目。

1)遍历取词,通过多重集合wordcount统计,即wordcount中的相应项加1。【一般多重集合使用散列表实现。】

但是当数据量很大时,这样做十分耗时,效率很低,于是:

2)分布式:每台机器处理文档的不同部分,然后合并。

这样做也有问题,需要将数据分发到不同机器,然后机器再处理,这明显很蠢嘛,所以会考虑分布式存储,从而将存储和处理紧紧绑定起来。

还有,第二阶段的合并只能在一个机器上运行么?这会很大的效率瓶颈,更大的问题是,内存限制导致不能处理那么大的数据量,如果用硬盘散列的话,工作量会很大,很复杂。于是:

3)第二阶段的合并也扩展成并行化处理:

问题在于:如何分裂数据集才能扩展?一个例子是每台机器只处理某个字幕开头的单词。这个洗牌分区的过程,就是Hadoop在Map和Reduce之间自动实现的partition和shuffle过程。

以上,我们看懂了一般地处理模型会遇到的问题:

1)内存不够将整条数据读入;

2)带宽限制导致处理数据密集任务时效率低下;

3)没有容错措施

4)…….

资源参考:

wiki_Apache Hadoop

hadoop官网
The original papers on the Google File System and MapReduce are well worth
reading. Appreciate their underlying design and architecture:


The Google File System

http://labs.google.com/papers/gfs.html


MapReduce: Simplified Data Processing on Large Clusters

http://labs.google.com/ papers/mapreduce.html

给TA打赏
共{{data.count}}人
人已打赏
安全运维

MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据

2021-12-11 11:36:11

安全运维

Ubuntu上NFS的安装配置

2021-12-19 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索