Hadoop 為 Apache 基金會的開源頂級專案,為軟體框架做為分散式儲存及運算,無論是增減加機器都能處理,另具備高可用性、數據副本等能力
0. 基本資訊
Note
- 單機模式(Standalone Mode):
- 這種模式下不會於啟動任何背景Java程式,此模式適合開發測試及除錯。
- 偽分佈式模式(Pseudo-Distributed Mode)
- Hadoop中的背景Java程式均運行於本機節點,可以模擬小規模的叢集。
- 完全分佈式模式(Fully-Distributed Mode)
差異表
屬性 |
偽分佈式模式 |
完全分佈式模式 |
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(管理者身份)
- 安裝python開發工具箱
1
2
|
sudo apt update
sudo apt install python3-dev
|
- 安裝pip
1
2
3
|
#取得最新版pip腳本
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
|
2. 建立hadoop帳號(管理者身份)
- hadoop帳號
- 檢查是否已經創立
1
2
3
4
|
grep 'hadoop' /etc/passwd
grep 'hadoop' /etc/group
grep 'hadoop' /etc/shadow
ls -l /home
|
3. 安裝OpenJDK8(管理者身份)
- 更新倉庫清單
- 安裝openjdk
1
|
apt install openjdk-8-jdk
|
- 確認jdk及jre版本
1
2
|
java -version
javac -version
|
- 建立openjdk環境變數腳本
1
|
nano /etc/profile.d/jdk.sh
|
- 編輯openjdk環境變數
1
|
export JAVA_HOME='/usr/lib/jvm/java-8-openjdk-amd64'
|
- 重新載入設定檔,並檢查設定是否正確
1
|
source /etc/profile.d/jdk.sh # . /etc/profile.d/jdk.sh
|
4. 建立無密碼login(Hadoop身份)
- 切換hadoop帳號
- 打造ssh公鑰及私鑰
- 將打造好的公鑰複製一份給hadoop
1
|
ssh-copy-id hadoop@localhost
|
- 測試一下無密碼登入(不用輸入密碼代表成功了)
5. 建立Linux hotsts名單(管理者身份)
6. 下載及安裝hadoop(管理者身份)
- 下載
1
2
|
cd
wget http://ftp.tc.edu.tw/pub/Apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
|
- 解壓縮
1
2
|
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
|
7. 設定hadoop使用者環境變數 (Hadoop身份)
- 設定.bashrc
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
|
source ~/.bashrc # . .bashrc
|
- 查看環境變數
8. 更改 Hadoop運行程式時環境腳本(Hadoop身份)
1
|
nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh
|
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
|
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版之後有檢查語法指令
10. 更改 Hadoop mapred-site.xml(Hadoop身份)
1
|
nano /usr/local/hadoop/etc/hadoop/mapred-site.xml
|
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
|
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
|
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
|
15. 啟動hdfs(hadoop身份)
16. 啟動yarn(hadoop身份)
17. 啟動History Server(hadoop身份)
1
2
|
mapred --daemon start historyserver
#mr-jobhistory-daemon.sh start historyserver (deprecated)
|
18. 檢查啟動的Java程式
19. 跑個pi 測試一下mapreduce (hadoop身份)
1
|
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 30 100
|
Info
會自動建立hadoop的目錄