iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
4

Hadoop有三種安裝模式:

  1. 獨立模式(Standalone)。
  2. 偽分佈模式(Pseudo-Distributed)。
  3. 多機安裝模式(Fully-Distributed)。

其中獨立模式(Standalone)偽分佈模式(Pseudo-Distributed)只需要一台host即可,多機安裝模式(Fully-Distributed)則需要多個host來達到分散(Distributed)的效果,接下來這篇文章會介紹這三種安裝方法。

獨立模式 Standalone

基本上Hadoop預設的模式就是Standalone,只要完成事前準備步驟1-5即可使用。Standalone僅供測試與體驗用途,若要執行大量運算或是儲存大量資料有可能就會撐不住啦。

讓我們來測試一下Standalone是否可以正常運作。

  • 檢查Hadoop版本:
hadoop version
#回傳結果:
Hadoop 2.8.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 66c47f2a01ad9637879e95f80c41f798373828fb
Compiled by jdu on 2017-10-19T20:39Z
Compiled with protoc 2.5.0
From source with checksum dce55e5afe30c210816b39b631a53b1d
This command was run using /home/stana/hadoop-2.8.2/share/hadoop/common/hadoop-common-2.8.2.jar
  • 嘗試在Standalone上執行mapreduce的運算:
cd ~
mkdir input
cp $HADOOP_HOME/etc/hadoop/*.xml input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar grep input output 'dfs[a-z.]+'

透過上面的指令,會把$HADOOP_HOME/etc/hadoop/*.xml路徑下所有.xml的檔案複製到~/input內,並使用hadoop-mapreduce-examples-2.8.2.jar執行MapReduce Job,會把~/input內所有檔案有關 dfs 開頭的字串撈出來。

#觀察執行結果:
cat output/*

可以看到符合條件的字串內容:

1	dfsadmin

Standalone的File System會直接使用本機的檔案系統,而非分散式的HDFS,這一點要特別注意。

偽分佈模式 Pseudo-Distributed

如果已經做好事前準備,完成解壓縮Hadoop tar檔案,接著就可以開始進行偽分佈安教步驟。

  • Step 1. 編輯hadoop-env.sh。
sudo vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh

加入JAVA_HOME設定,{path of your jdk7}為本機JAVA_HOME路徑:

# set to the root of your Java installation
export JAVA_HOME={path of your jdk7}
  • Step 2. 編輯HDFS設定檔
    • core-site.xml
    sudo vi $HADOOP_HOME/etc/hadoop/core-site.xml
    
    加入下列設定,指定本機為HDFS的路徑(預設為file://):
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
    
    • 編輯hdfs-site.xml
    sudo vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
    
    加入下列設定,將副本改為1(Default:3)。由於偽分佈只有一台機器,所以副本數改為1即可:
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>
    
  • Step 3. 編輯Yarn設定檔
    • mapred-site.xml
    sudo cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
    sudo vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
    
    加入下列設定:
    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
    • yarn-site.xml
    sudo vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
    
    加入下列設定:
    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    </configuration>
    
  • Step 4. 設定免密碼登入(ssh)
sudo ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
sudo cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
sudo chmod 0600 ~/.ssh/authorized_keys
  • Step 5. 啟動Hadoop相關service:
    • 格式化HDFS:
    hdfs namenode -format
    
    • 啟動NameNode與DataNode的daemon:
      • 如果沒有設定免密碼,在此步驟會需要輸入多次的使用者密碼。
      cd $HADOOP_HOME/sbin
      ./start-dfs.sh
      
      • 啟動成功後,可透過http://localhost:50070連線至Web UI,畫面如下:
        https://ithelp.ithome.com.tw/upload/images/20171206/20107349BYVE15CKVl.png
    • 啟動Yarn:
      • 如果沒有設定免密碼,在此步驟會需要輸入多次的使用者密碼。
      cd $HADOOP_HOME/sbin
      ./start-yarn.sh
      
      • 啟動成功後,可透過http://localhost:8088連線至Web UI,畫面如下:
        https://ithelp.ithome.com.tw/upload/images/20171206/20107349vYTTIAkXCZ.png
  • 如何關閉Hadoop相關service?
    • 關閉NameNode與DataNode
    cd $HADOOP_HOME/sbin
    ./stop-dfs.sh
    
    • 關閉Yarn:
      cd $HADOOP_HOME/sbin
      ./stop-yarn.sh
      

多機安裝模式 Fully-Distributed

基本上與偽分佈模式 (Pseudo-Distributed)的安裝方法幾乎一模ㄧ樣,只需要多設定幾個檔案即可。強烈建議要啟動hadoop service的所有機器一定要設定免密碼ssh,否則輸入密碼就非常頭大!

下列的步驟需要在每一台hadoop cluster的機器上設定:

  • 編輯Hadoop設定檔
    • core-site.xml
    sudo vi $HADOOP_HOME/etc/hadoop/core-site.xml
    
    {hostname}修改為主機名稱,指定本機為HDFS的路徑(在偽分佈為:hdfs://localhost:9000):
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://{hostname}:9000</value>
        </property>
    </configuration>
    
    • Slaves
    sudo vi $HADOOP_HOME/etc/hadoop/slaves
    
    加入將hadoop cluster的機器名稱全部加入。請將server-a1等名稱改為符合自己環境的hostname或是IP。
    server-a1
    server-a2
    server-a3
    
  • 編輯/etc/hosts
    如果$HADOOP_HOME/etc/hadoop/slaves是以IP設定,那此步驟可以省略。
    由於使用hostname會讓每台電腦無法互相認識,故需要透過設定/etc/hosts或是架設DNS,將hadoop cluster內所有機器的hostname與ip加入此檔案。

設定完畢後,多機安裝模式 (Fully-Distributed)啟動與停止的指令都與偽分佈模式 (Pseudo-Distributed)相同。啟動成功後,你就已經有一個真正的分散式儲存與運算的平台了!

下一篇要來介紹Hadoop平台上的指令!


上一篇
Day 3 - Hadoop Ecosystem 之 Hadoop 安裝 - 事前準備篇
下一篇
Day 5 - Hadoop Ecosystem 之 Hadoop HDFS操作教學
系列文
Hadoop ecosystem 工具簡介, 安裝教學與各種情境使用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
alexycsu
iT邦新手 5 級 ‧ 2019-01-14 10:19:29

hi 大大: 我照day4 步驟做 偽分佈模式出現以下錯誤:
alex@alex-VirtualBox:/opt/hadoop/sbin$ ./start-dfs.sh
Starting namenodes on [localhost]
localhost: Load key "/home/alex/.ssh/id_rsa": Permission denied
localhost: alex@localhost: Permission denied (publickey,password).
Starting datanodes
localhost: Load key "/home/alex/.ssh/id_rsa": Permission denied
localhost: alex@localhost: Permission denied (publickey,password).
Starting secondary namenodes [alex-VirtualBox]
alex-VirtualBox: Load key "/home/alex/.ssh/id_rsa": Permission denied
alex-VirtualBox: alex@alex-virtualbox: Permission denied (publickey,password).
請問 可能是什麼問題嗎?
麻煩您指導! 謝謝!

stana iT邦新手 5 級 ‧ 2019-01-15 16:35:59 檢舉

Hi,

由錯誤訊息 alex-VirtualBox: Load key "/home/alex/.ssh/id_rsa": Permission denied 看起來像是權限問題, 看您的指令是使用alex這個使用者啟動hdfs, 有可能是alex這個使用者沒有權限可以讀取 /home/alex/.ssh/id_rsa 這個檔案, 檢查一下權限.

alexycsu iT邦新手 5 級 ‧ 2019-01-16 13:44:10 檢舉

/images/emoticon/emoticon41.gif

作者超佛心!! 純推~

我要留言

立即登入留言