2012-04-30 47 views
4

我正在考慮學習hadoop,但不知道它是否能解決我的問題。基本上我有一個隊伍和一羣工人的工作。每個工作人員都會進行少量工作,然後保存結果(如果成功)或將其發送回隊列以供進一步處理。我的問題是可擴展的,受限於網絡上的帶寬(ec2),這將永遠跟不上多個CPU處理數據。我想也許我可以用hadoop集羣在Java中運行我的作業,並讓hadoop通過隊列分配工作。這會是一個更好的方法嗎?我正確地假設hadoop可以有一個隊列,並嘗試儘可能在本地運行作業,以儘量減少帶寬使用並最大限度地提高CPU使用率?我的程序非常受CPU限制,但是我最近遇到的大部分問題都與網絡上的工作有關(我想盡可能保持本地化),但是我看到的hadoop教程與我的問題之間的區別在於在教程中,所有的工作都是事先知道的,而我的程序不斷爲自己創造新的工作(直到它最終完成)。這會起作用嗎?它能幫助我減少通過網絡傳遞消息的影響嗎?hadoop可以用作分佈式隊列服務器嗎?

對不起我是hadoop的新手,想知道它是否能解決我的問題。

+0

RabbitMQ?...... – PurplePilot

+0

@PurplePilot我現在實際上使用rabbitmq。但是我的工作很小(但很多),我注意到通過網絡傳輸工作延遲了我的工作(獲得最高200-300mb/s的吞吐量,並且我的cpus處理工作速度更快,然後網絡可以發送它)。我試圖看看是否有什麼能夠使工作儘可能地保持在當地。 –

回答

1

Hadoop是關於在大型數據集上以批處理模式運行的作業。很難讓它產生類似隊列的行爲,但並非不可能。有Apache ZooKeeper,它可以讓你同步建立一個隊列,如果你需要的話。

有很多工具可以解決它看起來像你試圖解決的問題。我建議看看RabbitMQ。如果你使用Python,Celery是相當不可思議的。

+0

感謝您的好評。我目前使用的是rabbitmq(它很棒,但是因爲我有幾十億個小工作項目,網絡開銷隨着帶寬的限制而變得越來越高)。問題是通過網絡傳遞數據來做工作的延遲。我的工作是批量工作,但它可以很快完成每個項目,我試圖查看我的程序是否創建了一個工作項目,以保持本地處理還是通過網絡傳輸? –

+0

基本上,Rabbitmq解決了我的問題,但我試圖得到一個類似的功能,減少網絡IO。 –

+0

該文件仍然需要被攝入Hadoop,它將通過網絡3x進行復制。然後,它會在本地處理它。在這個過程中有足夠的開銷,你可能仍然更好。基本上,如果您想在Hadoop中進行任何快速操作,您將會遇到不好的時間。 –

相關問題