Ubuntu Docker 搭建Hadoop分散式叢集
阿新 • • 發佈:2018-12-10
確保您擁有
root
許可權 , 凡是{}
包含的內容, 都是您需要更改的
-
apt install docker
-
docker pull ubuntu:16.04
-
docker run -ti -v {YourHome}/share:/root/build ubuntu:16.04
(共享本地檔案(YourHome)/share
到docker
容器中)
-
將共享檔案
/root/build
中 的兩個檔案YourJdkVersion, YourHadoopVersion
解壓到/opt
中 -
Hadoop (/opt/{YourHadoopVersion}/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/{YourHadoopVersion}/tmp</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value> <!-- 2個副本 -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/{YourHadoopVersion}/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/{YourHadoopVersion}/tmp/dfs/data</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20480</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10021</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19889</value>
</property>
</configuration>
- 安裝
ssh
, 然後執行 下列操作
8.1ssh-keygen -t rsa
8.2cat id_dsa.pub >> authorized_keys
同時生成祕鑰, 用於免密登入
8.3 測試免密登入ssh localhost
是否成功 - 在
~/.bashrc
中新增以下內容
export JAVA_HOME=/opt/{YourJdkVersion}
export JRE_HOME=$JAVA_HOME/jre
export HADOOP_HOME=/opt/{YourHadoopVersion}
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JRE_HOME/bin
/etc/init.d/ssh start | service ssh start // 容器啟動時開啟 ssh 服務,兩者選其一, 請不要添加當前註釋
提交安裝完畢的容器
注意: 開一個新的終端, 不要關閉第5步開啟終端
提交當前更改完成後的映象
- master
docker commit {CONTAINER_ID}
(第5步容器的主機名, 例如 [email protected]後邊 8422c4683024 即為容器ID){YourContainerName}(such as hadoop/master)
- slave
docker commit {CONTAINER_ID}
(第5步容器的主機名, 例如 [email protected]後邊 8422c4683024 即為容器ID){YourContainerName}(such as hadoop/slave)
- 檢視提交的
image
docker images
檢視您提交的image
是否存在, 若沒出現問題, 則您可檢視到hadoop/master
等image
存在
執行專案
注意 容器每次啟動時
/etc/hosts
每次都會初始化, 因此, 在每次開啟容器後都需要對hosts
檔案進行修改
docker run -ti -h master {YourContainerName}(such as hadoop/master)
docker run -ti -h slave1 {YourContainerName}(such as hadoop/slave)
docker run -ti -h slave2 {YourContainerName}(such as hadoop/slave)
- 檢視啟動的容器的
hosts
檔案,相互新增對方的 IP 對映,master/slave1/slave2
各自的/etc/hosts
檔案
1. 在 master 中新增 slave1/slave2 的 ip
172.17.0.2 master
172.17.0.3 slave1 (slave1中/etc/hosts的對映, 需自己檢視)
172.17.0.4 slave2 (slave2中/etc/hosts的對映, 需自己檢視)
2. 將 hosts 傳送到 slave1/slave2
scp /etc/hosts [email protected]/etc/
scp /etc/hosts [email protected]/etc/
- 更改 /opt/
{YourHadoopVersion}
/etc/hadoop/slaves , 新增 Hadoop 節點 (eg: 新增slave1, slave2) - 格式化
NameNode
: hdfs namenode -format (如果不想儲存每次執行後的資料, 請每次執行啟動 hadoop 時記得格式化 NameNode) start-all.sh
- 在
master
端看到以下程序
- 在
slave1
端看到以下程序
- 在
slave2
端看到以下程序
溫馨提示, 如果需要將您本次專案執行資料進行儲存, 請更新當前映象
docker ps
檢視正在執行的容器- 將對應容器進行提交 (slave只需要提交一份即可)
docker commit CONTAINER_ID YourContainerName (such as hadoop/master)
至此, 專案搭建成功, 祝您好運.
本教程最終解釋權歸 © lzgabel 所有, 有問題請 email我