hadoop搭建與eclipse開發(fā)環(huán)境設置-已驗證通過_第1頁
hadoop搭建與eclipse開發(fā)環(huán)境設置-已驗證通過_第2頁
hadoop搭建與eclipse開發(fā)環(huán)境設置-已驗證通過_第3頁
hadoop搭建與eclipse開發(fā)環(huán)境設置-已驗證通過_第4頁
hadoop搭建與eclipse開發(fā)環(huán)境設置-已驗證通過_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、hadoop搭建與eclipse開發(fā)環(huán)境設置 劉剛1. 前言1.1 目標目的很簡單,為進行研究與學習,部署一個hadoop運行環(huán)境,并搭建一個hadoop開發(fā)與測試環(huán)境。具體目標是: 在ubuntu系統(tǒng)上部署hadoop 在windows 上能夠使用eclipse連接ubuntu系統(tǒng)上部署的hadoop進行開發(fā)與測試1.2 軟硬件要求硬件要求:三臺普通PC。當然使用虛擬機也可以,本環(huán)境搭建也是VMWare6.5虛擬機上進行的。軟件要求:操作系統(tǒng):ubuntu 11.04 server。Hadoop版本: hadoop-0.20.2Eclipse版本:3.3.2Java版本:1.6.0_26(必

2、須1.6以上)注意:Hadoop版本和Eclipse版本請嚴格按照要求?,F(xiàn)在的hadoop最新版本是hadoop-0.20.203,我在windows上使用eclipse(包括3.6版本和3.3.2版本)連接ubuntu上的hadoop-0.20.203環(huán)境一直沒有成功。但是開發(fā)測試程序是沒有問題的,不過需要注意權限問題。 如果要減少權限問題的發(fā)生,可以這樣做:ubuntu上運行hadoop的用戶與windows上的用戶一樣。1.3 環(huán)境拓撲圖主機名Hadoop角色Hadoop jps命令結(jié)果Hadoop用戶Hadoop安裝目錄ubuntuMasterslavesNameNodeDataNod

3、eJobTrackerTaskTrackerSecondaryNameNode創(chuàng)建相同的用戶的組名:jayliu。安裝hadoop-0.20.2時使用jayliu用戶,并且jayliu的文件夾歸屬也是jayliu:jayliu/opt/hadoopUbuntu1slavesDataNodeTaskTrackerUbuntu2slavesDataNodeTaskTrackerWindows 開發(fā)測試環(huán)境安裝了jdk與eclipse,本身不需要安裝hadoop,但是需要hadoop安裝包下面的jar包。注意:ubuntu既是NameNode又是DataNode,同時也是JobTracker。2.

4、Ubuntu 安裝安裝ubuntu11.04 server系統(tǒng),具體略。我是先在虛擬機上安裝一個操作系統(tǒng),然后把hadoop也安裝配置好了,再克隆二份,然后把主機名與IP修改,再進行主機之間的SSH配置。如果僅作為hadoop的運行與開發(fā)環(huán)境,不需要安裝太多的系統(tǒng)與網(wǎng)絡服務,或者在需要的時候通過apt-get install進行安裝。不過SSH服務是必須的。3. Hadoop 安裝以下的hadoop安裝以主機ubuntu下進行安裝為例。3.1 下載安裝jdk1.6安裝版本是:jdk-6u26-linux-i586.bin,我把它安裝拷貝到:/opt/jdk1.6.0_263.2 下載解壓had

5、oop安裝包是:hadoop-0.20.2.tar.gz。$ tar zxvf hadoop-0.20.2.tar.gz$ mv hadoop-0.20.2 /opt/hadoop3.3 修改系統(tǒng)環(huán)境配置文件切換為根用戶。l 修改環(huán)境配置文件/etc/profile,加入:export JAVA_HOME=/opt/jdk1.6.0_26export JRE_HOME=/opt/jdk1.6.0_26/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME

6、/bin:$PATH export HADOOP_HOME=/opt/hadoopexport PATH=$HADOOP_HOME/bin:$PATHl 修改地址解析文件/etc/hosts,加入31 ubuntu32 ubuntu133 ubuntu23.4 修改hadoop的配置文件切換為hadoop用戶。l 修改hadoop目錄下的conf/hadoop-env.sh文件加入java的安裝根路徑:export JAVA_HOME=/opt/jdk1.6.0_26l 把hadoop目錄下的conf/core-site.

7、xml文件修改成如下: hadoop.tmp.dir /hadoop A base for other temporary directories. hdfs:/ubuntu:9000 The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uris scheme determines the config property (fs.SCHEME.impl) naming the FileS

8、ystem implementation class. The uris authority is used to determine the host, port, etc. for a filesystem. dfs.hosts.exclude excludes .dir /hadoop/name Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories the

9、n the name table is replicated in all of the directories, for redundancy. l 把hadoop目錄下的conf/ hdfs-site.xml文件修改成如下: dfs.data.dir /hadoop/data Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored i

10、n all named directories, typically on different devices. Directories that do not exist are ignored. dfs.replication 3 Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. l 把hadoop目

11、錄下的conf/ mapred-site.xml文件修改成如下: mapred.job.tracker ubuntu:9001 The host and port that the MapReduce job tracker runs at. If local, then jobs are run in-process as a single map and reduce task. 注意:別忘了hadoop.tmp.dir,.dir,dfs.data.dir參數(shù),hadoop存放數(shù)據(jù)文件,名字空間等的目錄,格式化分布式文件系統(tǒng)時會格式化這個目錄。這里指向了/hadoop,所以

12、也要創(chuàng)建這個目錄,并且用戶歸屬也是hadoop:hadoop。l 把hadoop目錄下的conf/ masters文件修改成如下:ubuntul 把hadoop目錄下的conf/ slaves文件修改成如下:ubuntuubuntu1ubuntu23.5 分發(fā)hadoop安裝文件我使用VMWare的克隆功能,將主機ubuntu完全克隆兩份:ubuntu1和ubuntu2,并修改相應的主機名和IP地址,這樣就可以簡單地保持hadoop環(huán)境基本配置相同。如果是安裝在實體物理機上,把在ubuntu安裝的jdk,系統(tǒng)配置文件/etc/host,/etc/profile,hadoop安裝目錄拷貝到ubu

13、ntu1和ubuntu2相應的目錄。3.6 SSH配置無密碼驗證配置切換到Hadoop用戶,在Hadoop家目錄下面創(chuàng)建.ssh目錄:$ cd$ mkdir .ssh在master節(jié)點(即主機ubuntu)上生成密鑰對:$ ssh-keygen t rsa然后一直按Enter鍵,按默認的選項生成密鑰對保存在.ssh/id_rsa文件中。然后執(zhí)行命令:$ ssh /.ssh$ cp id_rsa.pub authorized_keys $ scp authorized_keys ubuntu1:/home/hadoop/.ssh$ scp authorized_keys ubuntu2:/hom

14、e/hadoop/.ssh從ubuntu向ubuntu1和ubuntu2發(fā)起SSH連接,第一次登錄時需要輸入密碼,以后就不需要了。$ ssh ubuntu1$ ssh ubuntu2我們只需要配置從master向slaves發(fā)起SSH連接不需要密碼就可以了,但這樣只能在master(即在主機ubuntu)啟動或關閉hadoop服務。3.7 運行hadoop使用Hadoop用戶。首先說明,hadoop命令和參數(shù)都是大小寫敏感的,該用大寫時用大寫,用小寫時用小寫,否則會執(zhí)行錯誤。格式化分布式文件系統(tǒng):$ hadoop namenode -format在ubuntu上啟動hadoop守護進行:$ s

15、tart-all.sh停止hadoop守護進程是:$ stop-all.sh在ubuntu上查看運行的進程:$ jps2971 SecondaryNameNode3043 JobTracker2857 DataNode4229 Jps3154 TaskTracker2737 NameNode在ubuntu1上查看運行的進程:$ jps1005 DataNode2275 Jps1090 TaskTracker其它命令請參考相關資料。在windows上通過WEB查看hadoop相關信息。修改C:WINDOWSsystem32driversetchosts文件,加入主機名與IP對應關系:192.16

16、8.69.231 ubuntu32 ubuntu133 ubuntu2訪問:http:/ubuntu:50030可以查看JobTracker的運行狀態(tài):訪問:http:/ubuntu:50070可以查看NameNode及整個分布式文件系統(tǒng)的狀態(tài)等:3.8 運行WordCount實例 WordCount是hadoop自帶的實例,統(tǒng)計一批文本文件中各單詞出現(xiàn)的資料,輸出到指定的output目錄中,輸出目錄如果已經(jīng)存在會報錯。$ cd /opt/hadoop$ hadoop fs -mkdir input$ hadoop fs -copyFromLoc

17、al /opt/hadoop/*.txt input/$ hadoop jar hadoop-0.20.2-examples.jar wordcount input output$ hadoop fs -cat output/* #最后查看結(jié)果4. Windows下eclipse開發(fā)環(huán)境配置4.1 系統(tǒng)環(huán)境配置在windows上通過WEB查看hadoop相關信息。修改C:WINDOWSsystem32driversetchosts文件,加入主機名與IP對應關系:31 ubuntu32 ubuntu133 ubuntu24.

18、2 安裝開發(fā)hadoop插件將hadoop安裝包hadoopcontribeclipse-pluginhadoop-0.20.2-eclipse-plugin.jar拷貝到eclipse的插件目錄plugins下。需要注意的是插件版本(及后面開發(fā)導入的所有jar包)與運行的hadoop一致,否則可能會出現(xiàn)EOFException異常。重啟eclipse,打開windows-open perspective-other-map/reduce 可以看到map/reduce開發(fā)視圖。4.3 設置連接參數(shù) 打開windows-show view-other- map/reduce Locations視

19、圖,在點擊大象后彈出的對話框(General tab)進行參數(shù)的添加:參數(shù)說明如下:Location name:任意map/reduce master:與mapred-site.xml里面mapred.job.tracker設置一致。DFS master:與core-site.xml里設置一致。User name: 服務器上運行hadoop服務的用戶名。然后是打開“Advanced parameters”設置面板,修改相應參數(shù)。上面的參數(shù)填寫以后,也會反映到這里相應的參數(shù):主要關注下面幾個參數(shù)::與core-site.xml里fs.d

20、設置一致。mapred.job.tracker:與mapred-site.xml里面mapred.job.tracker設置一致。dfs.replication:與hdfs-site.xml里面的dfs.replication一致。hadoop.tmp.dir:與core-site.xml里hadoop.tmp.dir設置一致。hadoop.job.ugi:并不是設置用戶名與密碼。是用戶與組名,所以這里填寫hadoop,hadoop。說明:第一次設置的時候可能是沒有hadoop.job.ugi和dfs.replication參數(shù)的,不要緊,確認保存。打開Project E

21、xplorer中DFSLocations目錄,應該可以年看到文件系統(tǒng)中的結(jié)構了。但是在/hadoop/mapred/system下卻沒有查看權限,如下圖: 而且刪除文件的時候也會報錯:這個原因是我使用地本用戶Administrator(我是用管理員用戶登陸來地windows系統(tǒng)的)進行遠程hadoop系統(tǒng)操作,沒有權限。此時再打開“Advanced parameters”設置面板,應該可以看到hadoop.job.ugi了,這個參數(shù)默認是本地操作系統(tǒng)的用戶名,如果不幸與遠程hadoop用戶不一致,那就要改過來了,將hadoop加在第一個,并用逗號分隔。如: 保存配置后,重新啟動eclipse。

22、/hadoop/mapred/system下就一目了然了,刪除文件也OK。4.4 運行hadoop程序首先將hadoop安裝包下面的所有jar包都導到eclipse工程里。然后建立一個類:DFSOperator.java,該類寫了四個基本方法:創(chuàng)建文件,刪除文件,把文件內(nèi)容讀為字符串,將字符串寫入文件。同時有個main函數(shù),可以修改測試:package com.kingdee.hadoop;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.Inpu

23、tStreamReader;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;/* * * The utilities to operate file on hadoop hdfs. * * author luolihui 2011-07-18 * */public class DFSOperator private st

24、atic final String ROOT_PATH = hdfs:/;private static final int BUFFER_SIZE = 4096;/* * construct. */public DFSOperator() /* * Create a file on hdfs.The root path is /. * for example: DFSOperator.createFile(/lory/test1.txt, true); * param path the file name to open * param overwrite if a file with thi

25、s name already exists, then if true, the file will be * return true if delete is successful else IOException. * throws IOException */public static boolean createFile(String path, boolean overwrite) throws IOException/String uri = hdfs:/00:9000; /FileSystem fs1 = FileSystem.get(URI.create(

26、uri), conf); Configuration conf = new Configuration();FileSystem fs = FileSystem.get(conf);Path f = new Path(ROOT_PATH + path);fs.create(f, overwrite);fs.close();return true; /* * Delete a file on hdfs.The root path is /. * for example: DFSOperator.deleteFile(/user/hadoop/output, true); * param path

27、 the path to delete * param recursive if path is a directory and set to true, the directory is deleted else throws an exception. In case of a file the recursive can be set to either true or false. * return true if delete is successful else IOException. * throws IOException */public static boolean de

28、leteFile(String path, boolean recursive) throws IOException/String uri = hdfs:/00:9000; /FileSystem fs1 = FileSystem.get(URI.create(uri), conf); Configuration conf = new Configuration();FileSystem fs = FileSystem.get(conf);Path f = new Path(ROOT_PATH + path);fs.delete(f, recursive);fs.clo

29、se();return true;/* * Read a file to string on hadoop hdfs. From stream to string. * for example: System.out.println(DFSOperator.readDFSFileToString(/user/hadoop/input/test3.txt); * param path the path to read * return true if read is successful else IOException. * throws IOException */public static

30、 String readDFSFileToString(String path) throws IOExceptionConfiguration conf = new Configuration();FileSystem fs = FileSystem.get(conf);Path f = new Path(ROOT_PATH + path);InputStream in = null;String str = null;StringBuilder sb = new StringBuilder(BUFFER_SIZE);if (fs.exists(f)in = fs.open(f);Buffe

31、redReader bf = new BufferedReader(new InputStreamReader(in); while (str = bf.readLine() != null) sb.append(str);sb.append(n);in.close();bf.close();fs.close();return sb.toString();elsereturn null;/* * Write string to a hadoop hdfs file. * for example: DFSOperator.writeStringToDFSFile(/lory/test1.txt,

32、 You are a bad man.nReally!n); * param path the file where the string to write in. * param string the context to write in a file. * return true if write is successful else IOException. * throws IOException */public static boolean writeStringToDFSFile(String path, String string) throws IOExceptionCon

33、figuration conf = new Configuration();FileSystem fs = FileSystem.get(conf);FSDataOutputStream os = null;Path f = new Path(ROOT_PATH + path);os = fs.create(f,true);os.writeBytes(string);os.close();fs.close();return true;public static void main(String args) try DFSOperator.createFile(/lory/test1.txt,

34、true);DFSOperator.deleteFile(/dfs_operator.txt, true);DFSOperator.writeStringToDFSFile(/lory/test1.txt, You are a bad man.nReally?n);System.out.println(DFSOperator.readDFSFileToString(/lory/test1.txt); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();System.out.println(=end

35、=);然后Run AsRun on HadoopChoose an exitsing server from the list belowfinish.結(jié)果很簡單(那個警告不管):11/07/16 18:44:32 WARN conf.Configuration: DEPRECATED: hadoop-site.xml found in the classpath. Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, mapred-site.xml and hdfs-site.xml to override pr

36、operties of core-default.xml, mapred-default.xml and hdfs-default.xml respectivelyYou are a bad man.Really?=end=也可以運行hadoop自帶的WorkCount程序,找到其源代碼導進來,然后設置輸入輸出參數(shù),然后同樣“Run on hadoop”。具體步驟不再示范。每“Run on hadoop”都會在workspace.metadata.pluginsorg.apache.hadoop.eclipse下生成臨時jar包。不過第一次需要Run on hadoop,以后只需要點擊那運行的

37、綠色按鈕了。5. 錯誤及處理5.1 安全模式問題我在eclipse上刪除DFS上的文件夾時,出現(xiàn)下面錯誤:錯誤提示說得也比較明示,是NameNode在安全模式中,其解決方案也一并給出。類似的運行hadoop程序時,有時候會報以下錯誤: org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode解除安全模式: bin/hadoop dfsadmin -safemode leave用戶可以通過dfsadmin -safemode value 來操作安全模式,

38、參數(shù)value的說明如下:enter - 進入安全模式leave - 強制NameNode離開安全模式get - 返回安全模式是否開啟的信息wait - 等待,一直到安全模式結(jié)束。5.2 開發(fā)時報錯Permission deniedorg.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode=test1.txt:hadoop:supergroup:rw-r-r-at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)at sun.refl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論