Hadoop系列之大数据启蒙

2020-06-21  本文已影响0人  l1fe1

1 大数据启蒙

1.1 分治思想

在认识分治思想之前,让我们先来看这样一个需求:

对于第一个需求,我们很容易就能想到可以用数组或者是链表来存储,这样查找某一个元素的时间复杂度分别是O(logn)和O(n):


数组存储 链表存储

那么对于第二个需求,我们应该如何实现呢?
如果你有学过数据结构,那你一定很快就能想到可以用散列表这种结构来实现这个需求,使用2500个长度为4(抛开数据分布不平衡的因素)的链表来存储这10000个元素,在查找的时候,首先通过hash值与2500取模定位到所在的链表数组,然后就能以O(4)的复杂度来查找这个元素了,如下图所示:

散列表存储

上述案例中的散列表就体现出了一种分治思想,分而治之的思想非常重要,它被运用在了很多场景中,比如:

1.2 单机处理大数据问题

继续来看这样一个需求:

散列分块查找

tips:内存寻址比I/O寻址快10万倍。

现在让我们来考虑另一个问题:如果1T的文件中放的都是数值且都是乱序的,现在我们希望把这些数值做一次全排序,我们应该如何来实现呢?
我们都知道哈希这种运算是无序的,因此在这个需求中就不再适用了,这时我们可以使用另一种方式:读取一行中的数值,如果它在某个选定的范围内(假设是1100),就将它发送到0号小文件块中,如果它在101200之内,就将它发送到1号小文件块中...依此类推,直到文件中的所有数值都被发送到一个个小的文件块中。这样耗费一次I/O时间可以使得这些数值做到外部(文件块之间)有序,内部(某个文件块中)无序。这时如果我们切分的文件块足够小,我们就可以将它放到内存中做一次排序,这样就能使得数值在每个文件块中也是有序的,从而实现了使用两次I/O完成了所有数值的全排序。

分块然后内部排序

我们也可以先读取一个小文件块大小(比如50M)的数值进行排序,这样我们就能得到n多个内部有序,外部无序的小文件块,学过算法的同学都知道有一种算法可以用于外部排序——对,那就是归并排序,因此我们可以使用归并排序对这n多个小文件块进行排序,这样也能使用两次I/O完成数值的全排序。

内部排序然后外部归并排序 外部归并排序过程

如果你理解了上面的东西,让我们再来做进一步思考:如果把时间变成分钟、秒级,应该如何做到呢?很显然在单机、硬件条件有限的情况下是绝无可能做到的,这也是单机在面临大数据问题的瓶颈所在(内存大小、I/O速度),这个时候集群分布式的优势就体现出来了。

分布式集群解决查找重复行问题

1.3 集群分布式处理大数据的辩证思考

让我们对上述问题进行逐一解答,首先2000台机器不一定比一台机器速度快,如果只有1T的数据需要处理,那么由于集群分布式需要先将文件分发上传到2000台机器中,这个过程消耗的网卡I/O(网络I/O比磁盘I/O速度还要慢)传输时间是非常多的,因此这种情况下并不能体现出集群分布式的优势。但是如果考虑每天都会有1T的数据产生,这些数据增量了一年,这个时候集群分布式在处理这些数据的计算时的长处就能充分发挥出来了。在处理增量数据时,集群分布式处理数据的时长并不会随着数据量的增长而有着明显的增长,但是单机在数据量逐渐增长的情况下处理数据所耗费的时间会越来越多。数据量越大,集群分布式的优势就会越明显。

1.4 结论

总而言之,从上述的分析我们可以得知,大数据技术关注的重心主要有下面几点:

2 Hadoop初识

2.1 Hadoop 之父 Doug Cutting

Doug Cutting是一位软件设计师,也是开源搜索技术的倡导者和创造者。他创建了Lucene,并与Mike Cafarella一起创建了Nutch,这两个都是开源搜索技术领域的项目​​,这些项目现在由Apache Software Foundation管理。Cutting和Cafarella也是Apache Hadoop的共同创始人。
                                    -- 摘自维基百科

2.2 Hadoop的时间简史

2.3 Hadoop项目/生态

Hadoop项目包含了这些模块:

Apache中其他与Hadoop相关的项目包括:

2.4 大数据生态

Cloudera官网:https://www.cloudera.com/
Cloudera’s Distribution Including Apache Hadoop(CDH)是Apache Hadoop和相关项目中最完整的,经过测试的和最受欢迎的发行版。

Cloudera大数据生态
上一篇 下一篇

猜你喜欢

热点阅读