并行计算/内存计算/spark

1.并行计算

传统容错方法

同步、检查点设置等。

2.内存计算 memory computing

如何抽象多台机器的内存?

  • 分布式共享内存(DSM)

  统一的地址空间。很难容错。

  • 分布式键值存储(RAMCloud)

  细粒度访问。可修改数据(mutable)。容错开销大。

两者的容错机制一般采用副本或者log。(密集数据应用开销大。比内存写慢10-100倍)

3.Spark

着重容错处理和性能优化。不适合细粒度修改数据(fine granularity of updates.best for batch workloads)

解决难容错方案-RDD(resilient distributed datasets)

  • 基于数据集合,而不是单个数据。
  • 确定性的粗粒度操作。
  • 数据产生不能修改。(容错:可以通过RDD的生成过程,重复计算,恢复数据)
  • 数据集变换产生新的数据集。

 

编程接口

  • scala 

  函数语言。交互使用。

  • 基于RDD(装饰者设计模式)
  1. transformation (define a new RDD)  惰性机制                (map,filter,groupBy,sort,distinct...)
  2. action (return a result to driver program)          (count,collect,foreach...)

 

性能优化

  • 数据划分 pagerank
  • 对重用的RDD使用cache提高性能
  • 持久化(避免重复计算) rdd.cache()

分区

1.并行

2.分区方法:hash,range

 

k-v rdd

keys

values

sortBykey

sortby

groupBykey

 

数据读写:

1.本地数据

tf=SC.textfile()

2.读写hbase  思维定位

rowkey column family

 

缺点

对于细粒度数据更新,效率不高。

如在BFS遍历中,RDD的只读特征造成无用的内存拷贝。

 

与mapreduce

mr具有自动容错,自动负载均衡机制,但是建立的编程模型较简单,且中间数据需要落磁盘,不适用迭代式计算等;

sprak将mr一般化,基于数据集操作,便于容错;开发了Spark SQL.Streaming等组件,建立统一的编程框架,但是也有自身的局限性。

 

窄依赖:无shuffle,可优化;只能对应1个子分区;

宽依赖:有shuffle,不可优化,可以对应多个子分区;只要发生了shuffle,就一定会写磁盘(需要等待)。

 

posted @ 2019-07-01 08:52  hhhl  阅读(286)  评论(0编辑  收藏  举报