您的位置:首页 > 大数据

大数据运算系统(4)--- 内存计算系统

2017-05-30 16:23 309 查看
内存计算系统
一、内存数据库
1、起源发展
(1)体系结构和硬件技术的巨大发展:GPU多核芯片+多级高速缓存+大容量内存+大容量硬盘SSD。

(2)内存处理优点:去除硬盘读写开销,提高处理速度。
(3)关系型内存数据库:
Memory-resident:可能在buffer pool中。
MMDB:可能彻底不用buffer pool,改变了系统内部设计。
2、关键技术
Sorting优化:使用quick sort而不是replacement selection
Hash join优化
B+ trees
Vectorization;处理器加速;压缩
3、MonetDB
SQL -> MAL -> BAT;内存列式存储,数据在类似数组的结构中。
4、在商用数据库中的实现
SAP HANA:所有数据存为列,变长数据存在dictionary,列中存dictionary的位置;Main
data为了读,过段时间更新,Delta data为了写;热点数据放在内存里;目标:OLTP和OLAP放在一个系统。

二、内存键值系统
1、Memcached
单机的内存的key-value syore;数据在内存中以hash table的形式存储;支持最基础的<key, value>数据模型;通常被用于前端的cache;可以使用多个memcached+sharding建立一个分布式系统。
2、Redis
提供更加丰富的类型;key可以包含hashes,lists,sets和sorted sets;支持副本和集群。
3、Memcached内部结构



(1)单机系统
(2)实现自定义的协议,支持Get/Put等请求和响应。<文本方式的协议,二进制协议>
(3)采用多个链表管理内存。采用多个链表,每个链表内存块大小相同。
(4)key-value采用一个全局的Hash Table进行索引。
(5)多线程并发互斥访问。

三、内存MapReduce
Spark:面向大数据分析的内存系统
1、原理
可以从HDFS中读数据,但是运算中数据存放在内存中,不使用Hadoop,而是新实现了分布式的处理
目标是低延迟的分析操作。



2、运算和数据的表达
目标:高效、容错
RDD(resilient distributed data sets):一个数据集;只读,整个数据集创建后不能修改;通常进行整个数据集的计算。
优点:并发控制被简化了;可以记录lineage(数据集上的运算序列),可以重新计算。并不需要把RDD存储在stable storage    上。
3、RDD运算
(1)Transformation:RDD->RDD
(2)Action:RDD->计算结果
4、编程
Spark支持的语言:Scala,Java,Python
流程:建立SparkContext -> 读文本文件生成一个RDD -> 进行RDD操作
(1)Java RDD的类型

Class JavaRDD<T>:元素类型为T的RDD
Class JavaPairRDD<K,V>:元素包含一个K和一个V

(2)RDD输入

Class JavaSparkContext中函数
JavaSparkContext.textFile(path):从文本文件读入,每一行是一个元素,元素类型为String;返回JavaRDD<String>。
JavaSparkContext.wholeTextFiles(path):读一个目录,每个文件称为一个元素;key是文件路径,value是文件内容。返回JavaRDD<String,String>

(3)RDD transformation and RDD action



5、实现
(1)运算过程
读入内存一次,在内存中可以多次处理。
(2)系统结构



每个应用程序包含:

一个SparkContext(driver主程序创建,协调多个worker运行,发出RDD操作要求),多个Executor(在不同worker node上,执行并行运算,存储数据)(多个应用程序的SparkContext隔离,无法共享数据,必须通过外部的文件系统进行数据共享)。
(3)Spark中RDD存储方式
内存缓存、内存Serialized(顺序化)、多个内存副本、硬盘保存、多种组合
(4)Spark运算的运行

Transformation(仅记录不运算,lazy);Action(遇到Action时才执行之前记录的运算)。
容错/内存缓冲替换:当内存缓冲的RDD丢失时,可重新执行记录的运算,重新计算该RDD。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐