原創|行業資訊|編輯:陳俊吉|2017-05-03 09:40:35.000|閱讀 181 次
概述:其實參看Hadoop官方文檔已經能夠很容易配置分布式框架運行環境了,不過這里既然寫了就再多寫一點,同時有一些細節需要注意的也說明一下,其實也就是這些細節會讓人摸索半天。Hadoop可以單機跑,也可以配置集群跑,單機跑就不需要多說了,只需要按照Demo的運行說明直接執行命令即可。這里主要重點說一下集群配置運行的過程。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
其實參看官方文檔已經能夠很容易配置分布式框架運行環境了,不過這里既然寫了就再多寫一點,同時有一些細節需要注意的也說明一下,其實也就是這些細節會讓人摸索半天。Hadoop可以單機跑,也可以配置集群跑,單機跑就不需要多說了,只需要按照Demo的運行說明直接執行命令即可。這里主要重點說一下集群配置運行的過程。
7臺普通的機器,操作系統都是Linux。內存和CPU就不說了,反正Hadoop一大特點就是機器在多不在精。JDK必須是1.5以上的,這個切記。7臺機器的機器名務必不同,后續會談到機器名對于有很大的影響。
正如上面我描述的,對于Hadoop的集群來說,可以分成兩大類角色:Master和Slave,前者主要配置NameNode和JobTracker的角色,負責總管分布式數據和分解任務的執行,后者配置DataNode和TaskTracker的角色,負責分布式數據存儲以及任務的執行。本來我打算看看一臺機器是否可以配置成Master,同時也作為Slave使用,不過發現在NameNode初始化的過程中以及TaskTracker執行過程中機器名配置好像有沖突(NameNode和TaskTracker對于Hosts的配置有些沖突,究竟是把機器名對應IP放在配置前面還是把Localhost對應IP放在前面有點問題,不過可能也是我自己的問題吧,這個大家可以根據實施情況給我反饋)。最后反正決定一臺Master,六臺Slave,后續復雜的應用開發和測試結果的比對會增加機器配置。
以下是一個簡單的hadoop-site.xml的配置:
fs.default.name//你的namenode的配置,機器名加端口 hdfs://10.2.224.46:54310/ mapred.job.tracker//你的JobTracker的配置,機器名加端口 hdfs://10.2.224.46:54311/ dfs.replication//數據需要備份的數量,默認是三 1 hadoop.tmp.dir//Hadoop的默認臨時路徑,這個最好配置,如果在新增節點或者其他情況下莫名其妙的DataNode啟動不了,就刪除此文件中的tmp目錄即可。不過如果刪除了NameNode機器的此目錄,那么就需要重新執行NameNode格式化的命令。 /home/wenchu/hadoop/tmp/ mapred.child.java.opts//java虛擬機的一些參數可以參照配置 -Xmx512m dfs.block.size//block的大小,單位字節,后面會提到用處,必須是512的倍數,因為采用crc作文件完整性校驗,默認配置512是checksum的最小單元。 5120000 The default block size for new files.
hadoop-env.sh文件只需要修改一個參數:
# The java implementation to use. Required. export JAVA_HOME=/usr/ali/jdk1.5.0_10
配置你的Java路徑,記住一定要1.5版本以上,免得莫名其妙出現問題。
Masters中配置Masters的IP或者機器名,如果是機器名那么需要在/etc/hosts中有所設置。Slaves中配置的是Slaves的IP或者機器名,同樣如果是機器名需要在/etc/hosts中有所設置。范例如下,我這里配置的都是IP:
Masters:
10.2.224.46
Slaves:
10.2.226.40
10.2.226.39
10.2.226.38
10.2.226.37
10.2.226.41
10.2.224.36
建立Master到每一臺Slave的SSH受信證書。由于Master將會通過SSH啟動所有Slave的Hadoop,所以需要建立單向或者雙向證書保證命令執行時不需要再輸入密碼。在Master和所有的Slave機器上執行:ssh-keygen -t rsa。執行此命令的時候,看到提示只需要回車。然后就會在/root/.ssh/下面產生id_rsa.pub的證書文件,通過scp將Master機器上的這個文件拷貝到Slave上(記得修改名稱),例如:scp root@masterIP:/root/.ssh/id_rsa.pub /root/.ssh/46_rsa.pub,然后執行cat /root/.ssh/46_rsa.pub >>/root/.ssh/authorized_keys,建立authorized_keys文件即可,可以打開這個文件看看,也就是rsa的公鑰作為key,user@IP作為value。此時可以試驗一下,從master ssh到slave已經不需要密碼了。由slave反向建立也是同樣。為什么要反向呢?其實如果一直都是Master啟動和關閉的話那么沒有必要建立反向,只是如果想在Slave也可以關閉Hadoop就需要建立反向。
將Master上的Hadoop通過scp拷貝到每一個Slave相同的目錄下,根據每一個Slave的Java_HOME的不同修改其hadoop-env.sh。
修改Master上/etc/profile:
新增以下內容:(具體的內容根據你的安裝路徑修改,這步只是為了方便使用)
export HADOOP_HOME=/home/wenchu/hadoop-0.17.1
修改完畢后,執行source /etc/profile來使其生效。
export PATH=$PATH:$HADOOP_HOME/bin
在Master上執行Hadoop namenode –format,這是第一需要做的初始化,可以看作格式化吧,以后除了在上面我提到過刪除了Master上的hadoop.tmp.dir目錄,否則是不需要再次執行的。
然后執行Master上的start-all.sh,這個命令可以直接執行,因為在6中已經添加到了path路徑,這個命令是啟動hdfs和mapreduce兩部分,當然你也可以分開單獨啟動hdfs和mapreduce,分別是bin目錄下的start-dfs.sh和start-mapred.sh。
檢查Master的logs目錄,看看Namenode日志以及JobTracker日志是否正常啟動。
檢查Slave的logs目錄看看Datanode日志以及TaskTracker日志是否正常。
如果需要關閉,那么就直接執行stop-all.sh即可。
以上步驟就可以啟動Hadoop的分布式環境,然后在Master的機器進入Master的安裝目錄,執行hadoop jar hadoop-0.17.1-examples.jar wordcount輸入路徑和輸出路徑,就可以看到字數統計的效果了。此處的輸入路徑和輸出路徑都指的是HDFS中的路徑,因此你可以首先通過拷貝本地文件系統中的目錄到HDFS中的方式來建立HDFS中的輸入路徑:
hadoop dfs -copyFromLocal /home/wenchu/test-in test-in。其中/home/wenchu/test-in是本地路徑,test-in是將會建立在HDFS中的路徑,執行完畢以后可以通過hadoop dfs –ls看到test-in目錄已經存在,同時可以通過hadoop dfs –ls test-in查看里面的內容。輸出路徑要求是在HDFS中不存在的,當執行完那個demo以后,就可以通過hadoop dfs –ls 輸出路徑看到其中的內容,具體文件的內容可以通過hadoop dfs –cat文件名稱來查看。
經驗總結和注意事項(這部分是我在使用過程中花了一些時間走的彎路):
總的來說出了問題或者啟動的時候最好去看看日志,這樣心里有底。
這部分內容其實可以通過命令的Help以及介紹了解,我主要側重于介紹一下我用的比較多的幾個命令。Hadoop dfs 這個命令后面加參數就是對于HDFS的操作,和Linux操作系統的命令很類似,例如:
Hadoop dfs –ls就是查看/usr/root目錄下的內容,默認如果不填路徑這就是當前用戶路徑;
Hadoop dfs –rmr xxx就是刪除目錄,還有很多命令看看就很容易上手;
Hadoop dfsadmin –report這個命令可以全局的查看DataNode的情況;
Hadoop job后面增加參數是對于當前運行的Job的操作,例如list,kill等;
Hadoop balancer就是前面提到的均衡磁盤負載的命令。
其他就不詳細介紹了。
編輯推薦:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn