前言:html
畢業兩年了,以前的工做一直沒有接觸過大數據的東西,對hadoop等比較陌生,因此最近開始學習了。對於我這樣第一次學的人,過程仍是充滿了不少疑惑和不解的,不過我採起的策略是仍是先讓環境跑起來,而後在能用的基礎上在多想一想爲何。java
經過這三個禮拜(基本上就是週六週日,其餘時間都在加班啊T T)的探索,我目前主要完成的是:linux
1.在Linux環境中僞分佈式部署hadoop(SSH免登錄),運行WordCount實例成功。 http://www.cnblogs.com/PurpleDream/p/4009070.html apache
2.本身打包hadoop在eclipse中的插件。 http://www.cnblogs.com/PurpleDream/p/4014751.html 服務器
3.在eclipse中訪問hadoop運行WordCount成功。 http://www.cnblogs.com/PurpleDream/p/4021191.html eclipse
因此我下邊會分三次記錄下個人過程,爲本身之後查閱方便,要是能幫助到其餘人,天然是更好了!分佈式
===============================================================長長的分割線====================================================================ide
正文:oop
在以前的兩篇文章中,我主要是介紹了本身初次學習hadoop的過程當中是如何將hadoop僞分佈式模式部署到linux環境中的,以及如何本身編譯一個hadoop的eclipse插件。若是你們有須要的話,能夠點擊我在前言中列出的前兩篇文章的連接。學習
今天,我將在eclipse中,講解如何使用MapReduce。對於下面的問題,咱們首先講解的是,如何在eclipse中配置DFS Location,而後講解的是,在配置好的Location上運行WordCount實例。
第一步,配置DFS Location:
1.打開eclipse以後,切換到Map/Reduce模式,點擊右下角的「new hadoop Location」圖標,彈出一個彈出框,以下圖所示,頁面中中有兩個頁籤須要配置,分別是General和Advanced Parameters。
2.首先,咱們先配置General中內容。General中主要須要咱們進行Map/Reduce和HDFS的host的配置。
(1).以前咱們在Linux安裝hadoop時,曾經修改了兩個配置文件,分別是mapred-site.xml和core-site.xml。當時咱們再配置的時候,配置的主機就是localhost和端口號。這裏因爲咱們是在eclipse遠程訪問你Linux服務器中的hadoop,因此咱們須要將原來配
置文件中的localhost修改爲你服務器的ip地址,端口號不變(固然你能夠參考網上的文章,配置host文件)。
(2).而後將eclipse中咱們剛纔打開的General頁籤中的Map/Reduce的host配置成你的mapred-site.xml配置的ip地址和端口號;再將HDFS的host配置成你的core-site.xml配置的ip地址和端口號。注意,若是你勾選了HDFS中的那個「Use M/R Master Host」選項,那麼HDFS的host將默認與Map/Reduce中配置的ip地址一致,端口號可另行配置。
3.而後,咱們要配置的是Advanced Parameters這個選項卡中的內容,這裏面的內容比較多,可是沒關係張哦,由於咱們在第一次配置時,可使用他的默認配置。
(1)打開這個選項卡,咱們能夠瀏覽一下這裏面的內容,着重看下其中選項值包含「/tmp/.....」這種目錄結構的選項,若是咱們後邊本身配置的話,其實要修改的也就是這些項。默認的「dfs.data.dir」是在linux服務器中的「/tmp」目錄下,有時會帶上你的root帳號,這個能夠根據本身的須要。
(2).若是你不想使用上邊的默認配置,則咱們根據本身的須要,在咱們安裝的hadoop中的hdfs-site.xml文件中,增長對「dfs.data.dir」這個選項的配置,對應的目錄本身能夠提早創建,個人配置如圖:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.data.dir</name> <value>/myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/dfs_data_dir</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
(3).以個人配置爲例,若是我在hadoop的服務器端作了這樣的配置,那麼我在Advanced Parameters選項卡中,須要修改下面的的幾個選項的value值,注意,其實有個小技巧,你在配置的時候,先找到「hadoop.tmp.dir」這個選項,將這個選項配置成你自定義的目錄位置,而後將Location這個彈出框關掉,再選中剛纔的那個Location從新點擊右下角的「Edit hadoop Location」選項(在「new hadoop Location」旁邊),而後再切換到Advanced Parameters選項卡,會發現與之相關的幾個選項的目錄前綴都會發生改變,這時候你在瀏覽一下其餘選項,確保目錄前綴都進行了修改,就ok了。
dfs.data.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/data
dfs.name.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/name
dfs.name.edits.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/name
fs.checkpoint.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namesecondary
fs.checkpoint.edits.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namesecondary
fs.s3.buffer.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/s3
hadoop.tmp.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir
mapred.local.dor => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/local
mapred.system.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/system
mapred.temp.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/temp
mapreduce.jobtracker.staging.root.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/staging
4.通過上邊的幾步,咱們本身的Location已經配置完了,這時候若是沒有什麼問題的話,會在咱們的eclipse的左上角「DFS Location」的下面,顯示出咱們剛剛配置好的Location,右鍵點擊這個Location的選擇「Refresh」或者「ReConnect」,若是以前的配置沒有問題的話,會顯示咱們再第一篇文章中上傳的a.txt文件,以及咱們以前在linux服務器端運行hadoop成功的output文件夾,以下圖。若是沒有上傳文件,那麼只會顯示「dfs.data.dir」這個目錄。
第二步,運行Word Count實例:
1.Location配置好以後,咱們能夠在eclipse中創建一個MapReduce項目的工程。
(1).利用反編譯軟件,從hadoop-1.0.1的安裝包中反編譯hadoop-examples-1.0.1.jar這個jar包,將其中的Word Count類取出來,放到你剛纔創建的工程中。注意,若是你以前參考的在編譯eclipse的hadoop插件時,參考的是個人第二篇文章的方法,這裏須要加一步,右鍵點擊項目選擇buidld Path,對於以「hadoop-」開頭的jar包,除了「hadoop-core-1.0.1.jar」和「hadoop-tools-1.0.1.jar」這兩個jar包,其他的以「hadoop-」開頭的jar包都要刪除掉。主要是由於若是不刪除,會致使WordCount這個類方法中的有些累引入的不正確。
2.項目創建好以後,咱們在WordCount類中,右鍵選擇「Run Configurations」彈出一個彈出框,以下圖,而後選中「Arguments」選項卡,在其中的「Program arguments」中配置你的hdfs的input文件的目錄和output目錄,而後點擊「run」,運行便可,若是在console中沒有拋出異常,證實運行成功,可選擇左上角的Location,選擇「Refresh」,會顯示你的output文件夾以及運行的結果文件。
第三步,錯誤排除:
1.若是以前的output文件夾存在,你直接在eclipse中運行WordCount方法的話,可能console會報「output文件夾已經存在」這個錯誤,那麼你只須要現將Location中的output文件夾刪除,這個錯誤就不會報了。
2.若是你運行的過程當中報了「org.apache.hadoop.security.AccessControlException: Permission denied:。。。。」這個錯誤,是因爲本地用戶想要遠程操做hadoop沒有權限引發的,這時,咱們須要在hdfs-site.xml中配置dfs.permissions屬性修改成false(默認爲true),能夠參考本文上邊關於「hdfs-site.xml」的配置。
3.若是你運行的過程當中報了「Failed to set permissions of path:。。。。」這個錯誤,解決方法是修改/hadoop-1.0.1/src/core/org/apache/hadoop/fs/FileUtil.java裏面的checkReturnValue,註釋掉便可(有些粗暴,在Window下,能夠不用檢查)。注意,此處修改時,網上的通常方法是,從新編譯hadoop-core的源碼,而後從新打包。其實若是想省事兒一點的話,咱們能夠在項目中創建一個org.apache.hadoop.fs這個包,將FileUtil.java這個類複製到這個包裏面,按照下邊圖片中的修改方法,修改FileUtil.java就好了。之因此這種方法也行,是由於java運行時,會優先默認在本項目的源碼中掃描相同路徑的包,而後纔是引入的jar文件中的。
通過上邊的步驟,我想多數狀況下,你已經成功的在eclipse中遠程訪問了你的hadoop了,也許在你實踐的過程當中還會碰到其餘問題,只要你耐心的在網上搜索資料,相信必定能夠解決的,切記不要太着急。