安裝分布式Hadoop教學 - twilighthook/BigDataNote GitHub Wiki

Hadoop安裝總共分成三種:

  1. 單機模式(Standalone mode, local mode)
      這種模式下不會有背景城市運行在JVM中。單機模式適合用於開發MapReduce程式,因為易於測試與除錯。
  2. 偽分散模式(Pseudo-distributed mode)
      Hadoop服務運行於本機,可以模擬成小規模的叢集。
  3. 完全分散模式(Fully distributed mode)
      Hadoop服務運行在一座叢集的主機上,真正的hdfs系統。

Hadoop是一個分散式架構,它本身是一個主從式架構(master-slave),由master下達指令,讓slave運行達到分散式運行,藉此增加處理效能
所以在實作時需要有兩台以上的電腦,可以用vm代替,此文章的demo是用linux(ubuntu)在VMware上實作

1. 新增用戶群組

首先在兩台電腦皆設置新的使用者hadoopuser,歸屬於hadoopgroup的群組,並設定密碼

sudo addgroup Hadoop
sudo adduser -ingroup hadoop hadoopuser
sudo passwd hadoopuser

2. 設定ip網路設定

接下來切換至 hadoopuser設定SSH網路協定
在這邊要先將hadoopuser加入sudoers文件才有權限設置
(修改文件前先安裝vim)

sudo apt-get install vim

進到超級使用者權限->增加文件修改權限

su –
chmod u+w /etc/sudoers
在root ALL=(ALL) ALL下面新增hadoopuser ALL=(ALL) ALL

切換至hadoopuser

su – hadoopuser

打開 hostname 檔案,將一台改為 master,另一台改為 slave1

sudo vim /etc/hostname

或是使用

sudo hostname master

來做更改


接下來新增IP和主機名稱的對應

sudo vim /etc/hosts
192.168.100.100 master
192.168.100.101 slave1

在這裡可以用

ip addr

來得知ip位置

3. 設定SSH連線

master必須使用SSH經金鑰認證,將工作分配給各個slave,要產生一組key,作為SSH密碼登入。

此時先安裝SSH

sudo apt-get install ssh

安裝完成後就生成一組金鑰

ssh-keygen -t rsa -P ""

並且將金鑰複製給slave1

cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
scp -r ~/.ssh slave1:~/

設定完後,用 master 試試可否連線至 slave1,成功的話就會看到 @ 後面變成 slave1 了

ssh slave1

4. 安裝JAVA

可以用下面這段安裝default的JAVA

sudo apt install default-jdk

安裝後可以用指令查看JAVA安裝版本

java -version

5. 安裝hadoop

這邊安裝的是hadoop3.2.0版本 可以先到官網下載 接下來就可以開始安裝了 安裝前先到要安裝的位置

sudo tar -zxvf hadoop-2.6.0.tar.gz

然後需要一個tmp位置和hdfs(分散式儲存系統)裡面的data和name

sudo mkdir tmp hdfs hdfs/name hdfs/data

這裡可用sudo chown hadoopuser:hadoop * 將全部的資料夾給予hadoopuser使用者

6. 設置hadoop環境參數

sudo vim ~/.bashrc

加入下面的環境配置

# Set HADOOP_HOME
export HADOOP_HOME=/opt/hadoop
# Set JAVA_HOME 
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# Add Hadoop bin and sbin directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin;$HADOOP_HOME/sbin
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar

Hadoop 的兩個檔案 (hadoop-env.sh,yarn-env.sh) 也要加入 Java 環境變數

sudo vim /opt/hadoop/etc/hadoop/hadoop-env.sh
sudo vim /opt/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

接下來要修改一些hadoop的設定檔
都在hadoop/etc/hadoop/裡面

  • 修改 core-site.xml
<configuration>
  <property>
     <name>fs.defaultFS</name>
     <value>hdfs://master:9000</value>
  </property>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>file:/opt/tmp</value>
     <description>Abase for other temporary directories.</description>
  </property>
</configuration>
  • 修改 hdfs-site.xml
<configuration>
  <property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>master:50090</value>
  </property>
  <property>
     <name>dfs.namenode.name.dir</name>
     <value>file:/opt/hdfs/name</value>
  </property>
  <property>
     <name>dfs.datanode.data.dir</name>
     <value>file:/opt/hdfs/data</value>
  </property>
  <property>
     <name>dfs.replication</name>
     <value>1</value>
  </property>
</configuration>

看有幾台slave就寫多少

  • 修改(或新增) mapred-site.xml
<configuration>
  <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
  </property>
</configuration>
  • 修改 yarn-site.xml
<configuration>
  <property>
     <name>yarn.resourcemanager.hostname</name>
     <value>master</value>
  </property>
  <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
  </property>
</configuration>

7. 將設定檔複製至各個slave

先在slave建立資料夾,並將加到使用者權限下

sudo mkdir hadoop
sudo chown hadoopuser:hadoop hadoop/

接下來用SSH的scp方式將檔案從master複製到slave底下

scp -r /opt/hadoop slave:/opt

並且修改master裡面slaves的設置

sudo vim /opt/hadoop/etc/hadoop/slaves

改成下方的內容(或是有更多slave)

slave1

8. 格式化 Namenode,並執行

hdfs namenode -format
/opt/hadoop/sbin/start-all.sh

9. 確認是否成功運作

jps

成功執行的話在master可以看到

XXXX SecondaryNameNode
XXXX ResourceManager
XXXX DataNode
XXXX NodeManager
XXXX NameNode
XXXX JPS

在slave可以看到

XXXX DataNode
XXXX NameNode
XXXX JPS

在這邊就已經最初始的安裝配置完成了 可以在masterIP:8088或是masterIP:9870看到你的設置,有顯示hdfs的一些基本訊息

接下來可以實作一些MapReduce的操作,就讓我們繼續學習下去吧

⚠️ **GitHub.com Fallback** ⚠️