2012-06-04 58 views
3

我創建了一個python UDF來將日期時間轉換爲不同的時區。該腳本使用python(或者jython)不附帶。我試了兩件事情:在亞馬遜EMR上爲Pig UDF加載外部python模塊

  1. 自舉PIG安裝它自己的Jython和包括 是Jython安裝pytz。我無法讓PIG使用新安裝的jython ,它仍然會恢復到Amazon的jython。
  2. 設置PYTHONPATH到新的模塊已安裝
  3. 設置HADOOP_CLASSPATH/PIG_CLASSPATH到Jython的一個新安裝的本地目錄

每一種與結束「導入錯誤:沒有模塊名爲pytz」時我嘗試加載UDF腳本。如果我刪除pytz,腳本加載得很好,所以它肯定是給它帶來問題的外部模塊。

編輯:最初把這個作爲一個評論,但我覺得還是讓編輯:

我已經想盡辦法,我知道的獲得PIG承認另一Jython的罐子。這沒有奏效。亞馬遜的jython在這裏:/home/hadoop/.versions/pig-0.9.2/lib/pig/jython.jar,並認識到這個sys.path:/ home/hadoop/lib/Lib。我無法弄清楚如何針對這個jar構建外部庫。

+0

http://stackoverflow.com/questions/6811549/how-can-i-include-a-python-package-with-hadoop-streaming-job/6811775#6811775可能會幫助你(他們正試圖加載不同的模塊,但該方法應該是相同的) –

+0

或http://stackoverflow.com/questions/8129543/hadoop-streaming-importing-modules-on-emr –

+0

是的,我試着引導包到每個奴隸。它的工作,但問題是,我不能讓PIG使用我已經安裝的jython jar。相反,它總是選擇Amazon沒有安裝任何外部庫的jython jar。 –

回答

0

你可以手動破解你的jython腳本中的sys.path嗎?

+0

我可以嘗試,但我認爲jython jar是由Hadoop加載的。由於我將路徑切換到不是針對加載的jython jar構建的庫,我不確定這是否可行。我會嘗試一下。 –

+0

我將新的jython jar路徑附加到sys.path列表中,但仍然抱怨找不到該模塊。 –

+0

你能夠從你的UDF腳本打印sys.path嗎?我想知道你是否破解了PYTHONPATH以包含一個包含pytz的目錄,如果該目錄實際上將其放入sys.path中,或者如果hadoop覆蓋它。如果它被覆蓋,那麼也許你可以從你的腳本手動添加一個目錄到sys.path,而不是添加你特殊的jython jar。 – mhawthorne