如果是在WINDOWS的ECLIPSE中,運行HBASE的MAPREDUCE,會出現異常,這是由于默認運行MAPREDUCE任務是在本地運行,而由于會建立文件賦權限是按照UNIX的方式進行,因此會報錯:
java.lang.RuntimeException: Error while running command to get file permissions : java.io.IOException: Cannot run program "ls": CreateProcess error=2, 解決辦法是將任務發到運程主機,通常是LINUX上運行,在hbase-site.xml中加入:
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>同時需把HDFS的權限機制關掉:
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>另外由于是在遠程上執行任務,自定義的類文件,如Maper/Reducer等需打包成jar文件上傳,具體見方案:
Hadoop作業提交分析(五)
http://www.cnblogs.com/spork/archive/2010/04/21/1717592.html
研究了好幾天,終于搞清楚,CONFIGUARATION就是JOB的配置信息,遠程JOBTRACKER就是以此為參數構建JOB去執行,由于遠程主機并沒有自定義的MAPREDUCE類,需打成JAR包后,上傳到主機處,但無需每次都手動傳,可以代碼設置:
conf.set("tmpjars", "d:/aaa.jar");另注意,如果在WINDOWS系統中,文件分隔號是“;”,生成的JAR包信息是以“;”間隔的,在遠程主機的LINUX上是無法辨別,需改為:
System.setProperty("path.separator", ":");參考文章:
http://www.cnblogs.com/xia520pi/archive/2012/05/20/2510723.html使用hadoop eclipse plugin提交Job并添加多個第三方jar(完美版)
http://heipark.iteye.com/blog/1171923