hadoop環境的搭建

                                                                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)不少錯誤咱們經過日誌能夠很好的解決

相關文章
相關標籤/搜索