Hadoop是Google的集群系统的开源实现, Google集群系统:GFS(Google File System)、MapReduce、BigTable。
Hadoop主要由HDFS(Hadoop Distributed File SystemHadoop分布式文件系统)、MapReduce和HBase组成Hadoop的初衷是为解决 Nutch 的海量数据爬取和存储的需要。
Hadoop于2005年秋天作为 Lucene的子项目Nutch的一部分正式引入Apache基金会。
名称起源: Doug Cutting儿子的黄色大象玩具的名字
Core : 一套分布式文件系统以及支持Map-Reduce的计算框架Avro:定义了一种用于支持大数据应用的数据格式,并为这种格式提供了不
同的编程语言的支持HDFS: Hadoop分布式文件系统Map/Reduce: 是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集
ZooKeeper:是高可用的和可靠的分布式协同系统Pig : 建立于 Hadoop Core之上为并行计算环境提供了一套数据工作流语言和执行框架
Hive: 是为提供简单的数据操作而设计的下一代分布式数据仓库。它提供了简
单的类似SQL的语法的HiveQL语言进行数据查询HBase: 建立于Hadoop Core之上提供一个可扩展的数据库系统Flume :一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据
Mahout: 是一套具有可扩充能力的机器学习类库Sqoop: 是Apache下用于RDBMS和HDFS互相导数据的工具
存储元数据
·元数据保存在内存中
保存文件,block,datanode之间的映射关系
- 主要功能:接受客户端的读写服务NameNode保存metadate信息包括
。文件owershippermissions
文件包含哪些块
· Block保存在哪个DataNode ( 由DataNode启动时上报 )
NameNode的metadate信息在启动后会加载到内存·metadata存储到磁盘文件名为”fsimage
。Block的位置信息不会保存到fsimage
edits记录对metadata的操作日志
存储文件内容
·文件内容保存在磁盘
·维护了blockid到datanode本地文件的映射关系
第一个副本:放置在上传文件的DN如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。第二个副本:放置在于第一个副本不同的 机架的节点上。
第三个副本:与第二个副本相同机架的节点。
更多副本:随机节点
namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的,在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中
在mapper和reducer中间的一个步骤,可以把mapper的输出按照某种key值重新切分和组合成n份,把key值符合某种范围的输出送到特定的reducer那里去处理,可以简化reducer过程
每个map task都有一个内存缓冲区(默认是100MB),存储着map的输出结果当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘(Spi11溢写是由单独线程来完成,不影响往缓冲区写map结果的线程(spill.percent,默认是0.8 )
当溢写线程启动后,需要对这80MB空间内的key做排序(Sort)
假如client设置过Combiner,那么现在就是使用Combiner的时候了。将有相同key的key/value对的value加起来,减少溢写到磁盘的数据量( reducel , wordl ,[8] ) 。
当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并( Merge ),对于“word1”就是像这样的:{“wordl”,[5,8,2,...]3,假如有Combiner,{word1[15]》,最终产生一个文件。reduce 从tasktracker copy数据
copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活,它基于VM的heap size设置merge有三种形式:1)内存到内存 2)内存到磁盘 3)磁盘到磁盘。
merge从不同tasktracker上拿到的数据,fword1[15,17,213]}
参考博客http://langyu.iteye.com/blog/992916?page=3#comments
max.split(100M)
min.split(10M)
block(64M)
max(min.split,min(max.split,block))