標籤:des style blog http color io os ar 使用
前言:
畢業兩年了,之前的工作一直沒有接觸過大資料的東西,對hadoop等比較陌生,所以最近開始學習了。對於我這樣第一次學的人,過程還是充滿了很多疑惑和不解的,不過我採取的策略是還是先讓環境跑起來,然後在能用的基礎上在多想想為什麼。
通過這三個禮拜(基本上就是周六周日,其他時間都在加班啊T T)的探索,我目前主要完成的是:
1.在Linux環境中偽分布式部署hadoop(SSH免登陸),運行WordCount執行個體成功。 http://www.cnblogs.com/PurpleDream/p/4009070.html
2.自己打包hadoop在eclipse中的外掛程式。 http://www.cnblogs.com/PurpleDream/p/4014751.html
3.在eclipse中訪問hadoop運行WordCount成功。 http://www.cnblogs.com/PurpleDream/p/4021191.html
所以我下邊會分三次記錄下我的過程,為自己以後查閱方便,要是能協助到其他人,自然是更好了!
===============================================================長長的分割線====================================================================
本文:
在之前的兩篇文章中,我主要是介紹了自己初次學習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/datadfs.name.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namedfs.name.edits.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namefs.checkpoint.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namesecondaryfs.checkpoint.edits.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namesecondaryfs.s3.buffer.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/s3hadoop.tmp.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dirmapred.local.dor => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/localmapred.system.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/systemmapred.temp.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/tempmapreduce.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了,也許在你實踐的過程中還會碰到其他問題,只要你耐心的在網上搜尋資料,相信一定可以解決的,切記不要太著急。
Hadoop3 在eclipse中訪問hadoop並運行WordCount執行個體