一. Hadoop的诞生
大数据核心问题:分布式存储和分布式处理
1.Google“三驾马车”——GFS、Big Table、Map Reduce
(1)GFS
文件存储:数据以数据块(块的大小固定为128M)的形式存储在块服务器上,元数据将文件地址和数据块位置信息存储在master服务器上,客户端程序通过向Master请求数据块的访问,Master返回块所在服务器的位置信息,客户端直接与块服务器交互进行数据读取。块服务器向Master返回心跳,表示服务器在运行。
读数据:客户端程序向Master请求读取某个文件—>Master返回文件和副本地址—>客户端程序访问最近文件所在的块服务器读取数据。
写数据:客户端程序向Master请求写入数据—>Master根据块服务器的空闲位置分配可写入数据的块位置(2+1模式)—>Master写入元数据信息(怎么写,写到哪)—>客户端将数据写给最近的块服务器,然后该服务器将新数据生成副本发送到另外两个地址存储。
(2)Big Table
保存表:a list of sorted <key,value>键值对列式存储(即首先索引列名,然后在该列中找到符合条件的行记录)表记录。
保存超大表:超大表 = a list of 小表;小表 = a list of 小小表;小小表 = a list of sorted <key,value>
读表:类似GFS读方式,客户端程序向NameNode请求表地址,NameNode返回表所在的DataNode地址,客户端在DataNode中索引表的列,找到想要的数据。
写表:类似GFS写方式。
(3)MapReduce
MapReduce程序启动(Hadoop 1.0)
客户端程序向JobTracker服务器(主)申请启动job进程,job进程根据数据块情况创建相应数量的Task任务,并与TaskTracker服务器(从)定时通信,了解从服务器CPU空闲情况,分配Task任务给数据块所在服务器(即与HDFS的DataNode进程一同出现)。TaskTracker收到任务启动Task进程并运行Map或Reduce进程,检查本地是否有jar包,没有就上HDFS上下载,并启动Map或Reduce程序。
MapReduce程序执行
Map 进程:从本机读入数据为<key,value>键值对,通过map程序输出为另一<key,value>对,并调用Partitioner接口
—>shuffle(由MapReduce计算框架完成,Partitioner接口实现):将Map产生的具有相同键的键值对通过HTTP通信发送给同个Reduce进程
—>Reduce进程:对收到的<key,value>进行排序和合并,相同key放在一起,组成<key,value集合>传递给Reduce执行。
2.Hadoop的核心组件——HDFS、MapReduce、Yarn(更新中)
二、Hadoop生态中各组件的应用场景和解决的问题
1.大规模数据的交互查询
Hive、Spark SQL、Impala
2.基于大规模历史数据的批处理
MapReduce、Hive
3.基于实时数据的流处理
Storm、Spark Streaming
4.基于图结构数据的图计算
三、Hadoop的未来(更新中)
1.Spark的出现
2.Hadoop与Spark共同部署