什么是hadoop?
Apache Hadoop是⼀款⽀持数据密集型分布式应⽤并以Apache 2.0许可协议发布的开源软件框架。它⽀持在商品硬件构建的⼤型集群上运⾏的应⽤程序。Hadoop是根据Google公司发表的MapReduce和Google档案系统的论⽂⾃⾏实作⽽成。
Hadoop框架透明地为应⽤提供可靠性和数据移动。它实现了名为MapReduce的编程范式:应⽤程序被分割成许多⼩部分,⽽每个部分都能在集群中的任意节点上执⾏或重新执⾏。此外,Hadoop还提供了分布式⽂件系统,⽤以存储所有计算节点的数据,这为整个集群带来了⾮常⾼的带宽。MapReduce和分布式⽂件系统的设计,使得整个框架能够⾃动处理节点故障。它使应⽤程序与成千上万的独⽴计算的电脑和PB级的数据。
hadoop历史
Hadoop由 Apache Software Foundation 于 2005 年秋天作为Lucene的⼦项⽬Nutch的⼀部分正式引⼊。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。
2006 年 3 ⽉份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳⼊称为 Hadoop 的项⽬中。Hadoop 是最受欢迎的在Internet 上对搜索关键字进⾏内容分类的⼯具,但它也可以解决许多要求极⼤伸缩性的问题。例如,如果您要 grep ⼀个 10TB 的巨型⽂件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采⽤并⾏执⾏机制,因此能⼤⼤提⾼效率。
Hadoop Common:在0.20及以前的版本中,包含HDFS、MapReduce和其他项⽬公共内容,从0.21开始HDFS和MapReduce被分离为独⽴的⼦项⽬,其余内容为Hadoop Common
HDFS:Hadoop分布式⽂件系统(Distributed File System)-HDFS(Hadoop Distributed File System)
MapReduce:并⾏计算框架,0.20前使⽤org.apache.hadoop.mapred旧接⼝,0.20版本开始引⼊org.apache.hadoop.mapreduce的新API
Apache HBase:分布式NoSQL列数据库,类似⾕歌公司BigTable。
Apache Hive:构建于hadoop之上的数据仓库,通过⼀种类SQL语⾔HiveQL为⽤户提供数据的归纳、查询和分析等功能。Hive最初由Facebook贡献。
Apache Mahout:机器学习算法软件包。
Apache Sqoop:结构化数据(如关系数据库)与Apache Hadoop之间的数据转换⼯具。Apache ZooKeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。Apache Avro:新的数据序列化格式与传输⼯具,将逐步取代Hadoop原有的IPC机制。
hadoop平台⼦项⽬
现在普遍认为整个Apache Hadoop“平台”包括Hadoop内核、MapReduce、Hadoop分布式⽂件系统(HDFS)以及⼀些相关项⽬,有Apache Hive和Apache HBase等等。Hadoop的框架最核⼼的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
如图,最下⾯⼀层就是hadoop的核⼼代码,核⼼代码之上实现了两个最核⼼的功能:MapReduce和HDFS,这是hadoop的两⼤⽀柱!因为hadoop是Java写的,为了⽅便其他对Java语⾔不熟悉的程序员,在这之上⼜有Pig,这是⼀个轻量级的语⾔,⽤户可以使⽤Pig⽤于数据分析和处理,系统会⾃动把它转化为MapReduce程序。
还有⼀个Hive,很重要!这是⼀个传统的SQL到MapReduce的映射器,⾯向传统的数据库⼯程师。但是不⽀持全部SQL。还有⼀个⼦项⽬叫HBase,⼀个⾮关系数据库,NoSQL数据库,数据是列存储的,提⾼响应速度,减少IO量,可以做成分布式集群。
ZooKeeper负责服务器节点和进程间的通信,是⼀个协调⼯具,因为Hadoop的⼏乎每个⼦项⽬都是⽤动物做logo,故这个协调软件叫动物园管理员。
Hadoop架构
如图,两个服务器机柜,每个圆柱代表⼀个物理机,各个物理节点通过⽹线连接,连接到交换机,然后客户端通过互联⽹来访问。其中各个物理机上都运⾏着Hadoop的⼀些后台进程。
Namenode
也叫名称节点,是HDFS的守护程序(⼀个核⼼程序),对整个分布式⽂件系统进⾏总控制,会纪录所有的元数据分布存储的状态信息,⽐如⽂件是如何分割成数据块的,以及这些数据块被存储到哪些节点上,还有对内存和I/O进⾏集中管理,⽤户⾸先会访问Namenode,通过该总控节点获取⽂件分布的状态信息,找到⽂件分布到了哪些数据节点,然后在和这些节点打交道,把⽂件拿到。故这是⼀个核⼼节点。
不过这是个单点,发⽣故障将使集群崩溃。
Secondary Namenode
在Hadoop中,有⼀些命名不好的模块,Secondary NameNode是其中之⼀。从它的名字上看,它给⼈的感觉就像是NameNode的备份,⽐如有⼈叫它第⼆名称节点,仿佛给⼈感觉还有后续……但它实际上却不完全是。
最好翻译为辅助名称节点,或者检查点节点,它是监控HDFS状态的辅助后台程序,可以保存名称节点的副本,故每个集群都有⼀个,它与NameNode进⾏通讯,定期保存HDFS元数据快照。NameNode故障可以作为备⽤NameNode使⽤,⽬前还不能⾃动切换。但是功能绝不仅限于此。所谓后备也不是它的主要功能。后续详细解释。
DataNode
叫数据节点,每台从服务器节点都运⾏⼀个,负责把HDFS数据块读、写到本地⽂件系统。这三个东西组成了Hadoop平台其中⼀个⽀柱——HDFS体系。
再看另⼀个⽀柱——MapReduce,有两个后台进程。
JobTracker
叫作业跟踪器,运⾏到主节点(Namenode)上的⼀个很重要的进程,是MapReduce体系的调度器。⽤于处理作业(⽤户提交的代码)的后台程序,决定有哪些⽂件参与作业的处理,然后把作业切割成为⼀个个的⼩task,并把它们分配到所需要的数据所在的⼦节点。 Hadoop的原则就是就近运⾏,数据和程序要在同⼀个物理节点⾥,数据在哪⾥,程序就跑去哪⾥运⾏。这个⼯作是JobTracker做的,监控task,还会重启失败的task(于不同的节点),每个集群只有唯⼀⼀个JobTracker,类似单点的nn,位于Master节点(稍后解释Master节点和slave节点)。
TaskTracker
叫任务跟踪器,MapReduce体系的最后⼀个后台进程,位于每个slave节点上,与datanode结合(代码与数据⼀起的原则),管理各⾃节点上的task(由jobtracker分配),每个节点只有⼀个tasktracker,但⼀个tasktracker可以启动多个JVM,⽤于并⾏执⾏map或reduce任务,它与jobtracker交互通信,可以告知jobtracker⼦任务完成情况。
Master与Slave
Master节点:运⾏了Namenode、或者Secondary Namenode、或者Jobtracker的节点。还有浏览器(⽤于观看管理界⾯),等其它Hadoop⼯具。Master不是唯⼀的!
Slave节点:运⾏Tasktracker、Datanode的机器。
数据分析者⾯临的问题和Hadoop的思想
⽬前需要我们处理的数据⽇趋庞⼤,⽆论是⼊库和查询,都出现性能瓶颈,⽤户的应⽤和分析结果呈整合趋势,对实时性和响应时间要求越来越⾼。使⽤的模型越来越复杂,计算量指数级上升。
故,⼈们希望出现⼀种技术或者⼯具来解决性能瓶颈,在可见未来不容易出现新瓶颈,并且学习成本尽量低,使得过去所拥有的技能可以平稳过渡。⽐如SQL、R等,还有转移平台的成本能否控制最低,⽐如平台软硬件成本,再开发成本,技能再培养成本,维护成本等。 ⽽Hadoop就能解决如上问题——分⽽治之,化繁为简。
因篇幅问题不能全部显示,请点此查看更多更全内容