系统准备:html
系统安装及配置 【略】详见:http://www.osyunwei.com/archives/7702.htmljava
ip配置:node
# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=dadee176-cc84-43f4-9ea9-e30a30ca3abf DEVICE=eno16777736 ONBOOT=yes #20160708 add IPADDR0=192.168.128.130 PREFIXO0=24 GATEWAY0=192.168.128.1 #DNS1= #DNS2=
DNS配置
linux
# cat /etc/resolv.conf # Generated by NetworkManager # No nameservers found; try putting DNS servers into your # ifcfg files in /etc/sysconfig/network-scripts like so: # # DNS1=xxx.xxx.xxx.xxx # DNS2=xxx.xxx.xxx.xxx # DOMAIN=lab.foo.com bar.foo.com nameserver 192.168.128.1
本地yum配置docker
# 挂载iso文件 # mkdir -p /media/cdrom # vi /etc/fstab ''' /opt/rhel-server-7.2-x86_64-dvd.iso /media/cdrom iso9660 defaults,ro,loop 0 0 ''' # mount -a # df -lh ''' /dev/loop0 3.8G 3.8G 0 100% /media/cdrom ''' # vi /etc/yum.repos.d/rhel-media.repo [rhel-media] name=Red Hat Enterprise Linux 7.2 baseurl=file:///media/cdrom enabled=1 gpgcheck=1 gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release # 清理缓存 # yum clean # 将服务器上的软件包信息在本地缓存,以提升 搜索安装软件的速度 # yum makecache
主机名修改apache
hostnamectl --staticset-hostname rhels7-docker
1、安装dockervim
因国内访问docker官网速度问题,这里使用国内的加速镜像 daocloud.iocentos
curl -sSL https://get.daocloud.io/docker | sh
安装过程将会建立一个用户组 docker缓存
查看docker版本bash
docker version
启动docker,并查看状态
systemctl start docker.service systemctl status docker.service
显示系统信息(前提:docker服务处于启动状态)
docker info
2、拉取centos镜像
docker pull daocloud.io/library/centos:centos7
3、启动镜像
一、先查看本地镜像
docker images
以下:
说明:centos是安装完hadoop后的镜像,daocloud.io/library/centos是刚刚拉取的,下面的操做都是基于此进行的
二、启动
docker run -h master --dns=192.168.128.1 -it daocloud.io/library/centos:centos7
说明:
-h master #指定主机名
--dns=192.168.128.1 #因人而异,配置错误将影响后期软件安装
-it #以交互模式启动
具体可docker run --help查看
4、安装必要软件及配置
一、安装基础软件
yum install -y wget vim openssh-server openssh-clients net-tools
说明: netstat, ifconfig命令包含在net-tools包中
安装完后并不会启动sshd服务,容器是被docker管理的,没法使用一些系统命令,要启动sshd须要执行以下命令:
/usr/sbin/sshd -D &
注意:sshd服务是hadoop必须的,在此经过脚本实现启动容器就运行sshd
vi /root/run.sh 内容 #!/bin/bash /usr/sbin/sshd -D 赋权 chmod +x /root/run.sh
二、网络配置
docker容器经过桥接与外部通讯,不想每次启动容器都要指定dns
修改默认dns
2.1修改宿主机配置文件 /etc/default/docker
DOCKER_NETWORK_OPTIONS="--dns=192.168.128.1"
2.2修改宿主机配置文件 /lib/systemd/system/docker.service
[Service] EnvironmentFile=-/etc/default/docker ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS \ $DOCKER_NETWORK_OPTIONS
详见:http://docs.master.dockerproject.org/engine/admin/systemd/
重启宿主机docker服务
systemctl daemon-reload systemctl restart docker.service #使用这个命令能够查看 docker 的启动命令是否生效 ps -ef | grep docker
root 2415 1 0 14:41 ? 00:00:10 /usr/bin/docker daemon -H fd:// --dns=192.168.128.1
root 2419 2415 0 14:41 ? 00:00:01 docker-containerd -l /var/run/docker/libcontainerd/docker-containerd.sock --runtime docker-runc --start-timeout 2m
三、安装jdk8
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.tar.gz mkdir /usr/java tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/java echo 'export JAVA_HOME=/usr/java/jdk1.8.0_91' >> /etc/bashrc echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/bashrc echo 'export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/bashrc source /etc/bashrc
四、安装hadoop
4.1 安装hadoop,并配置环境变量
wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz mkdir /usr/local/hadoop tar zxf hadoop-2.7.2.tar.gz -C /usr/local/hadoop echo 'export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.2' >> /etc/bashrc echo 'export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop' >> /etc/bashrc echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/bashrc source /etc/bashrc
4.2 配置hadoop
在HADOOP_HOME
目录下建立以下目录
切换到HADOOP_CONFIG_HOME
目录
cp mapred-site.xml.template mapred-site.xml
配置 core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadoop-2.7.2/tmp</value> <description>A base for other temporary dirctories.</description> </property> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> <final>true</final> <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implemntation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implemnetation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description> </property> </configuration>
配置hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>2</value> <final>true</final> <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> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/hadoop-2.7.2/namenode</value> <final>true</final> </property> <property> <name>dfs.datenode.data.dir</name> <value>/usr/local/hadoop/hadoop-2.7.2/datanode</value> <final>true</final> </property> </configuration>
配置mapred-site.xml
<configuration> <property> <name>maperd.job.tracker</name> <value>master:9001</value> <description>The host and port that the MapReduce job tracker runs at. IF "local", then jobs are run in-process as a single map and reduce task</description> </property> </configuration>
4.3 配置ssh免密码登陆
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
而后修改master容器/etc/ssh/sshd_config文件
UsePAM yes 改成 UsePAM no
UsePrivilegeSeparation sandbox 改成 UsePrivilegeSeparation no
[root@b5926410fe60 /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config [root@b5926410fe60 /]# sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config 修改完后,从新启动sshd [root@b5926410fe60 /]# /usr/sbin/sshd -D
4.4 修改容器root密码
passwd root
五、保存该docker容器container
docker commit -m "hadoop installed" 690a57e02578 centos:hadoop
删除多余容器
docker rm <container_id>
说明:690a57e02578 为container_id,因人而异,可经过docker ps查看
保存完成后,可经过docker images查看本地镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos hadoop b01079411e19 45 seconds ago 1.434 GB
daocloud.io/library/centos centos7 ea08fb8c4ba5 7 days ago 196.8 MB
5、启动hadoop
说明:关键因素一、sshd服务,二、/etc/hosts配置到master节点的映射
修改容器的/root/run.sh,容器ip默认从172.17.0.2开始分配,3个节点,最后一个启动master节点,故能肯定masterip为172.17.0.4
#!/bin/bash echo '172.17.0.4 master' >> /etc/hosts /usr/sbing/sshd -D
另:在宿主机上也可根据container_id用docker inspect <CONTAINER_ID>:查看容器详细信息(输出为Json)如:ip、mac、hostname等
docker inspect -f '{{ .NetworkSettings.IPAddress }}' 690a57e02578 docker inspect -f '{{ .NetworkSettings.MacAddress }}' 690a57e02578 docker inspect -f '{{ .Config.Hostname }}' 690a57e02578
一、基于新镜像(centos:hadoop)运行启动3个容器
docker run -d -p 10012:22 --name slave1 centos:hadoop /root/run.sh docker run -d -p 10022:22 --name slave2 centos:hadoop /root/run.sh docker run -d -p 10002:22 --name master -h master -P --link slave1:slave1 --link slave2:slave2 centos:hadoop /root/run.sh
说明:-p参数指定容器22端口分别映射到宿主机端口,本地可经过ssh访问宿主机10002/10012/10022端口链接到3个容器中
二、启动hadoop
2.1 连入master容器
docker exec -it 175c3129e021 /bin/bash
2.2 格式化namenode
hdfs namenode -format
显示以下信息,表示格式化成功
16/07/09 08:12:36 INFO common.Storage: Storage directory /usr/local/hadoop/hadoop-2.7.2/namenode has been successfully formatted.
16/07/09 08:12:36 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
16/07/09 08:12:36 INFO util.ExitUtil: Exiting with status 0
2.3 启动hadoop
因已配置好环境变量,进入容器后,可直接运行
start-all.sh
使用jps查看进程
# jps 163 NameNode 675 NodeManager 1316 Jps 581 ResourceManager 279 DataNode 429 SecondaryNameNode
6、宿主机配置iptables实现端口转发
转发方向:容器端口50070 <---> 宿主机50070
在宿主机执行
iptables -t nat -A PREROUTING -d 192.168.128.130 -p tcp --dport 50070 -j DNAT --to-destination 172.17.0.4:50070
说明:192.168.128.130 为宿主机,172.17.0.4为master容器
至此,本地便可访问虚拟机(或说宿主机)上容器中的hadoop集群
参考并修正:https://www.gaoyuexiang.cn/archives/389 下一步:理清docker网络