Contents

Hadoop - 偽分布式安裝步驟

Hadoop 為 Apache 基金會的開源頂級專案,為軟體框架做為分散式儲存及運算,無論是增減加機器都能處理,另具備高可用性、數據副本等能力

0. 基本資訊

Note
  • 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
Info

偽分布式相對完全分佈式相對容易且簡單,資源要求也不高

基本: 2 Cores 、 4G memory


1. 建置步驟 - 偽分布式安裝:

1. 安裝pip(管理者身份)

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

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

  1. hadoop帳號
1
sudo adduser hadoop 
  1. 檢查是否已經創立
1
2
3
4
grep 'hadoop' /etc/passwd
grep 'hadoop' /etc/group
grep 'hadoop' /etc/shadow
ls -l /home

3. 安裝OpenJDK8(管理者身份)

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

https://i.imgur.com/NRulRia.png

  1. 重新載入設定檔,並檢查設定是否正確
1
source /etc/profile.d/jdk.sh # . /etc/profile.d/jdk.sh

4. 建立無密碼login(Hadoop身份)

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

5. 建立Linux hotsts名單(管理者身份)

1
nano /etc/hosts

https://i.imgur.com/oZlHEDr.png


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

  1. 下載
1
2
cd
wget http://ftp.tc.edu.tw/pub/Apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
Info
如果載點失效,請至官網下載~~
  1. 解壓縮
1
2
tar -tvf hadoop-3.2.1.tar.gz #查看一下檔案內容
tar -xvf hadoop-3.2.1.tar.gz -C /usr/local
  1. 更名
1
mv /usr/local/hadoop-3.2.1 /usr/local/hadoop
  1. 改變資料夾及檔案擁有者
1
chown -R hadoop:hadoop /usr/local/hadoop

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

  1. 設定.bashrc
1
nano ~/.bashrc

https://i.imgur.com/FdzPaih.png

1
2
3
4
5
6
# 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. 重新載入設定檔
1
source ~/.bashrc  # . .bashrc
  1. 查看環境變數 https://i.imgur.com/o9tQbvl.png

8. 更改 Hadoop運行程式時環境腳本(Hadoop身份)

1
nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

https://i.imgur.com/SaJCOJS.png

1
2
3
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

9. 更改 Hadoop core-site.xml(Hadoop身份)

1
nano /usr/local/hadoop/etc/hadoop/core-site.xml 

https://i.imgur.com/0TdOD3O.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<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>
Tip

Hadoop 3.2.0版之後有檢查語法指令

1
hadoop conftest

https://i.imgur.com/k8nk5y2.png


10. 更改 Hadoop mapred-site.xml(Hadoop身份)

1
nano /usr/local/hadoop/etc/hadoop/mapred-site.xml

https://i.imgur.com/fbKcXe0.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<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>

11. 更改 Hadoop yarn-site.xml(Hadoop身份)

1
nano /usr/local/hadoop/etc/hadoop/yarn-site.xml

https://i.imgur.com/KWTS3L6.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<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>

-->

12. 更改Hadoop hdfs-site.xml(Hadoop身份)

1
nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml

https://i.imgur.com/oVJnLVh.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<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>

13. 建立Hadoop worker檔(管理者身份)

1
nano /usr/local/hadoop/etc/hadoop/workers

https://i.imgur.com/DgAhgdI.png

  • 校長兼工友的概念

14. Namenode format(hadoop身份)

1
hdfs namenode -format 

15. 啟動hdfs(hadoop身份)

1
start-dfs.sh 

https://i.imgur.com/QFJH83m.png


16. 啟動yarn(hadoop身份)

1
start-yarn.sh 

https://i.imgur.com/zMkms3i.png


17. 啟動History Server(hadoop身份)

1
2
mapred --daemon start historyserver
#mr-jobhistory-daemon.sh start historyserver (deprecated)

https://i.imgur.com/3qOJtzW.png


18. 檢查啟動的Java程式

1
jps

https://i.imgur.com/mNEFV3N.png

19. 跑個pi 測試一下mapreduce (hadoop身份)

1
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 30 100

https://i.imgur.com/AVmxAeq.png https://i.imgur.com/XgP9SCA.png

Info

會自動建立hadoop的目錄

https://i.imgur.com/U1AlSHk.png



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!