一,大数据初识
1,大数据的三大特征:大容量,多类型,高时效;
2,结构化数据表示可用二维表表示并存在数据库中的数据;非结构化数据包括图片视频音频等。
3,大数据并行计算:将一个计算任务分解成多个并行子任务并分配给不同的处理器,各个处理器之间相互协同,达到加速计算速度提升计算规模的目的。
4,大数据处理的容错性
1)存储容错:RAID冗余磁盘阵列
2)计算任务容错:失效节点检测,计算任务迁移,数据定位与获取。
5,云计算:利用大量计算节点构成的可动态调整的虚拟化计算资源,通过并行化和分布式计算技术,实现业务质量可控的大数据处理的计算技术。
6,Hadoop是一个能对大数据进行可靠的分布式处理的开源框架。包括Hadoop Common,HDFS,MapReduce,Hbase等,其中Hadoop Common是隐藏在幕后为架构提供基础支持。
7,大数据处理架构图
Map/Reduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的,Google已经将它完整的 MapReduce论 文公开发布了。其中对它的定义是,Map/Reduce是一个编程模型(programming model),是一个用于处理和生成大规模数据集的相关的实现。用户定义一个map函数来处理一个key/value对以生成一批中间的key/value对,再定义一个reduce函数将所 有这些中间的有着相同key的values合并起来。很多现实世界中的任务都可用这个模型来表达。
1 原理
Map:<k1,v1> ->list<k2,v2>
Reduce:<k2,list<v2>> -><k3,v3>
例子:有一些文件,其内容是用户的电话和访问网站的流量。
2 工作过程
2.1 角色:
JobTracker
JobTracker是一个master服务, JobTracker负责调度job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。
TaskTracker
TaskTracker是运行于多个节点上的slaver服务。TaskTracker则负责直接执行每一个task。TaskTracker都需要运行在HDFS的DataNode上。分为map类型和reduce类型。
JobClient
每 一个job都会在用户端通过JobClient类将应用程序以及配置参数打包成jar文件存储在HDFS,并把路径提交到JobTracker,然后由 JobTracker创建每一个Task(即MapTask和ReduceTask)并将它们分发到各个TaskTracker服务中去执行。
2.2 流程:一道MapRedcue作业是通过JobClient.rubJob(job)向master节点的JobTracker提交的, JobTracker接到JobClient的请求后把其加入作业队列中。JobTracker一直在等待JobClient通过RPC提交作业,而 TaskTracker一直通过RPC向 JobTracker发送心跳heartbeat询问有没有任务可做,如果有,让其派发任务给它执行。如果JobTracker的作业队列不为空, 则TaskTracker发送的心跳将会获得JobTracker给它派发的任务。这是一道pull过程。slave节点的TaskTracker接到任 务后在其本地发起Task,执行任务。
2.3 作业调度
FIFO
Hadoop 中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选 择被执行的作业
公平调度器
为任务分配资源的方法,其目的是随着时间的推移,让提交的作业获取等量的集 群共享资源,让用户公平地共享集群。具体做法是:当集群上只有一个任务在运行 时,它将使用整个集群,当有其他作业提交时,系统会将TaskTracker节点空间的时 间片分配给这些新的作业,并保证每个任务都得到大概等量的CPU时间。
容量调度器
支持多个队列,每个队列可配置一定的资源量,每个队列采用 FIFO 调度策略,为 了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交 的作业所 占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值 最小的队 列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择 ,同时考虑用户资源量限制和内存限制。但是不可剥夺式
3, MapReduce 的 shuffle 和sort阶段
Shuffle,洗牌描述着数据从map task输出到reduce task输入的这段过程。 MR的核心。
http://langyu.iteye.com/blog/992916
4,join
当输入的数据来自多个文件时,需要做文件连接。包括Reduce端连接,Map端连接,Map过滤后的Reduce连接。
三,HDFS分布式文件存储系统
2,系统构架
NameNode:系统管理者,提供数据存放的对应关系,为查询者快速查到数据服务。索引。
Secondary NameNode:保存NameNode的快照,在NameNode出现故障时进行数据恢复。
DataNode:数据存储节点。文件读写。
Client:文件系统的使用者,通过NameNode获得文件存储的元数据信息,然后在DataNode进行读写操作。
四,Hbase与Nosql( NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。)
1)放松事务的一致性要求,即存入的某条记录不一定能被立即查询到,关系数据库在实现数据一致性方面付出了极大的性能代价,如银行系统;关系数据库对高并发的适应性差。
2)改变固定的表结构,采用采用Key-value或者列存储方式等, 关系数据库的表结构扩展性极差,如系统的升级,功能的增加,往往意味着数据结构巨大变动。
3、Hbase构架
1)HBase位于结构化存储层,其底层存储支持HDFS。
列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。
1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;
1) 每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量
2) 既然是一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法。
列存储适合用在什么场合?
OLAP,数据仓库,数据挖掘等查询密集型应用。
列存储不适合用在什么场合?
相对来说,不适合用在OLTP,或者更新操作,尤其是插入、删除操作频繁的场合。
类型 | 部分代表 | 特点 |
列存储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 |
key-value存储 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) 一致性哈希算法 |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
对象存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |