2013-12-16 34 views
0

我們是Hadoop的新手,我們認識到hadoop是用於處理大數據,以及笛卡爾產品如何非常昂貴。然而,我們正在進行一些實驗,我們正在運行類似於MapReduce設計模式書中的笛卡爾產品工作,除了計算所有中間結果的平均值的簡化器(僅包括A * B的上半部分,所以總和爲A * B/2)。 我們的設置:3節點簇,塊大小= 64M,我們測試了從 5000點(130KB)到10000點(260KB)範圍內的不同數據集大小。混亂的hadoop如何分裂工作

觀察:

1-所有地圖任務在一個奴隸的一個節點上運行,有時主計算機上,其他時間,但它從來沒有超過一個machine.Is有沒有辦法處理迫使hadoop分配分割因此映射任務在機器之間?基於什麼因素決定了hadoop決定哪臺機器將要處理地圖任務(在我們的例子中,一旦它決定了主人,在另一種情況下,它決定了一個奴隸)。 2-在所有我們測試同一作業的不同數據大小的情況下,我們得到4個地圖任務。由於我們的數據大小小於塊大小,爲什麼我們有4個分塊不是1.

3-有沒有辦法查看有關正在運行的作業的精確分割的更多信息。

在此先感謝

回答

1

您使用的是哪個版本的Hadoop?我將假設使用YARN的更高版本。

1)Hadoop應該自動將映射任務分配到羣集中,而不是支持任何特定的節點。它將盡可能接近數據放置一個map任務,即它將在同一個主機上選擇一個NodeManager作爲承載一個塊的DataNode。如果這樣的NodeManager不可用,那麼它只會選擇一個節點來運行你的任務。這意味着您應該在啓動作業時看到所有從屬節點正在運行任務。阻止Hadoop使用節點的其他因素(如NodeManager關閉)或沒有足夠內存來啓動特定節點上的JVM。

2)您的文件大小是否略高於64MB?即使一個字節超過67,108,864個字節也會產生兩個分割。 CartesianInputFormat首先計算數據集中所有塊的叉積。有兩個塊的文件將創建四個拆分 - A1xB1,A1xB2,A2xB1,A2xB2。嘗試一個較小的文件,看看你是否仍然得到四個分裂。

3)您可以在ResourceManager的UI中看到正在運行的作業。 https://:8088將打開主頁面(MRv1的jobtracker-host:50030),您可以從那裏導航到正在運行的作業,這將使您看到正在運行的單個任務。如果您想要了解輸入格式的更多細節,請在CartesianInputFormat的getSplits方法中添加一些日誌語句,然後重新運行您的代碼以查看發生了什麼。

+0

感謝您的澄清,是的,我們正在使用hadoop 2.0。 關於第二點,儘管我們的數據大小小於塊大小,但我們總是得到四個拆分, – user17476

+0

機器是否具有大量內存? YARN實際上會監視羣集上的資源,除非有足夠的空間來啓動JVM,否則它不會啓動任務。可以解釋一些你在#1中看到的問題。 將一些日誌語句添加到CartesianInputFormat代碼可能有助於解釋正在從作業生成什麼輸入分割。它只能創建一個小於塊大小的輸入映射任務。 –