標籤:ati https 網站 inf apache ups center exception 檢查
前提:你搭建好了hadoop 2.x的linux環境,並可以成功執行。還有就是window可以訪問到叢集。over
1、
hfds-site.xml 添加屬性:關閉叢集的許可權校正。windows的使用者一般與linux的不一樣,直接將它關閉掉好了。記住不是core-site.xml 重新啟動叢集
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
2、hadoop-eclipse-plugin-2.7.0.jar將外掛程式放到plugins檔案夾下
3、複製linux master已安裝好的hadoop檔案夾到windows,然後eclipse 配置定位hadoop的檔案夾,重新啟動eclipse
4、開啟配置,hadoop選項,定位hadoop主資料夾。然後開啟mapreduce的view 設定配置屬性:其它額外屬性不要配置,username也不用改,此時能夠連結上了。
5、建立MRproject
6、建立wordcount類(自己複製即可)
在src以下直接建立log4j.properties:
內容例如以下:主要是資訊列印:(你能夠將info改成debug,內容過多,改成info了)
log4j.rootLogger=info,stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=mapreduce_test.log
log4j.appender.R.MaxFileSize=1MB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.com.codefutures=DEBUG
7、錯誤多多啊:
執行報:1)、
java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.2)
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
解決方案1)人家提示HADOOP_HOME沒有設定,那就配置windows的環境變數。定位到hadoop檔案夾
執行報:
第一項不報了,第二項繼續:
2)
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
說不能定位,看來是HADOOP_HOME沒起作用,那就在main裡加入代碼,否則不報null:
System.
setProperty("hadoop.home.dir" , "E:\\bigdata\\hadoop2" );執行報:
Could not locate executable E:\bigdata\hadoop2\bin\winutils.exe in the Hadoop binaries.
這次變了,檢查檔案夾,的確沒有winutils.exe,由於我們是從linux複製下來的
那就添加唄:從https://github.com/srccodes/hadoop-common-2.2.0-bin 下載bin檔案夾,替換到windows中hadoop裡的bin檔案夾
執行報:
第二項不報了。又來新的了:
Exception in thread "main"
org.apache.hadoop.mapreduce.lib.input.InvalidInputException : Input path does not exist: file:/input這個嘛,嘿嘿,參數設定成絕對的。hadoop1的時候不用,如今是第二代:
乖乖的設定參數為 hdfs://master:9000/input hdfs://master:9000/output
執行 繼續報錯:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z說是本地庫的問題,那就改改原始碼,將本地庫的調用屏蔽掉:
拷貝原始碼檔案org.apache.hadoop.io.nativeio.NativeIO到項目中 。定位: 然後定位到570行(別hadoop2.2是。版本號碼不一樣如今2.7是607行還是直接搜尋
public
static
boolean access(String path, AccessRight desiredAccess)吧,),直接改動為return true; 不讓access了。
複製麻煩,那就建立類,定位包,然後複製類內容即可了。
繼續執行繼續報錯:
org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/output/_temporary/0":root:supergroup:drwxr-xr-x許可權不夠,linux使用者是root,window預設使用者是Administrator 我都將window改成root了,看來這個改法沒起作用。另外我在core-site.xml也添加了不讓校正許可權啊。無論用。又一次設定參數:換一種方式,之前是在core-site.xml設定的許可權為false。改到hdfs-site.xml裡試試,假設不行改原始碼。
(所以我在第一步提示是在hdfs裡而不是core裡面改)
執行 繼續報,別報了,出結果了:
Input split bytes=100 Combine input records=179 Combine output records=131 Reduce input groups=131 Reduce shuffle bytes=1836 Reduce input records=131 Reduce output records=131
對於: WARN - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable這個警告沒事,執行在linux就不報了。
8、最後。嘗試將wordcount拆成子類的形式。將mapper移出來試試,由於有的時候多個類會提示報錯:刪除output檔案夾,又一次執行:OK。沒問題。正確出結果了。
9、歡迎訪問下hegou.me這個網站。怎麼樣,僅僅是在本機搭建個測試環境。工作中就不要在正式叢集裡跑了。還是乖乖測試好代碼先。over。
eclipse 配置執行hadoop 2.7 程式範例參考步驟