轉載? http://xuyuanshuaaa.iteye.com/blog/1063303
1.? SSH無密碼驗證配置?
???? Hadoop 需要使用SSH 協議,namenode 將使用SSH 協議啟動 namenode和datanode 進程,偽分布式模式數據節點和名稱節點均是本身,必須配置 SSH localhost無密碼驗證。
執行?ssh-keygen -t? rsa?
?通過以上命令將在/root/.ssh/ 目錄下生成id_rsa私鑰和id_rsa.pub公鑰。進入/root/.ssh目錄在namenode節點下做如下配置:?
cat id_rsa.pub >> authorized_keys?
配置完成
?
原理:?
Hadoop需要使用SSH協議,namenode將使用SSH協議啟動namenode和datanode進程,(datanode向namenode傳遞心跳信息可能也是使用SSH協議,這是我認為的,還沒有做深入了解)。許多教程上介紹Hadoop集群配置時只說明了namenode上SSH無密碼登錄所有datanode,我在配置時發現必須使datanode上也能SSH無密碼登錄到namenode,Hadoop集群才能正常啟動(也許這不是必須的)?
以namenode到datanode為例子:Namenode作為客戶端,要實現無密碼公鑰認證,連接到服務端datanode上時,需要在namenode上生成一個密鑰對,包括一個公鑰和一個私鑰,而后將公鑰復制到datanode上。當namenode通過ssh連接datanode時,datanode就會生成一個隨機數并用namenode的公鑰對隨機數進行加密,并發送給namenode。namenode收到加密數之后再用私鑰進行解密,并將解密數回傳給datanode,datanode確認解密數無誤之后就允許namenode進行連接了。這就是一個公鑰認證過程,其間不需要用戶手工輸入密碼。重要過程是將客戶端namenode公鑰復制到datanode上?
?
2. Hadoop配置?
下載hadoop并解壓
tar xvf hadoop-1.2.1.tar.gz
2.1?? 進入/usr/local/hadoop/hadoop-0.20.2/conf, 配置Hadoop配置文件?
2.1.1 配置hadoop-env.sh文件?
添加 # set java environment?
???????????? export JAVA_HOME=/usr/program/jdk1.6.0_20?
編輯后保存退出。?
?
2.1.2 配置core-site.xml?
- [root @master ?conf]#?vi?core-site.xml??
- <?xml?version= "1.0" ?>??
- <?xml-stylesheet?type= "text/xsl" ?href= "configuration.xsl" ?>??
- <!--?Put?site-specific?property?overrides?in? this ?file.?-->??
- <configuration>??
- ???<property>??
- ?????<name>fs. default .name</name>??
- ?????<value>hdfs: //202.173.253.36:9000/</value> ??
- ?????默認的namenode的端口為 8020 ??
- ???</property>??
- ???<property>??
- ?????<name>hadoop.tmp.dir</name>??
- ?????<value>/usr/local/hadoop/hadooptmp</value>??
- ???</property>??
- </configuration>??
2.1.3 配置hdfs-site.xml?
- [root @master ?conf]#?vi??hdfs-site.xml??
- <?xml?version= "1.0" ?>??
- <?xml-stylesheet?type= "text/xsl" ?href= "configuration.xsl" ?>??
- <!--?Put?site-specific?property?overrides?in? this ?file.?-->??
- <configuration>??
- ??<property>??
- ?????<name>dfs.name.dir</name>??
- ?????<value>/usr/local/hadoop/hdfs/name</value>??
- ??</property>??
- ??<property>??
- ?????<name>dfs.data.dir</name>??
- ?????<value>/usr/local/hadoop/hdfs/data</value>??
- ??</property>??
- ??<property>??
- ?????<name>dfs.replication</name>??
- ?????<value> 1 </value>??
- ??</property>??
- </configuration>??
????
2.1.4 配置mapred-site.xml?
- [root @master ?conf]#?vi?mapred-site.xml??
- <?xml?version= "1.0" ?>??
- <?xml-stylesheet?type= "text/xsl" ?href= "configuration.xsl" ?>??
- <!--?Put?site-specific?property?overrides?in? this ?file.?-->??
- <configuration>??
- ??<property>??
- ?????<name>mapred.job.tracker</name>??
- ?????<value> 202.173 . 253.36 : 9001 </value>??
- ??</property>??
- ??<property>??
- ?????<name>mapred.local.dir</name>??
- ?????<value>/usr/local/hadoop/mapred/local</value>??
- ??</property>??
- ??<property>??
- ?????<name>mapred.system.dir</name>??
- ?????<value>/tmp/hadoop/mapred/system</value>??
- ??</property>??
- </configuration>??
?
?
1、其實core-site.xml 對應有一個core-default.xml, hdfs-site.xml對應有一個hdfs-default.xml,?
mapred-site.xml對應有一個mapred-default.xml。這三個defalult文件里面都有一些默認配置,現在我們修改這三個site文件,目的就覆蓋default里面的一些配置,?
2、hadoop分布式文件系統的兩個重要的目錄結構,一個是namenode上名字空間的存放地方,一個是datanode數據塊的存放地方,還有一些其他的文件存放地方,這些存放地方都是基于hadoop.tmp.dir目錄的,比如namenode的名字空間存放地方就是 ${hadoop.tmp.dir}/dfs/name, datanode數據塊的存放地方就是 ${hadoop.tmp.dir}/dfs/data,所以設置好hadoop.tmp.dir目錄后,其他的重要目錄都是在這個目錄下面,這是一個根目錄。我設置的是 /usr/local/hadoop/hadooptmp,當然這個目錄必須是存在的。?
3、fs.default.name,這個是設置namenode位于哪個機器上,端口號是什么hdfs://192.168.133.128:9000,格式一定要這樣寫,網上很多資料說ip地址寫localhost也行,筆者建議最好寫ip,因為后期講到windows下 eclipse連接hadoop 的時候,如果寫localhost,就會連接不到。?
4、mapred.job.tracker,這個是設置jobtracker位于哪個機器上,端口號是什么,192.168.133.128:9001,格式和上一個不一樣,這個也必須這樣寫,同樣localhost和ip的分別和上述一樣?
5、dfs.replication,這個是設置數據塊的復制次數,默認是3,因為筆者這里就一臺機器,所以只能存在一份,就改成了1
?
2.1.5 配置masters文件和slaves文件?
[root@master conf]# vi masters?
202.173.253.36?
[root@master conf]# vi slaves?
202.173.253.36?
注:因為在偽分布模式下,作為master的namenode與作為slave的datanode是同一臺服務器,所以配置文件中的ip是一樣的。
?
2.2 Hadoop啟動?
2.2.1 進入 /usr/local/hadoop/hadoop-0.20.2/bin目錄下,格式化namenode?
[root@master bin]# hadoop namenode -format?
10/07/19 10:46:41 INFO namenode.NameNode: STARTUP_MSG:?
/************************************************************?
STARTUP_MSG: Starting NameNode?
STARTUP_MSG:?? host = master/202.173.253.36?
STARTUP_MSG:?? args = [-format]?
STARTUP_MSG:?? version = 0.20.2?
STARTUP_MSG:?? build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010?
************************************************************/?
Re-format filesystem in /usr/local/hadoop/hdfs/name ? (Y or N) Y?
10/07/19 10:46:43 INFO namenode.FSNamesystem: fsOwner=root,root,bin,daemon,sys,adm,disk,wheel?
10/07/19 10:46:43 INFO namenode.FSNamesystem: supergroup=supergroup?
10/07/19 10:46:43 INFO namenode.FSNamesystem: isPermissionEnabled=true?
10/07/19 10:46:43 INFO common.Storage: Image file of size 94 saved in 0 seconds.?
10/07/19 10:46:43 INFO common.Storage: Storage directory /usr/local/hadoop/hdfs/name has been successfully formatted.?
10/07/19 10:46:43 INFO namenode.NameNode: SHUTDOWN_MSG:?
/************************************************************?
SHUTDOWN_MSG: Shutting down NameNode at master/202.173.253.36?
************************************************************/?
2.2.2 啟動hadoop所有進程?
在/usr/local/hadoop/hadoop-0.20.2/bin 目錄下,執行start-all.sh命令?
啟動完成后,可用jps命令查看hadoop進程是否啟動完全。正常情況下應該有如下進程:?
10910 NameNode?
11431 Jps?
11176 SecondaryNameNode?
11053 DataNode?
11254 JobTracker?
11378 TaskTracker??
啟動之后,在/usr/local/hadoop/hadooptmp 下的dfs文件夾里會生成 data目錄,這里面存放的是datanode上的數據塊數據,因為筆者用的是單機,所以name 和 data 都在一個機器上,如果是集群的話,namenode所在的機器上只會有name文件夾,而datanode上只會有data文件夾。
?
搭建過程中,在此環節出現的問題最多,經常出現啟動進程不完整的情況,要不是datanode無法正常啟動,就是namenode或是TaskTracker啟動異常。解決的方式如下:?
1.在Linux下關閉防火墻
:?
1) 重啟后生效?
開啟: chkconfig iptables on?
關閉: chkconfig iptables off?
2) 即時生效,重啟后失效?
開啟: service iptables start?
關閉: service iptables stop?
需要說明的是對于Linux下的其它服務都可以用以上命令執行開啟和關閉操作。?
在開啟了防火墻時,做如下設置,開啟相關端口,?
修改/etc/sysconfig/iptables 文件,添加以下內容:?
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT?
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT?
開始我使用的是service方式,但是總不好用,最后使用了chkconfig重啟方式,生效!?
2.再次對namenode進行格式化:在/usr/local/hadoop/hadoop-0.20.2/bin 目錄下執行hadoop namenode -format命令?
3.對服務器進行重啟?
4.查看datanode或是namenode對應的日志文件,日志文件保存在/usr/local/hadoop/hadoop-0.20.2/logs目錄下。仔細查看日志報錯的原因,(上次日志報錯的信息忘記了)解決方法是進入/usr/local/hadoop/hdfs/name 和usr/local/hadoop/hdfs/data目錄下,將目錄下的文件全部刪除。?
5.再次在/bin目錄下用start-all.sh命令啟動所有進程,通過以上的幾個方法應該能解決進程啟動不完全的問題了。?
2.2.3? 查看集群狀態?
在 bin目錄下執行:hadoop dfsadmin? -report?
[root@master bin]# hadoop dfsadmin -report?
Configured Capacity: 304427253760 (283.52 GB)?
Present Capacity: 282767941632 (263.35 GB)?
DFS Remaining: 282767904768 (263.35 GB)?
DFS Used: 36864 (36 KB)?
DFS Used%: 0%?
Under replicated blocks: 0?
Blocks with corrupt replicas: 0?
Missing blocks: 0?
-------------------------------------------------?
Datanodes available: 1 (1 total, 0 dead)?
Name: 202.173.253.36:50010?
Decommission Status : Normal?
Configured Capacity: 304427253760 (283.52 GB)?
DFS Used: 36864 (36 KB)?
Non DFS Used: 21659312128 (20.17 GB)?
DFS Remaining: 282767904768(263.35 GB)?
DFS Used%: 0%?
DFS Remaining%: 92.89%?
Last contact: Mon Jul 19 11:07:22 CST 2010?
2.3 在WEB頁面下查看Hadoop工作情況?
啟動后可以通過以下兩個頁面查看節點狀況和job狀況?
http://localhost:50070;?
http://localhost:50030。?
可以查看任務的執行情況?
?
?
?3. Hadop使用?
一個測試例子wordcount?
????? 計算輸入文本中詞語數量的程序。WordCount在Hadoop主目錄下的java程序包hadoop-0.20.2-examples.jar 中,執行步驟如下:?
在/usr/local/hadoop/hadoop-0.20.2/bin/目錄下進行如下操作:?
執行 hadoop fs -ls命令,查看當前hdfs分布式文件系統的 文件目錄結構,剛執行會說no such dictionary,?
你要先建一個文件夾,用命令 haoop fs -mkdir testdir ,然后再執行hadoop fs -ls,就會展示/user/root/testdir?
當前用戶是root,所以hdfs的根目錄就是? /user/root?
hadoop fs -mkdir? okdir(新建目錄名稱,可任意命名)?
離開hodoop的安全模式?
bin/hadoop dfsadmin -safemode leave?
在這個目錄里放入文件:hadoop fs -put /usr/test_in/*.txt okdir(把本地/usr/test_in目錄里的所有txt文件copy到 hdfs分布式文件系統的 /user/root/inputdir 目錄里面,因為當前目錄就是root 所以 直接寫input 就代表/user/root/inputdir)?
在/usr/local/hadoop/hadoop-0.20.2下執行:?
[root@master hadoop-0.20.2]# hadoop jar hadoop-0.20.2-examples.jar wordcount okdir output (提交作業,此處需注意okdir與output是一組任務,下次再執行wordcount程序,還要新建目錄,不能跟okdir與output重名)
?
?
?
可以查看運行結果?
# bin/hadoop dfs -cat hellooutput/part-r-00000?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
