這是否意味着第一個mapreduce的輸出作爲第二個mapreduce作業的輸入?那麼,總共有兩個mapreduce作業?如果輸入是夫婦序列(客戶端,日期),則輸出是(日期,客戶端,max_requests)。如何使用兩個mapreduce作業的管道來查找每天大部分請求的客戶端。什麼是兩個mapreduce作業的管道?
0
A
回答
0
MR本質上是一種生成按不同鍵排序的數據集輸出的方法。 reduce函數已經可以聚合到最終結果。
對於您的情況,Mapper會將輸入數據映射到您描述的類型的記錄。
,, other_data
,這映射到:
< _>,other_data
這可能比較容易產生複合鍵。而不是創建一個實現K個子類,V,您可以將此映射到執行的每一天,每個客戶端正確排序字符串類型:
YYYYMMDD_
這可以保證每天每客戶端的所有記錄由同一個減速器處理。然後您可以簡單地統計記錄的數量並將其輸出爲當天的新記錄。然後分解原始密鑰,併發出看起來像新的記錄:
年月日,客戶端,
再就是選擇: - 加載在內存中的文件,如果適合,並確定每天最大。 - 將文件加載到數據庫中,並做SQL選擇 - 運行另一個MR工作:
身份映射:年月日,客戶端,<#請求> - >年月日(鍵)+客戶端,#請
然後在減速機中,您現在可以獲得所有客戶的一天時間。然後,您只需每天維護最高#次請求的狀態以及哪個客戶端,何時更改日期或到達文件末尾,輸出具有最高號碼的客戶端ID。
我個人認爲最簡單的方法就是使用谷歌雲平臺的BigQuery。您可以在(gzip壓縮的)文件加載到一個簡單的模式和運行對一個BQ聲明:
select date, client, num_requests, row_number() over(partition by date order by num_requests desc) as rn
from (
select date, client, count(client) as num_requests from my_table
group by date, client
) as T
where rn = 1
相關問題
- 1. 多個管道作業與單個大型管道作業
- 2. 多個MapReduce作業
- 3. 爲什麼AWS MapReduce中的彈性MapReduce作業流失敗?
- 4. Normal MapReduce作業和Sequential MapReduce作業有什麼區別和相似之處?
- 5. 多分支管道與管道作業
- 6. 每個管道作業的成本
- 7. 可靠的查詢管道這個管道是什麼意思?
- 8. 爲什麼這個管道工作?
- 9. Jenkins管道作業構建
- 10. 是什麼導致mapreduce作業爲hbase創建100000行只有一個地圖
- 11. 剖析MapReduce作業
- 12. HbaseTestingUtility和MapReduce作業
- 13. Mapreduce - 序列作業?
- 14. SecondaryNamenode和MapReduce作業
- 15. Mapreduce combinefileinputformat java.lang.reflect.InvocationTargetException當兩個作業訪問相同的數據時
- 16. 什麼時候應該關閉MapReduce作業中的HTablePool?
- 17. MapReduce作業中的多個鍵
- 18. 編寫一個空的MapReduce作業
- 19. 用於mapreduce作業的StreamInputFormat
- 20. 什麼是cron作業
- 21. 套接字類比:一個管道還是兩個管道?
- 22. Jenkins管道作業中爲什麼沒有「源代碼管理」選項卡?
- 23. MapReduce作業達到100%完成然後失敗的原因是什麼?
- 24. 管道常見的管道危害是什麼?
- 25. 使用相同的mapreduce代碼/ jar啓動多個mapreduce作業
- 26. 如何通過jenkins中的另一個管道作業構建並獲取管道作業的構建日誌
- 27. 什麼是sckit-learn的管道?
- 28. 什麼是grep管道的輸出
- 29. 什麼是Rails最好的後臺作業管理庫?
- 30. 爲什麼scan.setCacheBlocks(false)被推薦用於mapReduce作業?
[Hadoop中鏈接多個MapReduce作業]的可能的複製(http://stackoverflow.com/questions/2499585 /鏈接-多MapReduce的工作功能於Hadoop的) –