衍生資料—批次處理
利用分散式檔案系統完成批次資料的計算。
文本於此


資料是什麼?
- 原始資料(Source Of Truth, SOT)
- 衍生資料(Derived Data)
類型 |
模式 |
時間 |
注重 |
服務處理 |
請求、回應 |
短 |
高可用、低延時 |
批次處理 |
請求 |
長 |
通量(throughput) |
串流處理 |
消化、產出 |
無 |
負載 |
- Unix 哲學
- MapReduce on HDFS
- Dataflow engine

- 每個小工具做好自己的事
- 輸出=輸入
- 快速設計,持續補強
- 盡量使用工具

- 管線(pipeline)
- 定界符(delimiter)
管線的強大:比較一下 HTTP 和 撥號 BBS
和其他程式有什麼差?
function getLatencyDistribution(filename) {
const stream = readFileLineByLine(filename);
const counter = {};
for (const line of stream) {
const latency = line.split(' ')[3];
const latencyInt = parseInt(latency, 10);
counter[latencyInt] = (counter[latencyInt] || 0) + 1;
}
return Object.entries(counter)
.map((entry) => ({latency: entry[0], count: entry[1]}))
.sort((a, b) => a.latency - b.latency);
}
可以自己寫工具。
| import os |
| |
| r, w = os.pipe() |
| fr = os.fdopen(r, "r", 1) |
| fw = os.fdopen(w, "w") |
| |
| while fr.readable(): |
| output = myProcess(fr.read()) |
| fw.write(output) |
缺點
{print $4}
是什麼?
- CSV v.s. WSV
- 輸入是多元時會讓程序變得很複雜
高容錯性:輸出不會改變輸入
分散式 |
單台 |
Hadoop |
Unix |
HDFS |
管線 |
MapReduce |
在這之上的框架 |
HDFS
- shared-nothing
- daemon-based
- 備份




如何處理熱點偏斜?
- 隨機分送並整合
- map-side join
- 分兩個程序
Reduce-side v.s. Map-side
v.s. Massive Parallel Processing(MPP)



面向 |
批次處理 |
MPP |
資料 |
生/原始 |
結構化 |
產出 |
衍生資料 |
報表 |
復原 |
輕易 |
較難 |
彈性 |
高 |
低 |
直觀 |
低 |
高 |
容錯 |
容易 |
原子性 |
差異性:
- 格式
- 拆成 Mapper 和 Reducer
- 每次輸出會落檔
新型態的框架萌生

要怎麼重來?
面向 |
批次處理 |
MPP |
資料 |
生/原始 |
結構化 |
產出 |
衍生資料 |
報表 |
復原 |
輕易 |
較難 |
彈性 |
高 |
低 |
直觀 |
低 |
高 |
容錯 |
容易 |
原子性 |
總結
批次程式不是排程打 API
衍生資料—批次處理 利用分散式檔案系統完成批次資料的計算。 文本於此
{"metaMigratedAt":"2023-06-16T20:45:36.753Z","metaMigratedFrom":"YAML","title":"衍生資料—批次處理","breaks":true,"contributors":"[{\"id\":\"c945b58d-6d0e-4680-a2c3-b297ba669e68\",\"add\":32764,\"del\":16958}]","description":"利用分散式檔案系統完成批次資料的計算。"}