确保您拥有
root
权限 , 凡是{}
包含的内容, 都是您需要更改的
-
apt install docker
-
docker pull ubuntu:16.04
-
下载你需要的JDK版本(YourJdkVersion), 存放在(YourHome :such as /home/lizhi)/share中
-
下载你需要的Hadoop版本(YourHadoopVersion), 存放在(YourHome :such as /home/lizhi)/share中
-
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步容器的主机名, 例如 root@8422c4683024后边 8422c4683024 即为容器ID){YourContainerName}(such as hadoop/master)
- slave
docker commit {CONTAINER_ID}
(第5步容器的主机名, 例如 root@8422c4683024后边 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 slave1@/etc/
scp /etc/hosts slave2@/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我