Hadoop Application Architectures-OReilly 2015-ReadingNotes.md
數據建模
- p23 HBase基於TTL的舊數據清除(合併到新HFile時跳過)
- p25 爲了能夠在Hive外部使用metastore,一個新項目HCatalog啓動了
數據移動
- p32 HBase的掃描速度大約是HDFS的1/10-1/8,訪問單個記錄的時間爲毫秒級別
- p36 Flume攔截器?
- p40 小文件:
- 使用Solr
- 使用HBase
- 使用容器格式,如SequenceFiles或Avro
- 可掛載的HDFS
- Fuse-DFS(會顯著影響性能,模型持續性較差?)
- NFSv3
- Sqoop:Hadoop與關係數據庫的批量傳輸
- 可能的瓶頸:數據傾斜:Mapper對主鍵的劃分不均勻
- 2種方法鑑別更新過的行:
- Sequence ID
- 時間戳
- Flume架構:數據源 --> 攔截器 --> 選擇器 --> Channel --> Sink
- p56 Camus: 從Kafka中批量加載數據
數據處理
- MapReduce
- Spark
- RDD
- 抽象層
- Pig
- Crunch
- 核心:Pipeline對象,done()觸發流水線的執行
- Cascading
- Hive
- 外部表導入:CREATE EXTERNAL TABLE ... FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'foo';
- 收集統計信息(用於CBO?):ANALYZE TABLE foo COMPUTE STATISTICS
- 支持各種不同的分佈式JOIN:
- map關聯(hash關聯)
- bucketed join
- sorted buckted merge join
- EXPLAIN(查詢計劃):用戶應該養成習慣,查看Hive究竟在背後做了什麼
- Impala
- DataNode:查詢規劃器 --> 查詢協調器 --> 查詢執行器
- 分佈式MPP數據庫:(參考本書附錄)
- broadcast hash join(將小表複製到所有大表數據所在的節點上,以hashtable形式加載到內存作過濾)
- partitioned hash join(先hash分區,再分發,每個節點緩存數據集的一個子集)
- 與Hive不同,Impala後臺服務是長期運行的進程
- 用LLVM編譯查詢,將查詢用到的方法編譯爲優化的機器碼
- p102 如果查詢需要掃描非常多的數據,節點故障不可以強制要求重啓恢復查詢,推薦使用Hive
通用範式
- 依據主鍵去重
- windowing分析
- 注意SQL語句裏的OVER關鍵詞
- 基於時間序列的更新
- 利用HBase的版本特性
- 使用RecordKey-StartTime作爲row key
- 重寫HDFS更新整個表
- 利用分區分開存儲當前記錄和歷史記錄
圖處理
- BSP模型
- Giraph
- Spark GraphX
協調調度
- Airbnb Chronos on Mesos?
- OOzie
- 工作流範式
- 點對點
- 扇出(fork-and-join)
- 分支決策
- 調度模式
- 頻率
- 時間/數據觸發
- 工作流範式
近實時處理
- p170 lambda架構
- Storm
- 在要求“僅處理1次”時,2個選擇:(1)事務性拓撲;(2)Trident
- Spark Streaming