Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2020-09-24, 02:49

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 5 篇文章 ] 
發表人 內容
 文章主題 : Hadoop lib classpath, classNotFound的問題
文章發表於 : 2013-05-03, 14:20 
離線

註冊時間: 2013-05-03, 13:34
文章: 3
各位好,

我在跑mapreduce時,可以順利提交job,但是job分配到各個slaves上跑時,會丟出ClassNotFoundException
目前可以確定的是找不到hbase-xxx.jar和zookeeper-xxx.jar

提交job的方法是
在一台windows7以程式的方式,也就是跑main(),把map/reduce class包在jar裡,以jConf.setJar("myMR.jar")將這個job提交到的遠端cluster上。

目前確定的是
1. 在windows的本機上可順利執行(使用local hadoop JVM)
2. 如果在myMR.jar裡的lib放入hbase-xxx.jar和zookeeper-xxx.jar,亦可順利在遠端cluster上執行

但是hbase-xxx.jar和zookeeper-xxx.jar,應該是屬於環境的一部份,不希望提交這些jar,
所以我試著要讓cluster上的機器可以抓到這些jar


目前試過
1. 把這些jar放在$HADOOP_HOME或是$HADOOP_HOME/lib底下,重新啟動整個hadoop(其實這方法似乎不用重啟?)

2. 在/etc/profile加入以下,並重新啟動整個hadoop
HADOOP_HOME=/home/hadoop/cdh3/hadoop-0.20.2-cdh3u0
HBASE_HOME=/home/hadoop/cdh3/hbase-0.90.1-cdh3u0
ZOOKEEPER_HOME=/home/hadoop/cdh3/zookeeper-3.3.3-cdh3u0
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH :$HADOOP_HOME/lib:$HBASE_HOME/lib:$ZOOKEEPER_HOME/lib
(其實我不太確定hadoop是否會抓到$classpath)

3. 在$HADOOP_HOME/conf/hadoop-env.sh加入以下,並重新啟動整個hadoop
HADOOP_LIB=/home/hadoop/cdh3/hadoop-0.20.2-cdh3u0/lib
HBASE_LIB=/home/hadoop/cdh3/hbase-0.90.1-cdh3u0/lib
ZOOKEEPER_LIB=/home/hadoop/cdh3/zookeeper-3.3.3-cdh3u0/lib
export HADOOP_LIB HBASE_LIB ZOOKEEPER_LIB

但都會報同樣的錯,也就是java.lang.ClassNotFoundException

因為我試著要讓Hadoop Map/Reduce Administration網頁裡可以看到其中一台task traker成功執行,其他則報出ClassNotFoundException
所以上面的設定,只設定於namenode和其中一台task traker(事實上我並不清楚是否在compile階段就出錯了)

cluster的版本和client的版本皆是
hadoop-0.20.2-cdh3u0
hbase-0.90.1-cdh3u0
zookeeper-3.3.3-cdh3u0

是否我的設定和理解有錯誤?
有人可以幫幫我嗎?

非常感謝
whylu


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: Hadoop lib classpath, classNotFound的問題
文章發表於 : 2013-05-03, 15:18 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
先前的經驗是有把 hbase-*.jar 放到 $HADOOP_HOME/lib 底下,並重新啟動 Hadoop 即可。
(至少必須重新啟動 TaskTracker,因為 Runtime 的 CLASSPATH 在啟動時就指定了,不重開不會更新)

驗證方式:請在 TaskTracker 的主機上,下 ps ax | grep java 並檢驗 CLASSPATH 是否有 hbase-*.jar
或者直接 ps ax | grep hbase 看一下有無結果。

whylu 寫:
2. 在/etc/profile加入以下,並重新啟動整個hadoop
HADOOP_HOME=/home/hadoop/cdh3/hadoop-0.20.2-cdh3u0
HBASE_HOME=/home/hadoop/cdh3/hbase-0.90.1-cdh3u0
ZOOKEEPER_HOME=/home/hadoop/cdh3/zookeeper-3.3.3-cdh3u0
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH :$HADOOP_HOME/lib:$HBASE_HOME/lib:$ZOOKEEPER_HOME/lib
(其實我不太確定hadoop是否會抓到$classpath)

3. 在$HADOOP_HOME/conf/hadoop-env.sh加入以下,並重新啟動整個hadoop
HADOOP_LIB=/home/hadoop/cdh3/hadoop-0.20.2-cdh3u0/lib
HBASE_LIB=/home/hadoop/cdh3/hbase-0.90.1-cdh3u0/lib
ZOOKEEPER_LIB=/home/hadoop/cdh3/zookeeper-3.3.3-cdh3u0/lib
export HADOOP_LIB HBASE_LIB ZOOKEEPER_LIB


習慣上我都通通改在 hadoop-env.sh 中,
因為 /etc/profile 是只有 login 權限的才會讀取。CDH3 的 hadoop 身份有些並沒有 default shell 也不會去讀 /etc/profile。
而且建議您確認一下 TaskTracker 的 $HADOOP_HOME/lib 是否也有加入 hbase-*.jar 跟 zookeeper-*.jar。

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: Hadoop lib classpath, classNotFound的問題
文章發表於 : 2013-05-06, 22:03 
離線

註冊時間: 2013-05-03, 13:34
文章: 3
jazz:

抱歉這麼慢回應,今天試了一陣子,終於可以正常運作了

如同您所說的,將jar放在${HADOOP_HOME}\lib內,或是在$HADOOP_HOME/conf/hadoop-env.sh設定path,都可以解決。

謝謝您為我的疑問解惑,非常感謝您


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: Hadoop lib classpath, classNotFound的問題
文章發表於 : 2013-05-10, 15:25 
離線

註冊時間: 2013-05-03, 13:34
文章: 3
這裡補上使用DistributedCache方式來解決第三方元件相依性的方法

方法:
把dependent-jar先上傳到HDFS,然後把jar在hdfs上的path,加到job config內,如此在執行期就從dfs內直接抓到那些dependent-jar。

步驟:
(1) 先將dependent-jar複製到dfs內:
指令範例如下
代碼:
hadoop fs -copyFromLocal google-collections.jar /lib/Test/google-collections.jar


(2) 在提交job的config加入這個path
代碼:
System.setProperty("path.separator", ":"); 
DistributedCache.addFileToClassPath(new Path("/lib/Test/google-collections.jar"), jConf);


System.setProperty("path.separator", ":")的用意在於,
因為提交job的程式是在windows下執行,但是MapReduce JVM的運行環境是在linux上,而linux的classpath區隔是使用"冒號",而不是"分號", 因此要把path.separator設成":"
(如果在同os下提交,就不用設定path.separator)

ref:
1. Handling dependencies and configuration in Java + Hadoop projects efficiently
2. 使用hadoop eclipse plugin提交Job并添加多个第三方jar


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: Hadoop lib classpath, classNotFound的問題
文章發表於 : 2013-05-10, 21:53 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
謝謝分享。

- Jazz


回頂端
 個人資料 E-mail  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 5 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
正體中文語系由 竹貓星球 維護製作