network, server, system

第一次部屬 Hadoop 就上手 – Part 7 – 偽分佈式架設不求人

  • Hadoop三種模式:
  1. 單機模式(Standalone Mode):
    • 這種模式下不會於啟動任何背景Java程式,此模式適合開發測試及除錯。
  2. 偽分佈式模式(Pseudo-Distributed Mode)
    • Hadoop中的背景Java程式均運行於本機節點,可以模擬小規模的叢集。
  3. 完全分佈式模式(Fully-Distributed Mode)
    • Hadoop中的背景Java程式運行數個主機上。
屬性 偽分佈式模式 完全分佈式模式
fs.defaultFS file:/// hdfs:///
dfs.replication 1 3
mapreduce .framework.name yarn yarn
yarn.resourcemanager.hostname localhost resourcemanager
yarn.nodemanager.auxervices mapreduce_shuffle mapreduce_shuffle

Hadoop叢集基礎架設

  1. 要準備的事項

    1. 擁有一台Linux (此範例使用 Ubuntu 1804)
  2. 停用IPv6(管理者身份)

    1. 檢查一下網路跟監聽的狀態(切換管理者)
    ip addr show
    lsof -nPi
    

    1. 修改開機設定檔
    nano /etc/default/grub
    

    1. 更新開機設定檔
    update-grub # update-grub2 
    
    1. 重新開機
    reboot
    
    1. 檢查一下IPv6是否已經停用了
    ip addr show
    lsof -nPi
    
  3. 安裝pip(管理者身份) ( 如無須使用 Jupyter 可以省略此步驟)

    1. 安裝python開發工具箱
    sudo apt update
    sudo apt install python3-dev
    
    1. 安裝pip
    #取得最新版pip腳本
    wget https://bootstrap.pypa.io/get-pip.py
    python3 get-pip.py
    

  1. 建立hadoop帳號(管理者身份)

    1.hadoop帳號

    sudo adduser hadoop 
    
    1. 檢查是否已經創立
    grep 'hadoop' /etc/passwd
    grep 'hadoop' /etc/group
    grep 'hadoop' /etc/shadow
    ls -l /home
    
  2. 安裝OpenJDK8(管理者身份)

    1. 更新倉庫清單
    apt update
    
    1. 安裝openjdk
    apt install openjdk-8-jdk
    
    1. 確認jdk及jre版本
    java -version
    javac -version
    
    1. 建立openjdk環境變數腳本
    nano /etc/profile.d/jdk.sh
    
    1. 編輯openjdk環境變數
    export JAVA_HOME='/usr/lib/jvm/java-8-openjdk-amd64'
    

    1. 重新載入設定檔,並檢查設定是否正確
    source /etc/profile.d/jdk.sh # . /etc/profile.d/jdk.sh
    
  3. 建立無密碼login(Hadoop身份)

    1. 切換hadoop帳號
    su - hadoop
    
    1. 打造ssh公鑰及私鑰
    ssh-keygen -t rsa 
    
    1. 將打造好的公鑰複製一份給hadoop
    ssh-copy-id hadoop@localhost
    
    1. 測試一下無密碼登入(不用輸入密碼代表成功了)
    ssh hadoop@localhost
    

  1. 建立Linux hotsts名單(管理者身份)
nano /etc/hosts


  1. 下載及安裝hadoop(管理者身份)

    1. 下載
    cd
    wget http://ftp.tc.edu.tw/pub/Apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
    
    1. 解壓縮
    tar -tvf hadoop-3.2.1.tar.gz #查看一下檔案內容
    tar -xvf hadoop-3.2.1.tar.gz -C /usr/local
    
    1. 更名
    mv /usr/local/hadoop-3.2.1 /usr/local/hadoop
    
    1. 改變資料夾及檔案擁有者
    chown -R hadoop:hadoop /usr/local/hadoop
    

  1. 設定hadoop使用者環境變數 (Hadoop身份)

    1. 設定.bashrc
    nano ~/.bashrc
    

    # Set HADOOP_HOME
    export HADOOP_HOME=/usr/local/hadoop
    # Set HADOOP_MAPRED_HOME
    export HADOOP_MAPRED_HOME=${HADOOP_HOME} 
    # Add Hadoop bin and sbin directory to PATH
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    1. 重新載入設定檔
    source ~/.bashrc  # . .bashrc
    
    1. 查看環境變數


  1. 更改 Hadoop運行程式時環境腳本(Hadoop身份)
nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

  1. 更改 Hadoop core-site.xml(Hadoop身份)
nano /usr/local/hadoop/etc/hadoop/core-site.xml 

<property>
   <name>hadoop.tmp.dir</name>
   <value>/home/hadoop/data</value>
   <description>Temporary Directory.</description>
</property>
<property>
   <name>fs.defaultFS</name>
   <value>hdfs://bdse.example.org</value>
   <description>Use HDFS as file storage engine</description>
</property>
  • Hadoop 3.2.0版之後有檢查語法指令
hadoop conftest


  1. 更改 Hadoop mapred-site.xml(Hadoop身份)
nano /usr/local/hadoop/etc/hadoop/mapred-site.xml

<property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
</property>
<property>
       <name>mapreduce.jobhistory.address</name>
       <value>bdse.example.org:10020</value>
</property>
<property>
       <name>mapreduce.jobhistory.webapp.address</name>
       <value>bdse.example.org:19888</value>
</property>

  1. 更改 Hadoop yarn-site.xml(Hadoop身份)
nano /usr/local/hadoop/etc/hadoop/yarn-site.xml

<property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
</property>
<property>
   <name>yarn.nodemanager.env-whitelist</name>
   <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
   <name>yarn.resourcemanager.hostname</name>
   <value>bdse.example.org</value>
</property>	

<!-- 最大核心數可以依使用需求修改(預設max=4)

<property>
   <name>yarn.scheduler.maximum-allocation-vcores</name>
   <value>2</value>
</property>

-->

<!-- 最大記憶體依使用需求修改(預設max=8192)

<property>
   <name>yarn.scheduler.maximum-allocation-mb</name>
   <value>4096</value>
</property>

-->

  1. 更改Hadoop hdfs-site.xml(Hadoop身份)
nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml

<property>
   <name>dfs.permissions.superusergroup</name>
   <value>hadoop</value>
   <description>The name of the group of super-users. The value should be a single group name.</description>
</property>
<property>
   <name>dfs.replication</name>
   <value>1</value>
   <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description>
</property>

  1. 建立Hadoop worker檔(管理者身份)
nano /usr/local/hadoop/etc/hadoop/workers

  • 校長兼工友的概念

  1. Namenode format(hadoop身份)
hdfs namenode -format 

  1. 啟動hdfs(hadoop身份)
start-dfs.sh 


  1. 啟動yarn(hadoop身份)
start-yarn.sh 


  1. 啟動History Server(hadoop身份)
mapred --daemon start historyserver
#mr-jobhistory-daemon.sh start historyserver (deprecated)


  1. 檢查啟動的Java程式
jps

  1. 跑個pi 測試一下mapreduce (hadoop身份)
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 30 100

  • 會自動建立hadoop的目錄

恭喜你完成 Hadoop 偽分布式架設


如果覺得內容還不錯,請我喝杯咖啡吧~

Similar Posts