介绍
现在终于进入了cluster programming——hadoop。
要了解Hadoop需要了解以下问题:
1、为什么需要使用分布式系统(distributed system)?
2、在large scale的分布式计算中,出现failures的情况时有发生么?
3、在Hadoop中是如何解决这些问题的?
4、什么是Mapreduce?
5、什么时候可以使用Mapreduce应用比较合适?
6、Mapreduce中定义的组成成分?
7、在HDFS中是如何减少数据瓶颈的?
8、云计算的优点是什么?
1、分布式系统的定义:分布式系统是针对计算量大的问题而提出,而且这类问题可以分成好几个任务,由单个或者多个计算机完成。
云计算:在云资源上的分布式计算。
使用分布式系统可以解决scalable data的数据处理问题。
云计算架构和分布式计算组成了scalable computing。
scalability主要体现在:
data(数据增加2x,计算的时间不会超过两倍);resources(数据给到之前的两倍,但是使用的资源不会超过原来的两倍)
这种scalable computing就是shared nothing的问题,属于share Nothing Architecture. 每个节点都是自给自足的,不会与别的节点进行数据共享。
HPC vs shared nothing architecture的区别:
HPC是分配workload,然后shared nothing architecture是分配资源。
HPC稳定性不如shared nothing architecture。因为HPC受到了网络带宽、同步数据等等影响。而且没有对应的保障机制。
**2、**Hadoo中发生故障的概率:
ensured。
3、保障机制
MapReduce + HDFS (Hadoop Distributed Filesystem)
- Fail-safe Storage: By default stores 3 separate copies of each block(每个块拷贝三份)
- Fail-safe Task Management: Failed tasks re-scheduled up to 4 times(出现故障的任务最多执行四次)
4、mapreduce的框架
一种编程模型(对大规模数据的执行模型)、一种执行框架(转为商用软件设计的框架)。
它的好处有:
- 本地数据读写
- 本地数据分区
- 内存使用
map就是对输入数据做一个映射。然后reduce就是对map之后的数据做一个整合。
在mapreduce中,需要做的就是定义一个key-value pair的数据结构;然后是map和reduce函数。
5、What component and functions need to be defined?
dataset :存储在正在执行的分布式系统中。
mapper:将输入的key-value pair通过映射函数,生成新的key-value pair。
reducer:把key一样的所有value联合起来,生成新的key-value pair。
具体可以看下图:
在mapper和recuder之间还有shuffle 和 sort。
Haddop框架注意的是mapper,而我们设计者更多注意的是reducer。
7、HDFS的bottlenecks:
分布式文件系统:写一次、读很多次;不解决并发问题,但是允许重复;对throughput优化,但是不对latency进行优化。
整个HDFS的读和写的过程:
Data is never moved through the NameNode —— no bottleneck
所以HDFS没有bottlenecks。
HDFS的局限:
很高的star up的cost;低效的“shuffle and sort”
所以hadoop比较适合:
Small number of large files preferred over a large number of small files
8、云计算的优点:
- 给人有无穷计算资源的错觉
- 消除了用户进行提交的过程
- 能够在短时间内付出相应的计算资源
【1】参考书:White, Hadoop: The Definitive Guide, 3rd Edition, Yahoo Press, Oct 2010