hadoop安裝
java
一個分佈式系統基礎架構,由Apache基金會所開發。node
用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力高速運算和存儲。apache
Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特色,而且設計用來部署在低廉的(low-cost)硬件上;並且它提供高傳輸率(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,能夠以流的形式訪問(streaming access)文件系統中的數據。vim
主節點包括名稱節點、從屬名稱節點和 jobtracker 守護進程(即所謂的主守護進程)以及管理
集羣所用的實用程序和瀏覽器。從節點包括 tasktracker 和數據節點(從屬守護進程)。兩種設
置的不一樣之處在於,主節點包括提供 Hadoop 集羣管理和協調的守護進程,而從節點包括實現
Hadoop 文件系統(HDFS)存儲功能和 MapReduce 功能(數據處理功能)的守護進程。
每一個守護進程在 Hadoop 框架中的做用。namenode 是 Hadoop 中的主服務器,它管理文件系
統名稱空間和對集羣中存儲的文件的訪問。還有一個 secondary namenode,它不是
namenode 的冗餘守護進程,而是提供週期檢查點和清理任務。在每一個 Hadoop 集羣中能夠找
到一個 namenode 和一個 secondary namenode。
datanode 管理鏈接到節點的存儲(一個集羣中能夠有多個節點)。每一個存儲數據的節點運行一
個 datanode 守護進程。
每一個集羣有一個 jobtracker,它負責調度 datanode 上的工做。每一個 datanode 有一個
tasktracker,它們執行實際工做。jobtracker 和 tasktracker 採用主-從形式,jobtracker 跨
datanode 分發工做,而 tasktracker 執行任務。jobtracker 還檢查請求的工做,若是一個
datanode 因爲某種緣由失敗,jobtracker 會從新調度之前的任務。
瀏覽器
namenode,JobTracker,SecondaryNameNode server2.example.com安全
datanode,TaskTracker server{3,4,5}.example.com服務器
首先在以上節點配置java環境(個人java安裝在/usr/local/jdk下)架構
下來配置hadoop環境框架
[root@server2 hadoop-1.1.2]# mkdir /usr/local/hadoop/ #在全部節點上建立hadoop安裝目錄 [root@server2 ~]# useradd -u 600 hadoop #在全部節點上建立hadoop用戶 [root@server2 hadoop]# tar -zxvf hadoop-1.1.2.tar.gz -C /usr/local/hadoop/ #解壓到hadoop安裝目錄 [root@server2 hadoop]#chown -R hadoop.hadoop /usr/local/hadoop/hadoop-1.1.2/ [hadoop@server2 hadoop-1.1.2]$ vim conf/hadoop-env.sh #指定java環境 |
# The java implementation to use. Required. export JAVA_HOME=/usr/local/jdk # Extra Java CLASSPATH elements. Optional. # export HADOOP_CLASSPATH= |
[hadoop@server2 hadoop-1.1.2]$ vim conf/core-site.xml <configuration> <property> <name>fs.default.name</name> <value>hdfs://192.168.122.2:9000</value>#指定namenode </property> <property> <name>hadoop.tmp.dir</name>#這個指定的是文件系統依賴,覺得hadoop集羣的啓動會讀取裏面的數據,默認在/tmp下,這樣每次開機重啓會丟失 <value>/hadoop/tmp</value> </property> </configuration> [hadoop@server2 hadoop-1.1.2]$ vim conf/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.datanode.max.xcievers</name>#指定文件保存的副本數 <value>4096</value> </property> <property> <name>dfs.data.dir</name>#指定datanode存儲在哪裏,只對datanode起做用 <value>/hadoop/dfs</value> </property> </configuration> [hadoop@server2 hadoop-1.1.2]$ vim conf/mapred-site.xml <configuration> <property> <name>mapred.job.tracker</name> <value>192.168.122.2:9001</value>#指定jobtracker </property> </configuration> [hadoop@server2 hadoop-1.1.2]$ vim conf/masters 192.168.122.2 #指定SecondaryNameNode [hadoop@server2 hadoop-1.1.2]$ vim conf/slaves 192.168.122.3 #指定slave 192.168.122.4 192.168.122.5 ~ 前面咱們指定了hadoop.tmp.dir和dfs.data.dir,因此要建立此目錄 [root@server2 hadoop]# mkdir -p /hadoop/tmp/ #在全部節點上執行 [root@server2 hadoop]# mkdir -p /hadoop/dfs/#只在datanode上執行 [root@server2 hadoop]# chown -R hadoop.hadoop /hadoop/#賦予hadoop用戶權限
下來就是要保證namenode與全部slave節點進行無密碼通訊,這裏我用ssh進行無密碼通訊ssh
[hadoop@server2 ~]$ ssh-keygen [hadoop@server2 ~]$ ssh-copy-id 192.168.122.3
還有就是就是全部節點必須都有hadoop環境,全部我用nfs共享目錄
[hadoop@server2 ~]$ vim /etc/exports /usr/local/hadoop *(rw,sync,anonuid=600,anongid=600) #如下兩部操做在全部slave上進行 [hadoop@server3 tmp]$ showmount -e 192.168.122.2 [hadoop@server3 tmp]$ mount 192.168.122.2:/usr/local/hadoop/ /usr/local/hadoop/
下來就是hadoop集羣的啓動
#首先格式化namenode [hadoop@server2 hadoop-1.1.2]$ bin/hadoop namenode -fromat #下來線啓動dfs,再啓動mapred [hadoop@server2 hadoop-1.1.2]$ bin/start-dfs.sh [hadoop@server2 hadoop-1.1.2]$ bin/start-mapred.sh #經過jps來查看進程是否啓動 [hadoop@server2 hadoop-1.1.2]$ jps#我這裏安裝了hbase和zookeeper,因此會多出來一些,主要看JobTracker,NameNode,SecondaryNameNode 3960 JobTracker 4302 QuorumPeerMain 3853 SecondaryNameNode 13158 Jps 3696 NameNode 4618 HMaster 8038 Main [hadoop@server3 tmp]$ jps#在slave中查看,主要看TaskTracker和DataNode 2304 HRegionServer 2158 TaskTracker 5124 Jps 1944 DataNode
也能夠經過網頁查看
分別訪問http://192.168.122.2:50030/jobtracker.jsp和http://192.168.122.2:50070/dfshealth.jsp
搭建中遇到的問題
1)有時namenode和JobTracker沒法啓動,查看日誌顯示
org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered. 2014-04-23 09:34:46,939 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /hadoop/dfs: namenode namespaceID = 1017690817; datanode namespaceID = 1456060865 at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147) at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:399) at org.apache.hadoop.hdfs.server.datanode.DataNode.
解決辦法刪除tmp底下的文件,主要是文件/hadoop/tmp/dfs/name/current/VERSION
因此刪除掉此目錄下的文件,而後對hadoop進行格式化,從新啓動
2)namenode沒法啓動,狀況有tmp目錄的權限,是否爲hadoop用戶,還有有時9000端口被佔用,因此須要咱們手動去關掉9000端口
3)還有就是hadoop有時啓動以後在安全模式下,可是它會在必定時間以後關掉安全模式,若是咱們想當即進行操做,那麼咱們須要手動去關掉安全模式
[hadoop@server2 hadoop-1.1.2]$ bin/hadoop dfsadmin -safemode leave
4)不少錯誤咱們經過日誌能夠很好的解決