我正在嘗試更改應用程序中處理的方法數據。數據首先從數據庫接收並存儲在消息隊列中。我希望數據直接放在hdfs中。我不希望數據寫入文件並轉移到hdfs。我將從HDFS處理數據並將結果導入hdfs。我可以從Java程序寫入數據到HDFS嗎?而不是給hdfs複製命令?將數據存儲在hdfs而不是消息隊列中
0
A
回答
0
有幾個原因說明你的方法不可取。
將每個消息寫入hdfs將是一個代價高昂的操作。
你不能直接寫消息給hdfs,它必須首先寫入文件,並且需要放入hdfs。
方法2會在hdfs中產生很多小文件,增加名稱節點的負擔來跟蹤每個文件塊。
我會建議,爲消息隊列設置一個閾值,達到該閾值後,將所有消息移動到文件,然後移動到hdfs。
0
根據您當前的設置,您有幾個選項。
- Sqoop - http://sqoop.apache.org/ - 適用於批量結構化數據存儲(關係數據庫)和HDFS之間傳送。不知道更多關於你的設置,這可能會或可能不適合你。
- Apache Spark - https://spark.apache.org/ - 可以從多種來源讀取,包括ZeroMQ,Kafka,HDFS等。它還支持自定義輸入(來源)。您也許可以從隊列中以流方式處理所需的數據,並直接輸出到HDFS。再次,這取決於你的設置。
- Apache Kafka/MapReduce - http://kafka.apache.org/ - 這可能不是一個選項,但使用Apache Kafka作爲'隊列'可以讓你運行MapReduce,直接輸出到HDFS。
- WebHDFS/HTTPfs - https://hadoop.apache.org/docs/r1.0.4/webhdfs.html - HDFS的REST接口。您可以將從數據庫中提取的任何內容與POST數據直接結合到HDFS。這確實有一些警告,但我不會不謹慎地推薦它。
選項2和3似乎並不完全符合您的要求,但可能是妥協。
相關問題
- 1. 在消息隊列中存儲變量
- 2. azure隊列存儲 - 將消息放回隊列
- 3. 如何確保JMS隊列將消息保存在持久存儲中而不是堆中?
- 4. Azure隊列存儲不發送隊列消息
- 5. 將消息存儲在內存而不是JVM上 - ActiveMQ
- 6. Azure隊列存儲消息大小
- 7. 數據庫消息隊列
- 8. 從內存轉儲中查找線程消息隊列中的消息數
- 9. 在哪個文件中,隊列消息存儲在TIBCO EMS中?
- 10. 如何配置Yii2 i18n在數據庫而不是文件中存儲消息?
- 11. 將數據存儲在內存中而不是在SD卡上?
- 12. 在數據庫中存儲scrapy隊列
- 13. 在數據庫中存儲隊列
- 14. 在數據庫中存儲MSMQ隊列
- 15. 限制Azure存儲隊列中消息處理嘗試次數
- 16. 從消息隊列中檢索數據
- 17. WebJob消息提交總是去毒隊列而不是實際隊列
- 18. 將對象保存在MemCache中而不是數據存儲區
- 19. Azure調度程序:將消息放入存儲隊列
- 20. 單個隊列上的消息隊列存儲限制不起作用?
- 21. Azure函數根據消息數據將消息路由到隊列名稱
- 22. 將數據信息存儲在SESSION中而不是使用MySQL查詢?
- 23. HDFS複製 - 數據存儲
- 24. 如何在遠程機器未連接時將消息保存在傳出隊列中而不將消息發送到遠程隊列?
- 25. 如何獲得消息而不在Activemq中創建隊列
- 26. 消息隊列和數據庫插入
- 27. 檢查的消息隊列存在
- 28. Azure存儲隊列消息(在特定時間顯示)
- 29. 消息隊列內容存儲在哪裏?
- 30. 將消息存儲在數據庫中,隱私問題