大数据技术要解决的难题——海量数据要如何存储,海量数据要如何处理?

海量数据的存储问题不是现在才有的,在很早之前就用NFS(网络文件系统)将数据分开存储来解决海量数据的存储问题,但NFS有着明显的缺点。

对海量数据进行分析时不能充分运用多台计算机进行分析。

为解决第一个问题,从纵向扩展的角度来看,单台计算机的扩展空间是有限的,无论cpu,内存,磁盘怎么扩展也都是有限的,而且高端的服务器极其昂贵,成本极高,所以纵向扩展的角度是不可取的。

从横向扩展看有需要解决如下问题:如何调度资源,任务如何监控,中间结果如何调度,系统如何容错,如何实现众多结点的协调。而hadoop就是为解决上面5个问题而来的。

 

hadoop是一种开源可运行在大规模集群上的分布式文件系统和运行处理的框架,他适合在低成本搭建的集群上进行海量数据(结构化和非结构化)的存储,以及离线处理。

hadoop的结构

 

 

用hadoop处理数据 hadoop如何处理海量数据_数据

 

hadoop的核心是HDFS和MapReduce,先来看HDFS的结构:

用hadoop处理数据 hadoop如何处理海量数据_数据_02

Client切分文件,访问HDFS,与NameNode交互,获取文件的位置信息,与DataNode交互读取和写入数据。NameNode记录数据在DataNode中存储的位置,管理名称空间,配置副本策略,处理客户端请求。DataNode实际存储数据。Secondary NameNode辅助NameNode。

Mapreduce的结构

用hadoop处理数据 hadoop如何处理海量数据_数据_03

Hadoop MapReduce时google MapReduce的克隆版,是一种计算模型,进行大量数据计算,Map对数据机上独立元素进行指定操作,生成键值对形式的中间结果,Reduce则对中间结果的相同键的所有值进行规约,得到最终结果。

JobTracker:Master节点,只有一个,管理所有作业,作业/任务的监控、错误处理等;将任务分解成一系列任务,并分派给TaskTracker。

 

TaskTracker:Slave节点,运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态。

Map Task:解析每条数据记录,传递给用户编写的map(),并执行,将输出结果写入本地磁盘(如果为map-only作业,直接写入HDFS)。

Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行

 

MapReduce的处理流程

用hadoop处理数据 hadoop如何处理海量数据_海量数据_04

再来看Hive(基于Hadoop的数据仓库)

Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。

Hbase(分布式列存数据库)

 Hbase源于Google的Bigtable,他是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value)其中行关键由行键字、列关键字和时间戳构成。

他提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,他将数据存储和并行计算完美地结合起来。

数据模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value