第一次部屬 Hadoop 就上手 – Part 7 – 偽分佈式架設不求人
- Hadoop三種模式:
- 單機模式(Standalone Mode):
- 這種模式下不會於啟動任何背景Java程式,此模式適合開發測試及除錯。
- 偽分佈式模式(Pseudo-Distributed Mode)
- Hadoop中的背景Java程式均運行於本機節點,可以模擬小規模的叢集。
- 完全分佈式模式(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叢集基礎架設
-
要準備的事項
- 擁有一台Linux (此範例使用 Ubuntu 1804)
-
停用IPv6(管理者身份)
- 檢查一下網路跟監聽的狀態(切換管理者)
ip addr show lsof -nPi
- 修改開機設定檔
nano /etc/default/grub
- 更新開機設定檔
update-grub # update-grub2
- 重新開機
reboot
- 檢查一下IPv6是否已經停用了
ip addr show lsof -nPi
-
安裝pip(管理者身份) ( 如無須使用 Jupyter 可以省略此步驟)
- 安裝python開發工具箱
sudo apt update sudo apt install python3-dev
- 安裝pip
#取得最新版pip腳本 wget https://bootstrap.pypa.io/get-pip.py python3 get-pip.py
-
建立hadoop帳號(管理者身份)
1.hadoop帳號
sudo adduser hadoop
- 檢查是否已經創立
grep 'hadoop' /etc/passwd grep 'hadoop' /etc/group grep 'hadoop' /etc/shadow ls -l /home
-
安裝OpenJDK8(管理者身份)
- 更新倉庫清單
apt update
- 安裝openjdk
apt install openjdk-8-jdk
- 確認jdk及jre版本
java -version javac -version
- 建立openjdk環境變數腳本
nano /etc/profile.d/jdk.sh
- 編輯openjdk環境變數
export JAVA_HOME='/usr/lib/jvm/java-8-openjdk-amd64'
- 重新載入設定檔,並檢查設定是否正確
source /etc/profile.d/jdk.sh # . /etc/profile.d/jdk.sh
-
建立無密碼login(Hadoop身份)
- 切換hadoop帳號
su - hadoop
- 打造ssh公鑰及私鑰
ssh-keygen -t rsa
- 將打造好的公鑰複製一份給hadoop
ssh-copy-id hadoop@localhost
- 測試一下無密碼登入(不用輸入密碼代表成功了)
ssh hadoop@localhost
- 建立Linux hotsts名單(管理者身份)
nano /etc/hosts
-
下載及安裝hadoop(管理者身份)
- 下載
cd wget http://ftp.tc.edu.tw/pub/Apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
- 如果載點失效,請至官網下載~~
- 解壓縮
tar -tvf hadoop-3.2.1.tar.gz #查看一下檔案內容 tar -xvf hadoop-3.2.1.tar.gz -C /usr/local
- 更名
mv /usr/local/hadoop-3.2.1 /usr/local/hadoop
- 改變資料夾及檔案擁有者
chown -R hadoop:hadoop /usr/local/hadoop
-
設定hadoop使用者環境變數 (Hadoop身份)
- 設定.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
- 重新載入設定檔
source ~/.bashrc # . .bashrc
- 查看環境變數
- 更改 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
- 更改 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
- 更改 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>
- 更改 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>
-->
- 更改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>
- 建立Hadoop worker檔(管理者身份)
nano /usr/local/hadoop/etc/hadoop/workers
- 校長兼工友的概念
- Namenode format(hadoop身份)
hdfs namenode -format
- 啟動hdfs(hadoop身份)
start-dfs.sh
- 啟動yarn(hadoop身份)
start-yarn.sh
- 啟動History Server(hadoop身份)
mapred --daemon start historyserver
#mr-jobhistory-daemon.sh start historyserver (deprecated)
- 檢查啟動的Java程式
jps
- 跑個pi 測試一下mapreduce (hadoop身份)
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 30 100
- 會自動建立hadoop的目錄