hadoop简介和历史html
Hadoop架构体系node
Master和Slave节点程序员
数据分析面临的问题和Hadoop思想算法
因为工做缘由,必须学习和深刻一下Hadoop,特此记录笔记。数据库
什么是hadoop?apache
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就能解决如上问题——分而治之,化繁为简。
来源于:http://www.thebigdata.cn/