2016-03-31 203 views
0

我從spark開始,從未使用過Hadoop。我有10個iMac,我已經用Hadoop 2.6安裝了Spark 1.6.1。我下載了預編譯版本,並將提取的內容複製到/usr/local/spark/。我做了所有環境變量設置SCALA_HOME,更改爲PATH和其他火花conf。我能夠運行spark-shellpyspark(帶有anaconda的python)。Spark RDD問題

我已經設置了獨立羣集;所有節點都顯示在我的Web用戶界面上。現在,通過使用python shell(在本地羣集上運行),我跟着this link's python interpreter word count example

這是我用過

from operator import add 

def tokenize(text): 
    return text.split() 

text = sc.textFile("Testing/shakespeare.txt") 
words = text.flatMap(tokenize) 
wc = words.map(lambda x: (x,1)) 
counts = wc.reduceByKey(add) 

counts.saveAsTextFile("wc") 

這是給我的錯誤,該文件shakespeare.txt上的從節點沒有被發現的代碼。在周圍搜索我明白,如果我不使用HDFS,那麼文件應該出現在同一路徑上的每個從節點上。這裏是堆棧跟蹤 - github gist

現在,我有幾個問題 -

  • 是不是RDD應該被分配?也就是說,它應該在所有節點上分發(當操作在RDD上運行時)該文件,而不是要求我分發它。

  • 我用Hadoop 2.6下載了spark,但是沒有任何Hadoop命令可用於製作HDFS。我提取了在spark/lib中找到的Hadoop jar文件,希望找到一些可執行文件,但沒有任何內容。那麼,火花下載中提供了哪些Hadoop相關文件?

  • 最後,我如何在羣集上運行分佈式應用程序(spark-submit)或分佈式分析(使用pyspark)?如果我必須創建一個HDFS,那麼需要額外的步驟?另外,我怎樣才能在這裏創建一個HDFS?

+0

你能告訴我們你的代碼嗎? –

+0

我已經添加了代碼和堆棧跟蹤。 – TrigonaMinima

+0

RDD不會爲您分發文件,這就是爲什麼您通常會使用HDFS等分佈式文件系統的原因。 – femibyte

回答

0

如果你讀了Spark Programming Guide,你會找到答案到你的第一個問題:

爲了說明RDD基礎,考慮下面的簡單程序:

val lines = sc.textFile("data.txt") 
val lineLengths = lines.map(s => s.length) 
val totalLength = lineLengths.reduce((a, b) => a + b) 

第一行從外部文件定義基礎RDD。此數據集 未加載到內存中或以其他方式執行:行僅僅是指向該文件的指針 。第二行將lineLengths定義爲地圖轉換的結果 。同樣,由於懶惰,lineLengths不是立即計算的 。最後,我們運行reduce,這是一個動作。 在這一點上,Spark將計算分解成獨立機器上運行的任務,每臺機器都運行其地圖部分和局部縮小部分,只返回其驅動程序的答案。

請記住,轉換是在Spark工作人員上執行的(請參閱link,幻燈片n.21)。

關於第二個問題,Spark只包含libs,如您所見,使用Hadoop基礎結構。您需要首先安裝Hadoop集羣(Hdfs等),才能使用它(使用Spark中的庫):請參閱Hadoop Cluster Setup

要回答你最後的問題,我希望official documentation有幫助,特別是Spark Standalone

+0

啊!謝謝。我遵循了您指出的相同官方文檔,但沒有提及設置Hadoop集羣。因此,後續問題 - – TrigonaMinima

+0

Hadoop不是Spark,這就是您在我發佈的鏈接中找不到任何內容的原因。我用hadoop集羣設置鏈接更新了我的答案。 – Markon

+0

設置hadoop集羣后,我必須啓動namenode,spark會自動使用它? – TrigonaMinima