確保您擁有 root 許可權 , 凡是{} 包含的內容, 都是您需要更改的

  1. apt install docker

  2. docker pull ubuntu:16.04

  3. docker run -ti -v {YourHome}/share:/root/build ubuntu:16.04 (共享本地檔案 (YourHome)/sharedocker容器中)
    Hadoop 搭建

  4. 將共享檔案/root/build 中 的兩個檔案YourJdkVersion, YourHadoopVersion 解壓到 /opt

  5. 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>
  1. 安裝 ssh, 然後執行 下列操作
    8.1 ssh-keygen -t rsa
    8.2 cat id_dsa.pub >> authorized_keys 同時生成祕鑰, 用於免密登入
    8.3 測試免密登入 ssh localhost 是否成功
  2. ~/.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步開啟終端
提交當前更改完成後的映象

  1. master
    docker commit {CONTAINER_ID} (第5步容器的主機名, 例如 [email protected]後邊 8422c4683024 即為容器ID) {YourContainerName}(such as hadoop/master)
  2. slave
    docker commit {CONTAINER_ID} (第5步容器的主機名, 例如 [email protected]後邊 8422c4683024 即為容器ID) {YourContainerName}(such as hadoop/slave)
  3. 檢視提交的 image
    docker images 檢視您提交的 image 是否存在, 若沒出現問題, 則您可檢視到 hadoop/masterimage 存在

執行專案

注意 容器每次啟動時 /etc/hosts 每次都會初始化, 因此, 在每次開啟容器後都需要對 hosts 檔案進行修改

  1. docker run -ti -h master {YourContainerName}(such as hadoop/master)
  2. docker run -ti -h slave1 {YourContainerName}(such as hadoop/slave)
  3. docker run -ti -h slave2 {YourContainerName}(such as hadoop/slave)
  4. 檢視啟動的容器的 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/	
  1. 更改 /opt/ {YourHadoopVersion} /etc/hadoop/slaves , 新增 Hadoop 節點 (eg: 新增slave1, slave2)
  2. 格式化 NameNode : hdfs namenode -format (如果不想儲存每次執行後的資料, 請每次執行啟動 hadoop 時記得格式化 NameNode)
  3. start-all.sh
  4. master 端看到以下程序

master

  1. slave1 端看到以下程序

slave1

  1. slave2 端看到以下程序

slave2

溫馨提示, 如果需要將您本次專案執行資料進行儲存, 請更新當前映象

  1. docker ps 檢視正在執行的容器
  2. 將對應容器進行提交 (slave只需要提交一份即可)
  3. docker commit CONTAINER_ID YourContainerName (such as hadoop/master)

save-docker-images

至此, 專案搭建成功, 祝您好運.

本教程最終解釋權歸 © lzgabel 所有, 有問題請 email