hadoop3.0全分佈式集羣搭建

個人博客原文鏈接

hadoop3.0的全分佈式搭建折騰了好久,因爲網上基本上都是2.x的搭建教程,期間有好幾個坑比較難弄,不過最後還是都解決了,下面簡要記錄筆者的搭建過程,以及遇到的坑。

搭建環境:CentOS7+hadoop3.0.3+jdk8
集羣配置:1臺主節點+3臺子節點
主節點:hadoop1
子節點:hadoop2 hadoop3 hadoop4

前提準備

  1. 安裝scp服務
  2. 安裝配置jdk
  3. 配置靜態ip地址
  4. 修改主機名
  5. 配置主機名和ip地址映射
  6. 關閉防火牆,設置開機不自啓動
    注:以上操作在筆者之前的Linux相關筆記中均有介紹

正式搭建集羣

  1. 在所有機器添加統一用戶hadoop
    useradd hadoop
    passwd hadoop
  2. 配置sudo免密
    在root用戶下
    vi /etc/sudoers

    root ALL=(ALL) ALL
    下面添加
    hadoop ALL=(ALL) ALL
    修改完退出root用戶,回到hadoop用戶
  3. 創建hadoop相關目錄
    mkdir -p /home/hadoop/apps/dfs/data
    mkdir /home/hadoop/apps/dfs/name
    mkdir /home/hadoop/apps/tmp
  4. 上傳並解壓hadoop-3.0.3.tar.gz到apps目錄下
    sftp上傳
    tar -zxvf hadoop-3.0.3.tar.gz -C /home/hadoop/apps/
  5. 配置hadoop-env.sh
    vi /home/hadoop/apps/hadoop-3.0.3/etc/hadoop/hadoop-env.sh
    找到#export JAVA_HOME
    在下面添加
    export JAVA_HOME=/usr/local/jdk
  6. 修改核心配置文件core-site.xml
    vi core-site.xml
    在configuration標籤中添加屬性

    <configuration>
    <property>
    <name>fs.defaultFS</name> #默認
    <value>hdfs://hadoop1:9000</value> #hdfs的api接口
    </property>
    <property>
    <name>hadoop.tmp.dir</name> #hadoop運行時產生臨時數據的存儲目錄
    <value>/home/hadoop/apps/tmp</value> #該目錄的地址
    </property>
    </configuration>
  7. 配置hadoop的底層存儲hdfs-site.xml
    vi hdfs-site.xml
    在configuration標籤中添加屬性

    <configuration>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop1:50090</value>
    </property>
    <property>
    <name>dfs.replication</name> #設置副本個數
    <value>3</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name> #設置namende數據存放點
    <value>file:/home/hadoop/apps/dfs/name</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name> #設置datanode數據存放點
    <value>file:/home/hadoop/apps/dfs/data</value>
    </property>
    </configuration>
  8. 複製並重命名mapred-site.xml.template
    cp mapred-site.xml.template mapred-site.xml
  9. 修改配置文件mapred-site.xml
    vi mapred-site.xml
    在configuration標籤中添加屬性

    <configuration>
    <property>
    <name>mapreduce.framwork.name</name> #設置mapreduce的運行平臺的名稱
    <value>yarn</value> #設置mapreduce的運行平臺爲yarn
    </property>
    </configuration>
  10. 修改配置文件yarn-site.xml
    vi yarn-site.xml
    在configuration標籤中添加屬性

    <configuration>
    <property>
    <name>yarn.resourcemanager.hostname</name> #指定yarn的老大的地址
    <value>hadoop1</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name> #reducer獲取數據的方式
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>
  11. 修改workers文件
    注:這個文件是填寫從節點的主機名稱
    添加
    hadoop2
    hadoop3
    hadoop4
  12. 將apps文件夾分發到其他機器
    scp -r /home/hadoop/apps hadoop2:/home/hadoop/
    scp -r /home/hadoop/apps hadoop3:/home/hadoop/
    scp -r /home/hadoop/apps hadoop4:/home/hadoop/
  13. 配置hadoop的環境變量
    sudo vi ~/.bash_profile
    添加

    HADOOP_HOME=/home/hadoop/apps/hadoop-3.0.3
    PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_HOME PATH

    重新加載
    source ~/.bash_profile
  14. 在其他機器同樣配置hadoop的環境變量
  15. 格式化hdfs(沒事不要用這個命令,蛋疼)
    hdfs namenode -format
  16. 配置hadoop用戶免密登錄
    ssh-keygen
    ssh-copy-id hadoop1
    ssh-copy-id hadoop2
    ssh-copy-id hadoop3
    ssh-copy-id hadoop4
  17. 啓動hdfs集羣
    start-dfs.sh
    停止hdfs
    stop-dfs.sh
  18. 啓動yarn集羣
    start-yarn.sh
    停止yarn
    stop-yarn.sh
  19. 啓動所有服務(不推薦)
    start-all.sh
    相當於start-dfs.sh+start-yarn.sh
  20. 停止所有服務
    stop-all.sh
  21. 在瀏覽器查看
    hadoop1:9870
    hadoop1:8088
  22. 查看該集羣根目錄
    hdfs dfs -ls /
  23. 創建自己的家目錄
    hdfs dfs -mkdir /user/xujie
  24. 測試實例
    cd /home/hadoop/apps/hadoop-3.0.3/share/hadoop/mapreduce/
    調用jar包計算pi的值,計算100次
    hadoop jar hadoop-mapreduce-examples-3.0.3.jar pi 3 100

問題彙總

  1. 沒有配置文件salves
    解決方案:因爲3.0以後slaves更改名稱爲workers了
  2. 啓動所有服務,datanode卻沒有啓動
    一般是hdfs格式化以後運行了程序,然後又格式化了,好了gg,datanode無法啓動,因爲name的clusterID和data的clusterID不一致了。
    解決方案:
    • 方案一:刪除/home/hadoop/apps/dfs/data和/home/hadoop/apps/dfs/name文件夾裏的所有內容,重新再hdfs格式化一遍。
    • 方案二:把/home/hadoop/apps/dfs/name/current/VERSION中的clusterID複製替換/home/hadoop/apps/dfs/data/current/VERSION中的clusterID
  3. 啓動從節點報錯
    解決方案:不要在格式化hdfs以後產生了相關數據以後才scp整個hadoop到其他機器,會產生衝突。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章