Hadoop 2.4.0 分佈式集羣搭建教程

  • 配置說明

以在公司搭建的Hadoop爲例。版本Hadoop2.4,存儲在360雲盤中。html

全部的配置文件位於附件中,供後來參考。
Master(namenode):
hadoop-test1     192.168.*.*8(內網地址)     10.*.*.*5(外網地址)
 
Slaver(datanode):
hadoop-test2      192.168.*.*9(內網地址)     10.*.*.*6(外網地址)
 
操做系統爲linux
  • 配置過程
1. ssh免密碼訪問
2. 安裝Java和Hadoop(就是拷貝解壓,過程省略)
3.配置系統變量和hosts
4.配置hadoop參數
5.啓動和調試Hadoop
 
最後我會說下遇到的問題和注意事項。
 
  • SSH免密碼訪問
以A主機B主機爲例:
A生成本身的公鑰和私鑰,並將公鑰給B。B若是把公鑰做爲受權密碼,那麼A就能夠免密碼訪問B。
由於A發送信息通過本身的私鑰加密,B用公鑰能打開的話,就能夠肯定是A。
在Linux下,生成公鑰私鑰的命令爲:
  1. ssh-keygen -t rsa
一路回車下去,若是是root用戶,會在/root目錄下生成.ssh文件夾(普通用戶則是/home/用戶名/下)。
文件夾中的id_rsa是私鑰,id_rsa.pub是公鑰。新建authorized_keys文件(受權文件),並把公鑰內容拷貝進去,那麼這個主機就能夠無密碼訪問本身了。試一試:
  1. ssh localhost
若是想要訪問B主機,那就要在B主機上相同的位置建立 authorized_keys,並把A的公鑰拷貝進去。
ps,若是想要互訪,那麼在B上也要生成一遍公鑰私鑰。
ps2, authorized_keys以行爲單位追加,每一行就是id_rsa.pub的所有內容。
 
  • 配置系統變量和hosts
系統變量主要是Java和hadoop的路徑信息,它位於/etc/profile:
追加如下內容,其中加粗的是要改動的:
  1. # java path
  2. JAVA_HOME=/usr/java/jdk1.7.0_01
  3. CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/lib/dt.jar
  4. PATH=$JAVA_HOME/bin:$PATH
  5. #hadoop path new
  6. HADOOP_HOME=/usr/hadoop-2.4.0
  7. PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  8. HADOOP_MAPARED_HOME=${HADOOP_HOME}
  9. HADOOP_COMMON_HOME=${HADOOP_HOME}
  10. HADOOP_HDFS_HOME=${HADOOP_HOME}
  11. YARN_HOME=${HADOOP_HOME}
  12. HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
  13. HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
  14. YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
其中的目錄都是總文件夾的位置。
hosts位於/etc/中,要添加master和slave的IP信息,因爲二者都位於內網,因此用內網IP:
  1. 192.168.*.*8 hadoop-test1
  2. 192.168.*.*9 hadoop-test2
ps,master和slave都須要配置。
 
  • 配置Hadoop參數
進入最複雜的配置hadoo參數了。先介紹下Hadoop的目錄結構:
bin和sbin就是經常使用的hadoop執行腳本了,若是咱們將其添加到系統變量,就不用每次都到目錄下才能運行。
logs是日誌文件,運行過程當中的錯誤能夠到此來查。
etc/hadoop/文件下,都是配置文件。建議查閱相關的說明,或者直接使用附件配置文件並進行路徑的的修改。如下對經常使用的和須要修改的進行說明:
 
core-site.xml:
    在裏面須要配置hdfs的路徑和tmp.dir的位置,加粗的是須要修改的:
  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value>hdfs://192.168.*.*8:9000</value>
  4. </property>
  5. <property>
  6. <name>hadoop.tmp.dir</name>
  7. <value>/usr/temp</value>
  8. </property>
 
hadoop-env.sh:
    用於指定hadoop的運行環境,若是沒有改動就是默認的運行環境(系統變量裏面配置的)。須要進行檢查。
 
hdfs-site.xml:
    hdfs的配置文件:
  1. <property>
  2. <name>dfs.namenode.name.dir</name>
  3. <value>/usr/hdfs/name</value>
  4.                   <final>true</final>
  5. </property>
  6. <property>
  7. <name>dfs.datanode.data.dir</name>
  8. <value>/usr/hdfs/data</value>
  9.                   <final>true</final>
  10. </property>
  11.          <property>
  12.                 <name>dfs.replication</name>
  13.                 <value>1</value>
  14.          </property>
  15. <property>
  16.     <name>dfs.permissions</name>
  17.     <value>false</value>
  18.     <description>
  19.        If "true", enable permission checking in HDFS.
  20.        If "false", permission checking is turned off,
  21.        but all other behavior is unchanged.
  22.        Switching from one parameter value to the other does not change the mode,
  23.        owner or group of files or directories.
  24.     </description>
  25.  </property>
    前兩項分別是namenode和datanode的存放位置。
    ps,namenode中主要存放數據塊的地址映射,數據塊在datanode中。
 
mapred-env.sh:
    配置MapReduce的運行環境,通常就加入JDK的路徑:
  1. export JAVA_HOME=/usr/java/jdk1.7.0_01
 
mapred-site.xml:
    mapreduce的配置文件,在2.0後的hadoop中,mapReduce都交由yarn處理,因此要配置(還有其它配置,此處只講最基本的):
  1. <property>
  2. <name>mapreduce.framework.name</name>
  3. <value>yarn</value>
  4. </property>
 
slaves:
    slave的配置文件,以行爲單位寫上ip地址就能夠了。(建議內網IP,不要master的ip)
 
yarn-env.sh:
    配置yarn的運行環境,通常就加入JDK的路徑:
  1. export JAVA_HOME=/usr/java/jdk1.7.0_01
 
yarn-site.xml:
    yarn的配置文件,參數不少。附件中的配置爲:
  1. <!-- Site specific YARN configuration properties -->
  2. <property>
  3.                 <name>yarn.nodemanager.aux-services</name>
  4.                 <value>mapreduce_shuffle</value>
  5.         </property>
  6.         <property>
  7.                <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
  8.                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  9.         </property>
  10.         <property>
  11.                 <name>yarn.resourcemanager.address</name>
  12.                 <value>192.168.*.*8:8032</value>
  13.         </property>
  14.         <property>
  15.                 <name>yarn.resourcemanager.scheduler.address</name>
  16.                 <value>192.168.*.*8:8030</value>
  17.         </property>
  18.         <property>
  19.                 <name>yarn.resourcemanager.webapp.address</name>
  20.                 <value>192.168.*.*8:8088</value>
  21.         </property>
  22.         <property>
  23.                 <name>yarn.resourcemanager.resource-tracker.address</name>
  24.                 <value>192.168.*.*8:8031</value>
  25.         </property>
  26.         <property>
  27.                 <name>yarn.resourcemanager.admin.address</name>
  28.                 <value>192.168.*.*8:8033</value>
  29.         </property>
  30.         <property>
  31.                 <name>yarn.resourcemanager.hostname</name>
  32.                 <value>192.168.*.*8</value>
  33.         </property>
  34.         <property>
  35.                 <name>yarn.nodemanager.resource.memory-mb</name>
  36.                 <value>20480</value>
  37.         </property>
 
就此大致配置完畢,以上是在master中的配置。slave中只須要將全部hadoop文件拷貝過去,並清空slave中的內容。
 
  • 啓動和調試Hadoop
hadoop的啓動須要在namenode上進行。啓動前,要清空一下namenode:
  1. hadoop namenode -format
而後分別start-dfs.sh和start-yarn.sh。
經過jps查看進程,若是master機器上有:
SecondaryNamenode
ResourceManager
Namenode
Jps
說明namenode機器運行正常。
若是slave機器上有:
Datanode
NodeManager
Jps
說明slave運行正常。
 
此時hadoop正常的跑起來了,能夠經過web頁面:
  1. http://10.*.*.*0:50070/
  2. http://10.*.*.*0:8088/
查看信息。
 
  • 問題及注意事項
namenode沒有跑起來:
    關閉hadoop服務,執行hadoop namenode -format。再啓動,若是仍是跑不起來,則須要查看日誌。
 
datanode沒有跑起來:
    這種狀況多是多種問題致使,須查看日誌。我遇到的有:
    1. datanode沒有連上namenode:hosts沒有配置
    2.  NameNode 和 DataNode 的namespaceID或者ClusterID不一致:因爲兩次或者以上格式化NameNode形成的。解決方法一:刪除全部DataNode的資料(dfs.datanode.data.dir和hadoop.tmp.dir的位置 )。解決方法二:修改每一個DataNode的namespaceID(位於$(dfs.data.dir)的current的VERSION中),也能夠修改NameNode的該ID(位於$(dfs.data.dir)的current的VERSION中)。
 
安全模式:
    分佈式文件系統啓動時候會有安全模式,當處於安全模式時,文件系統內容不容許修改和刪除。能夠經過命令退出安全模式。
 
對Linux系統添加新用戶後沒有對應用戶文件夾:
     useradd hadoop -m
    加了-m有的系統中才會有home下的文件夾,而這個文件夾的權限會影響SSH的免密碼登陸。
 
各類Permission Denied:
    將文件權限改爲777:
    chmod 777 *.sh
    
 
參考教程:
 





附件列表

相關文章
相關標籤/搜索