jichang 寫:
我現在想針對這些 table 的資料做一些運算 例如 每10筆資料 算一個平均值,計算出來的數值在儲存到另一個 hbase 的 table
我的問題是
我應該是要寫一個JOB 然後 每一個 MAP 對應一個 TALBE 也就是有1個job 300 個map
或是應該寫成 300個JOB 然後每一job會產生一個 MAP 也就是有300個job 300 個map
不知道哪一種設計是比較理想的。
謝謝!
感覺差不多。唯前者的準備時間較短。
我想限制只會在於 RegionServer 能否容許這麼多同時的連線。
前者 1 個 Job 同時有 300 個 map ,會根據 Mapper Capacity (假設有 5 台,各 2 個 mapper,容量為 10 個 mapper) 分配
所以最多只有 10 個 HBase 連線。又假設 5 台只有 4 個 RegionServer,加上 Table 各自獨立,假設均勻分布於 4 個 RegionServer
那每個 RegionServer 同時最多 3 個連線。應該應付得過來。
後者的缺點是準備時間會變長,也就是每個 Job 產生 jar 檔,複製到 TaskTracker,生成 Child 執行 mapper 的 JVM 啟動時間。
剩餘的部份,根據上述說明,同時最多也只會跑 10 個 Job,10 個 mapper。每個 RegionServer 最多 3 個連線。
純粹用想的,實務上因為還會受 RegionServer 的分佈情形影響,故僅供參考。
謹記一個原則:(準備時間) + (資料傳輸時間) << (Mapper 計算時間) 才會有最佳的效率。
若純以此為考量,後者應該比較難滿足上述不等式,因為準備時間前者只有 1 份,後者有 300 份。
- Jazz