一、 Hadoop概述
随着企业要处理的数据量越来越大,MapReduce思想越来越受到重视。Hadoop是MapReduce的一个开源实现,由于其良好的扩展性和容错性,已得到越来越广泛的应用。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。Hadoop的架构图如下所示:
Hadoop作为一个基础大数据处理平台,虽然其应用价值已得到大家认可,但仍存在很多问题,以下是主要几个:
1、Namenode/jobtracker单点故障。
Hadoop采用的是master/slaves架构,该架构管理起来比较简单,但存在致命的单点故障和空间容量不足等缺点,这已经严重影响了Hadoop的可扩展性。
2、HDFS小文件问题。
在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1000 0000个小文件,每个文件占用一个block,则namenode需要2G空间。如果存储1亿个文件,则namenode需要20G空间。这样namenode内存容量严重制约了集群的扩展。
3、jobtracker同时进行监控和调度,负载过大。
为了解决该问题,yahoo已经开始着手设计下一代Hadoop MapReduce(见参考资料1)。他们的主要思路是将监控和调度分离,独立出一个专门的组件进行监控,而jobtracker只负责总体调度,至于局部调度,交给作业所在的client。
4、数据处理性能。
很多实验表明,其处理性能有很大的提升空间。Hadoop类似于数据库,可能需要专门的优化工程师根据实际的应用需要对Hadoop进行调优,有人称之为“Hadoop Performance Optimization” (HPO)。
为了提高其数据性能,很多人开始优化Hadoop。总结看来,对于Hadoop,当前主要有几个优化思路:
(1)操作系统调优
Hadoop的运行环境,硬件配置起得至关重要的作用,硬件的参数配置对性能影响非常大,在部署Hadoop时,合理的硬件选择是一种优化思路。
(2)从应用程序角度进行优化。
由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。
(3)对Hadoop参数进行调优。
当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。
(4)从系统实现角度进行优化。
这种优化难度是最大的,它是从hadoop实现机制角度,发现当前Hadoop设计和实现上的缺点,然后进行源码级地修改。该方法虽难度大,但往往效果明显。
二、 运行环境
原则一: 主节点可靠性要好于从节点。
原则二:多路多核,高频率cpu、大内存。
比如,NameNode节点中100万文件的元数据要消耗800M内存,内存决定了集群保存文件数的总量,ResourceManager同时运行的作业会消耗一定的内存。
DataNode的内存需要根据cpu的虚拟核数(vcore) 进行配比,CPU的vcore数计算公式为=cpu个数 * 单cpu核数* HT(超线程)
内存容量大小 = vcore数 * 2GB(至少2GB)
原则三: 根据数据量确定集群规模
一天增加10GB, 365天,原数据1TB,replacation=3&#x