现在打算学习一些关于分布式,大数据,和hadoop的知识,创建一个笔记本,作为入门的笔记。
1. 安装hadoop
http://www.jianshu.com/p/da650254762c
2. 配置hadoop(伪分布的模式)
http://www.jianshu.com/p/8acdd5d912dc
3. hadoop 是什么?
hadoop 是Apache 软件基金会旗下的一个开源分布式计算平台。以hadoop 文件系统(hdfs)和 mapreduce (google 提出的mapreduce计算框架)为核心的分布式基础架构。
hdfs 类似于 gfs,是用一群廉价的pc,组成一个高性能的文件系统。具有高容错性,可靠性,高伸缩性等优点。
mapreduce 是一个分布式的编程模型,允许用户在不了解分布式底层细节的情况下,写出并行的分布式程序,完成海量数据的处理。
hadoop核心设计,参考了google的三篇非常著名的paper,一个是google file system,mapreduce,bigtable。写得非常好,如果英语基础不差的人,强烈建议读一下原文。
原文的链接
google file system :http://dl.acm.org/citation.cfm?id=945450
mapreduce:http://dl.acm.org/citation.cfm?id=1327492
bigtable:http://dl.acm.org/citation.cfm?id=1365816
4. hadoop原理简介
<ul>
<li>1. hdfs</li>
关于hdfs这一部分的理论知识,我的参考资料的是gfs这篇paper,他们两个的设计理念是相同的。
hdfs/gfs的特点是:
<ol>
<li> google 为了处理海量的数量,开发了这个文件系统,所以他的一个特点是适合处理超大的文件。(反而是小文件 会降低gfs的性能)</li>
<li> 运行在廉价的系统之上,并不是很贵的server ,而是普通的pc。这也是google的一个特点,喜欢在一个廉价的pc之上堆出一个牛x的系统。这也带来另外一个问题,就是在一个大规模的系统上,单点故障的虽然很小,但是乘以一个很大的规模,结点的故障也会变成一个常态。(比如pc的故障率是0.00001,但是一个集群有10w台设备,那么总是会有几台设备 处于故障中)。所以,整个系统必须要考虑容错性。</li>
<li>对文件操作的特点是,一次写入,多次读取。对文件的修改,是基本上不允许的,只能是对文件进行追加写。这也是google业务的一个特点,因为在保存网页或其他数据的时候,只是需要一次写入就好,然后不断的查询,不断的读取。基本上不会对文件进行修改,只是追加的去写。</li>
</ol>
gfs/hdfs 这样的特点,带来的问题就是:
<ol>
<li>实时性比较弱,对数据的查询是分钟级别的。对于实时响应的是业务,可以使用HBase。</li>
<li>对大量的小文件的支持不好,这个是因为namenode的大小是有限的,一个索引的文件大小是固定的,文件越多,这样占据namenode 的空间越多,这样降低的namenode的性质。 </li>
<li>hdfs 只能有一个写入者,并且只能是追加写。不支持多个写入者。</li>
</ol>
hdfs的架构简介
一个完整的hdfs运行在一些结点之上,这些结点运行着不同类型的守护进程,如namenode,datanode,secondarynode,不同的结点相互配合,一起构成了hdfs。
Namenode:namenode是一个名称节点,是hdfs的大脑,它维护着文件系统的目录树。
Secondarynode:第二个名字节点,用于备份,一旦namenode挂掉,那么secondarynode就补上。
datanode:data节点用来存储数据。
Client:客户机是用来读写数据。
具体分析: 关于hdfs读写的具体流程(参见一个网页链接和书)
<br />
<li>2. 计算框架 Mapreduce </li>mapreduce源自google的一篇文章,大概的设计思想是分治的思想,把计算的任务分布在不同的计算节点上,并行的去完成,然后不断的归并结果。主要对数据处理的过程是 map(映射)和reduce(化简)。
优点:
<ol><li>mapreduce计算模型向用户屏蔽了分布式系统编程的细节,用户不必考虑进程间通讯等细节,只需要将精力关注在编写map和reduce函数即可。</li>
<li>可扩展性强: 当计算能力不足的时候,可以通过增加计算节点,来增加系统的计算能力 </li>
<li> 容错性强: 对于节点故障,mapreduce计算框架会很方便的将自己的作业安排到其他的节点来完成运算。</li></ol>
具体分析:
mapreduce一个简单例子。 见书 p98页
<br />
<li>3. 数据库Hbase</li>
<br />
<li>4. Hive</li>
<br />
</ul>
参考资料:
hadoop的官方文档:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html#Namenode+%E5%92%8C+Datanode
《hadoop 权威指南》
《hadoop 海量数据处理》 范东来
《hadoop 实战》陆嘉恒