【Hadoop专场】Docker + Hadoop的安装过程以及在Windows下安装Hadoop,在eclipse上debug

        最近正在上Hadoop的课程,需要做一个project验收。老师的要求是搭建一个Hadoop集群,1个namenode和2个datanode,老师交代只用自己的笔记本跑就可以,搭三个虚拟机运行下就好,然鹅,我的笔记本是lowlow的i3,内存也只有4GB(扎心),平时跑一个虚拟机都算勉强,再跑一个都够呛,此时,我灵光一闪,用docker试试吧,然后上网了解了下用docker跑Hadoop的可能性,结果受到了万分打击,网友们纷纷建议hadoop最好不要在docker上跑,以及4G内存没资格跑hadoop等等。但是我要完成我的project,只能硬着头皮装docker+hadoop,当然,我选择在服务器上装,实在是4G真心不经跑。

      系统搭建:docker + hadoop2.7.3+jdk1.8.1。服务器:centos6.5(版本很老,但是boss不让升级)      基本过程是按照博客:https://blog.csdn.net/liuyunshengsir/article/details/79128948https://blog.csdn.net/xu470438000/article/details/50512442综合而成。其实两篇博文描述的过程都一样,但是博文二在三个节点通信的时候采用的是pipework来桥接。但是我试了很久,总是失败的。所以我采用了博文一。

1.安装docker

yum search docker
yum install docker-io  

2.检测docker是否可以运行

# 启动docker指令
service docker start 
# 停止docker指令
servicce docker stop

 如果出现以下的提示就说明docker安装成功了 

 如果出现了错误,使用 docker -d 等待一段时间再重新启动。

 3.构建镜像文件

(1)第一个镜像:cento-ssh-root镜像

mkdir centos-ssh-root # 创建一个目录
cd centos-ssh-root 
vi Dockerfile

然后把以下的内容copy到Dockerfile中,注意:该镜像的root用户密码为root,可以自己修改下面的文件重新设置密码。

用到的包:which ,wget  到http://mirror.centos.org/centos-7/7/os/x86_64/Packages/处下载。

# 选择一个已有的os镜像作为基础  
FROM centos 
   
# 镜像的作者  
MAINTAINER ge 
   
# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no  
RUN yum install -y openssh-server sudo  
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config  
#安装openssh-clients
RUN yum  install -y openssh-clients
   
# 添加测试用户root,密码root,并且将此用户添加到sudoers里  
RUN echo "root:root" | chpasswd  
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers  
# 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录  
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key  
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key  
   
# 启动sshd服务并且暴露22端口 
RUN mkdir /var/run/sshd  
# 预装一些命令后面需要使用,也可以不安装,到后面再安装
ADD which-2.20-7.el7.x86-64.rpm /usr/local/
RUN rpm -i /usr/local/which-2.20-7.el7.x86-64.rpm
RUN rom -qa
EXPOSE 22  
CMD ["/usr/sbin/sshd", "-D"]

  构建以下命令构建镜像(注意最后有个句点表示当前目录)

docker build -t="ge/centos-ssh-root" .

 

(2)第二个镜像 :centos-ssh-root-jdk

mkdir centos-ssh-root-jdk # 创建一个目录
cd centos-ssh-root-jdk 
vi Dockerfile
cp jdk包的地址 .   # 把jdk1.8拷贝到当前目录下

   然后把以下的内容copy到Dockerfile中

   用到的包:jdk1.8,网上可以找到资源。

FROM ge/centos-ssh-root # 依赖的上一个镜像名称
ADD jdk-8u162-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_162 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

  构建以下命令构建镜像(注意最后有个句点表示当前目录)

docker build -t="ge/centos-ssh-root-jdk" .

(3)第三个镜像

mkdir centos-ssh-root-jdk-hadoop
cd centos-ssh-root-jdk-hadoop
cp hadoop安装包的地址 . # 把hadoop拷贝到当前目录下
Vi Dockerfile   

    然后把以下的内容copy到Dockerfile中

    用到的包:hadoop-2.7.3,网上可以找到资源。

FROM ge/centos-ssh-root-jdk
ADD hadoop-2.7.3.tar.gz /usr/local/
RUN mv /usr/local/hadoop-2.7.3 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH

  构建以下命令构建镜像(注意最后有个句点表示当前目录)

docker build -t="ge/centos-ssh-root-jdk-hadoop" .

4.搭建hadoop集群 

(1)启动三个容器,分别是hadoop0(主),hadoop1,hadoop2(从)

         执行以下命令,注意directory1和directory2是自己设置的,可以看下面的解释

docker run --name hadoop0 -v directory1:directory2 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 ge/centos-ssh-root-jdk-hadoop

docker run --name hadoop1 -v directory1:directory2 --hostname hadoop1 -d -P ge/centos-ssh-root-jdk-hadoop

docker run --name hadoop2 -v directory1:directory2 --hostname hadoop2 -d -P ge/centos-ssh-root-jdk-hadoop

这样就启动了三个容器,用下述命令可以查看容器运行状态

docker ps

(2) 使用下面的指令查看三个节点的IP。然后在每个节点的/etc/hosts中配置起来。

 docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)

(3)接下来就是正常的hadoop的配置操作,这里就不再赘述,有时间回来再补上

【注】由于docker是为容器分配临时IP,当docker重新启动时,每个容器的IP就改变了,所以/etc/hosts要重新配置。如果想避免这一麻烦,可以使用pipework来固定IP。

因为是在docker上运行,之前不常用docker,所以docker的指令很陌生,在这里记录一些些。 

# 创建并运行一个容器
docker run -it  -v directory1:directory2 containername /bin/bash
# 解释:imagename:容器名称。
#如果不需要与主机进行文件共享的话,可以不加-v directory1:directory2。但是由于我是在服务器上搭建的,如果不共享目录,着实难受(但是之前的两篇博文没有这个,所以我没有创建共享目录,之后采用很麻烦的方法来进行文件传输)。
#解释下directory1是表示主机上的文件地址的绝对路径,而directory2则是容器的文件地址的绝对路径。
#这样directory1和directory2便连在一起啦(也就是文件挂载)

# 查看容器的运行状态
docker ps -a
# 可以看看每个容器status,就知道每个容器的运行状态。

#开启容器
docker start containername

#关闭容器
docker stop containername

#进入容器
docker exec -it containername /bin/bash

#退出容器但是不关闭容器
ctrl+P+Q

#主机和docker容器间的文件传输
主机->docker容器
docker cp file_path containername:container_file_path
docker容器->主机
docker cp containername:container_file_path file_path

5.eclipse上debug hadoop程序

参考如下博文:https://blog.csdn.net/wudichengyaojin/article/details/64440655

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值