目录
1、Hive
2、Spark编程模型
3、Spark架构
4、Hbase
5、Flink?编辑
6、Zookeeper
7、技术应用场景
8、参考资料
1、Hive
SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.userid = u.userid);
2、Spark编程模型
val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")
?
- RDD 定义了很多转换操作函数,比如有计算 map(func)、过滤 filter(func)、合并数据集 union(otherDataset)、根据 Key 聚合 reduceByKey(func, [numPartitions])、连接数据集 join(otherDataset, [numPartitions])、分组 groupByKey([numPartitions]) 等十几个函数。
- Spark 只有在产生新的 RDD 分片时候(shuffle),才会真的生成一个 RDD,Spark 的这种特性也被称作惰性计算。
3、Spark架构
- Spark 有三个主要特性:
- RDD 的编程模型更简单
- DAG 切分的多阶段计算过程更快速
- 使用内存存储中间计算结果更高效
- 和 MapReduce 一个应用一次只运行一个 map 和一个 reduce 不同,Spark 可以根据应用的复杂程度,分割成更多的计算阶段(stage),这些计算阶段组成一个有向无环图 DAG,Spark 任务调度器可以根据 DAG 的依赖关系执行计算阶段。
- Spark 的 DAGScheduler 在遇到 shuffle 的时候,会生成一个计算阶段,在遇到 action 函数的时候,会生成一个作业(job)
- 计算阶段划分的依据是 shuffle,不是转换函数的类型。有的函数有时候有 shuffle,有时候没有。比如上图例子中 RDD B 和 RDD F 进行 join,得到 RDD G,这里的 RDD F 需要进行 shuffle,RDD B 就不需要。因为 RDD B 在前面一个阶段,阶段 1 的 shuffle 过程中,已经进行了数据分区。分区数目和分区 Key 不变,就不需要再进行 shuffle。这种不需要进行 shuffle 的依赖,在 Spark 里被称作窄依赖;相反的,需要进行 shuffle 的依赖,被称作宽依赖。
- Spark的执行过程
4、Hbase
- NoSQL,主要指非关系的、分布式的、支持海量数据存储的数据库设计模式。
- HBase 为可伸缩海量数据储存而设计,实现面向在线业务的实时数据访问。
- 传统关系型数据库对存储在其上的数据有很多约束,学习关系数据库都要学习数据库设计范式,事实上,是在数据存储中包含了一部分业务逻辑。而 NoSQL 数据库则简单暴力地认为,数据库就是存储数据的,业务逻辑应该由应用程序去处理
5、Flink
6、Zookeeper
- ZooKeeper 主要通过Paxos算法提供数据的一致性服务
- CAP 原理:一个提供数据服务的分布式系统无法同时满足数据一致性(Consistency)、可用性(Availibility)、分区耐受性(Patition Tolerance)这三个条件。
- 一致性:每次读取的数据都应该是最近写入的数据或者返回一个错误(Every read receives the most recent write or an error),而不是过期数据。
- 可用性:每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的(Every request receives a (non-error) response, without the guarantee that it contains the most recent write),也就是说系统需要一直都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是最新的。
- 分区耐受性:即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然应该是可以操作的(The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes)。
- 当网络分区失效,也就是网络不可用的时候,如果选择了一致性,系统就可能返回一个错误码或者干脆超时,即系统不可用。如果选择了可用性,那么系统总是可以返回一个数据,但是并不能保证这个数据是最新的。
- 所以,关于 CAP 原理,更准确的说法是,在分布式系统必须要满足分区耐受性的前提下,可用性和一致性无法同时满足。
- ZooKeeper 通过一种树状结构记录数据。节点类型有临时节点和持久节点;可监听路径实现master选举、集群上下线等功能
7、技术应用场景
- HDFS:业务数据库数据、埋点数据、日志数据、爬虫数据
- Hbase:高并发实时读写,单点或range查询。例如:实时存储滴滴司机上传的gps数据,当订单行程结束的时候,会从 HBase 读取订单行程期间的 GPS 轨迹数据,计算路程和车费
8、参考资料
|