閱讀690 返回首頁    go 技術社區[雲棲]


Apache Crunch設計:基礎數據處理

背景

Apache Crunch是FlumeJava的實現,為不太方便直接開發和使用的MapReduce程序,開發一套MR流水線,具備數據表示模型,提供基礎原語和高級原語,根據底層執行引擎對MR Job的執行進行優化。從分布式計算角度看,Crunch提供的許多計算原語,可以在Spark、Hive、Pig等地方找到很多相似之處,而本身的數據讀寫,序列化處理,分組、排序、聚合的實現,類似MapReduce各階段的拆分都可以在Hadoop裏找到影子。

本文介紹Crunch在數據表示模型、操作原語、序列化處理方麵的設計和實現類,關於Pipeline的不同種實現以及與hadoop MR、Spark引擎的對接將在之後的文章裏介紹。就像之前說的,很多內容可以在hadoop、spark、pig等地方找到相似之處。

閱讀Crunch的設計和源碼結構,可以更好地理解FlumeJava論文的描述,更好地剖析MapReduce的計算和各階段組成,熟悉Hadoop MR Job的API等,可以提供很好的實現思路。


參考資料:UserGuide 源碼


下圖為七種Hadoop之上的計算表示層對比:



數據模型和基礎類

三種分布式數據集的抽象接口:PCollection,PTable,PGroupedTable

Ø  PCollection<T>代表分布式、不可變的數據集,提供parallelDounion方法,觸發對每個元素進行DoFn操作,返回新的PCollection<U>

Ø  PTable<K, V>是PCollection<Pair<K,V>>實現,代表分布式、未排序的multimap。除了繼承自PCollection 的parallelDo,還複寫了union方法,提供了groupByKey方法。groupByKey方法對應MapReduce job裏的排序階段。在groupByKey操作裏,開發者可以在shuffle過程裏(參見GroupingOptions類)做細粒度的reducer數目、分區策略、分組策略以及排序策略控製

Ø  PGroupedTable<K, V>是groupByKey操作的結果,代表分布式、排過序的map,具備迭代器,其實現是PCollection<Pair<K,Iterable<V>>>。除了繼承自PCollection的parallelDo、union,提供combineValues方法,允許在shuffle的map端或reduce端使用滿足交換律和結合律的聚合算子(參見Aggregator類)作用於PGroupedTable實例的values上


PCollection裏的兩種基本原語接口:

最後更新:2017-04-03 05:39:40

  上一篇:go 關於activitygroup過時,用frament替換操作
  下一篇:go Cocos2d-x中停止播放背景音樂