通常,集群里的一臺機器被指定為 NameNode,,另一臺不同的機器被指定為JobTracker,。這些機器是masters,。余下的機器即作為DataNode也作為TaskTracker,。這些機器是slaves\
官方地址:(http://hadoop./common/docs/r0.19.2/cn/cluster_setup.html) 1 先決條件
2 實驗環(huán)境搭建
2.1 準(zhǔn)備工作操作系統(tǒng):Ubuntu部署:Vmvare 在vmvare安裝好一臺Ubuntu虛擬機后,可以導(dǎo)出或者克隆出另外兩臺虛擬機,。 準(zhǔn)備機器:一臺master,,若干臺slave,配置每臺機器的/etc/hosts保證各臺機器之間通過機器名可以互訪,,例如: 10.64.56.76 node1(master) 主機信息:
為保證環(huán)境一致先安裝好JDK和ssh: 2.2 安裝JDK#安裝JDK$ sudo apt-get install sun-java6-jdk1.2.3 這個安裝,,java執(zhí)行文件自動添加到/usr/bin/目錄。 驗證 shell命令 :java -version 看是否與你的版本號一致,。 2.3下載,、創(chuàng)建用戶在所有的機器上都建立相同的目錄,也可以就建立相同的用戶,,以該用戶的home路徑來做hadoop的安裝路徑,。例如我在所有的機器上都建立了/home/hadoop/install$ useradd hadoop $ cd /home/hadoop 2.4 安裝ssh和配置1) 安裝:sudo apt-get install ssh 2) 配置: 在Hadoop啟動以后,Namenode是通過SSH(Secure Shell)來啟動和停止各個datanode上的各種守護進程的,,這就須要在節(jié)點之間執(zhí)行指令的時候是不須要輸入密碼的形式,,故我們須要配置SSH運用無密碼公鑰認證的形式。 ( 說明:hadoop@hadoop~]$ssh-keygen -t rsa 3) 首先設(shè)置namenode的ssh為無需密碼的,、自動登錄,。 切換到hadoop用戶 $ su hadoop cd /home/hadoop $ ssh-keygen -trsa然后一直按回車 完成后,在home跟目錄下會產(chǎn)生隱藏文件夾.ssh $ cd .ssh 之后ls 查看文件 cp id_rsa.pubauthorized_keys 測試: ssh localhost發(fā)現(xiàn)鏈接成功,,并且無需密碼,。
4 ) 復(fù)制到node2 和node3 上 [hadoop@hadoop .ssh]$ scp authorized_keysnode2:/home/hadoop/.ssh/ [hadoop@hadoop .ssh]$ scp authorized_keysnode3:/home/hadoop/.ssh/ 輸入 yes 來繼續(xù)。這會把該服務(wù)器添加到你的已知主機的列表中
改動你的 authorized_keys 文件的許可權(quán)限: 檢查下能不能配置成功,,從hadoop機器上ssh到node2和node3,,如果不須要輸入密碼則配置成功,,如果還須要請檢查上面的配置能不能正確。 2.5 安裝Hadoop
#切換為hadoop用戶 su hadoop wget http://apache.mirrors.//hadoop/common/hadoop-0.20.203.0/hadoop-0.20.203.0rc1.tar.gz 下載安裝包后,,直接解壓安裝即可: $ tar -zxvfhadoop-0.20.203.0rc1.tar.gz 1 ) 安裝Hadoop集群通常要將安裝軟件解壓到集群內(nèi)的所有機器上,。并且安裝路徑要一致,如果我們用HADOOP_HOME指代安裝的根路徑,,通常,,集群里的所有機器的HADOOP_HOME路徑相同。 2 ) 如果集群內(nèi)機器的環(huán)境完全一樣,,可以在一臺機器上配置好,,然后把配置好的軟件即hadoop-0.20.2整個文件夾拷貝到其他機器的相同位置即可。 3 ) 可以將Master上的Hadoop通過scp拷貝到每一個Slave相同的目錄下,,同時根據(jù)每一個Slave的Java_HOME 的不同修改其hadoop-env.sh ,。 4) 為了方便,使用hadoop命令或者start-all.sh等命令,。 修改Master上/etc/profile: 新增以下內(nèi)容:(具體的內(nèi)容根據(jù)你的安裝路徑修改,,這步只是為了方便使用) e export HADOOP_HOME=/home/hadoop/hadoop/install exportPATH=$PATH:$HADOOP_HOME/bin
6)配置conf/hadoop-env.sh文件
配置conf/hadoop-env.sh文件 #添加 export JAVA_HOME=/usr/lib/jvm/java-6-sun/ 這里修改為你的jdk的安裝位置,。 測試hadoop安裝: Bin/hadoop jar hadoop-0.20.2-examples.jarwordcount conf/ /tmp/out
3. 集群配置(所有節(jié)點相同)3.1配置文件:conf/core-site.xml<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://node1:49000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop_home/var</value> </property> </configuration>
1)fs.default.name是NameNode的URI。hdfs://主機名:端口/ 2)hadoop.tmp.dir :Hadoop的默認臨時路徑,,這個最好配置,,如果在新增節(jié)點或者其他情況下莫名其妙的DataNode啟動不了,就刪除此文件中的tmp目錄即可,。不過如果刪除了NameNode機器的此目錄,,那么就需要重新執(zhí)行NameNode格式化的命令。 3.2配置文件:conf/mapred-site.xml
<?xmlversion="1.0"?> <?xml-stylesheettype="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.job.tracker</name> <value>node1:49001</value> </property> <property> <name>mapred.local.dir</name> <value>/home/hadoop/hadoop_home/var</value> </property> </configuration> 1)mapred.job.tracker是JobTracker的主機(或者IP)和端口,。主機:端口,。 3.3配置文件:conf/hdfs-site.xml<?xmlversion="1.0"?> <?xml-stylesheettype="text/xsl" href="configuration.xsl"?> <configuration> <property> <property> <property> <name>dfs.replication</name> <!-- 我們的集群又兩個結(jié)點,所以rep兩份 --> <value>2</value> </property> </configuration>
1) dfs.name.dir是NameNode持久存儲名字空間及事務(wù)日志的本地文件系統(tǒng)路徑,。 當(dāng)這個值是一個逗號分割的目錄列表時,,nametable數(shù)據(jù)將會被復(fù)制到所有目錄中做冗余備份。 2) dfs.data.dir是DataNode存放塊數(shù)據(jù)的本地文件系統(tǒng)路徑,逗號分割的列表,。 當(dāng)這個值是逗號分割的目錄列表時,,數(shù)據(jù)將被存儲在所有目錄下,通常分布在不同設(shè)備上,。 3)dfs.replication是數(shù)據(jù)需要備份的數(shù)量,,默認是3,如果此數(shù)大于集群的機器數(shù)會出錯,。 注意:此處的name1,、name2、data1,、data2目錄不能預(yù)先創(chuàng)建,,hadoop格式化時會自動創(chuàng)建,如果預(yù)先創(chuàng)建反而會有問題,。 3.4配置masters和slaves主從結(jié)點 配置conf/masters和conf/slaves來設(shè)置主從結(jié)點,,注意最好使用主機名,并且保證機器之間通過主機名可以互相訪問,,每個主機名一行,。 vi masters: node1 vi slaves: 輸入: 配置結(jié)束,把配置好的hadoop-0.20.2文件夾拷貝到其他集群的機器中,,并且保證上面的配置對于其他機器而言正確,,例如:如果其他機器的Java安裝路徑不一樣,要修改conf/hadoop-env.sh $ scp -r /home/hadoop/hadoop-0.20.2 root@node2: /home/hadoop/
4 hadoop啟動4.1 格式化一個新的分布式文件系統(tǒng)先格式化一個新的分布式文件系統(tǒng) $ cd hadoop-0.20.2 /************************************************************ STARTUP_MSG: host = ubuntu/127.0.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.20.203.0 STARTUP_MSG: build =http://svn./repos/asf/hadoop/common/branches/branch-0.20-security-203-r 1099333; compiled by 'oom' on Wed May 4 07:57:50 PDT 2011 ************************************************************/ 12/02/0600:46:50 INFO namenode.FSNamesystem: fsOwner=root,root 查看輸出保證分布式文件系統(tǒng)格式化成功 4.2 啟動所有節(jié)點$ bin/start-all.sh node2: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out node3: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out node1: starting secondarynamenode,logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-ubuntu.out starting jobtracker, logging to/usr/local/hadoop/logs/hadoop-hadoop-jobtracker-ubuntu.out node2: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out node3: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out As you can see in slave's output above, it will automatically format it's storage directory(specified by dfs.data.dir) if it is not formattedalready. It will also create the directory if it does not exist yet. 4.3 關(guān)閉所有節(jié)點從主節(jié)點master關(guān)閉hadoop,主節(jié)點會關(guān)閉所有從節(jié)點的hadoop,。 $ bin/stop-all.sh Hadoop守護進程的日志寫入到 ${HADOOP_LOG_DIR} 目錄 (默認是 ${HADOOP_HOME}/logs). ${HADOOP_HOME}就是安裝路徑.
5 .測試1)瀏覽NameNode和JobTracker的網(wǎng)絡(luò)接口,,它們的地址默認為: NameNode - http://node1:50070/ 3) 使用netstat –nat查看端口49000和49001是否正在使用。 4) 使用jps查看進程 要想檢查守護進程是否正在運行,,可以使用 jps 命令(這是用于 JVM 進程的ps 實用程序),。這個命令列出 5 個守護進程及其進程標(biāo)識符。 5)將輸入文件拷貝到分布式文件系統(tǒng): 運行發(fā)行版提供的示例程序: 6.補充 查看輸出文件: 將輸出文件從分布式文件系統(tǒng)拷貝到本地文件系統(tǒng)查看: 或者 在分布式文件系統(tǒng)上查看輸出文件: 統(tǒng)計結(jié)果:
7. HDFS常用操作
hadoopdfs -ls 列出HDFS下的文件 hadoop dfs -ls in 列出HDFS下某個文檔中的文件 hadoop dfs -put test1.txt test 上傳文件到指定目錄并且重新命名,只有所有的DataNode都接收完數(shù)據(jù)才算成功 hadoop dfs -get in getin 從HDFS獲取文件并且重新命名為getin,,同put一樣可操作文件也可操作目錄 hadoop dfs -rmr out 刪除指定文件從HDFS上 hadoop dfs -cat in/* 查看HDFS上in目錄的內(nèi)容 hadoop dfsadmin -report 查看HDFS的基本統(tǒng)計信息,,結(jié)果如下 hadoop dfsadmin -safemode leave 退出安全模式 hadoop dfsadmin -safemode enter 進入安全模式 8.添加節(jié)點可擴展性是HDFS的一個重要特性,首先在新加的節(jié)點上安裝hadoop,,然后修改$HADOOP_HOME/conf /master文件,,加入 NameNode主機名,然后在NameNode節(jié)點上修改$HADOOP_HOME/conf/slaves文件,,加入新加節(jié)點主機名,,再建立到新加節(jié)點無密碼的SSH連接 運行啟動命令: start-all.sh 然后可以通過http://(Masternode的主機名):50070查看新添加的DataNode 9負載均衡start-balancer.sh,可以使DataNode節(jié)點上選擇策略重新平衡DataNode上的數(shù)據(jù)塊的分布 |
|
來自: 小猛奮斗 > 《hadoop 配置》