基于Docker的Hadoop集群的搭建和使用

一、安装Docker

安装Docker——点击这里

二、在docker中安装ubuntu系统

首先从docker hub上面拉取一个ubuntu镜像

$ docker pull ubuntu:latest

验证是否安装成功

$ docker images

安装成功如下图:

基于Docker的Hadoop集群的搭建和使用_第1张图片

在启动镜像时,需要一个文件夹向镜像内部进行文件传输,所以在家目录下面新建一个文件用于文件传输

$ mkdir docker-ubuntu

然后在docker上运行ubuntu

$ docker run -it -v ~/docker-ubuntu:/root/docker-ubuntu --name ubuntu ubuntu

三、ubuntu系统初始化

由于刚刚安装好之后的系统是纯净系统,很多软件都没有装,所以需要刷新一下软件源以及安装一些必要的软件。

(一)刷新源

由于在docker 上面运行的Ubuntu默认登录的为root用户,所以运行命令不需要sudo

root@11e9379d2a29:/# apt update

(二)安装一些必要的软件

1、安装vim

终端中用到的文本编辑器有vim、emacs、nano等,上课老师都让用vim,这里也安装vim

root@11e9379d2a29:/# apt install vim

2、安装sshd

由于分布式需要用ssh连接到docker内的镜像

root@11e9379d2a29:/# apt install ssh

然后在~/.bashrc内加入/etc/init.d/ssh start,保证每次启动镜像时都会自动启动ssh服务,也可以使用service或者systemctl设置ssh服务自动启动

然后就是配置ssh免密登录

root@11e9379d2a29:~# ssh-keygen -t rsa #一直按回车键即可
root@11e9379d2a29:~/.ssh# cat id_rsa.pub >> authorized_keys

3、安装jdk

由于Hadoop需要Java,因此还需要安装jdk,由于默认的jdk为Java10,所以需要改成java8

root@11e9379d2a29:~# apt install openjdk-8-jdk

接下来设置JAVA_HOME于PATH变量,只需要在~/.bashrc最后加入

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin

然后使~/.bashrc生效

root@11e9379d2a29:~# source ~/.bashrc

(三)保存镜像文件

由于容器内的修改不会自动保存,所以需要对容器进行一个保存。使用docker ps -a 查看容器id并使用docker commit 保存镜像。在此之前先退出容器,再查看容器id

root@11e9379d2a29:~# exit
exit
root@cecilia-virtual-machine:~/# docker ps -a

保存镜像

docker commit b59d716dbb4d ubuntu/jdkinstalled

四、安装Hadoop

首先利用刚刚保存的镜像启动已安装JAVA的容器

$docker run -it -v ~/docker-ubuntu:/root/docker-ubuntu --name ubuntu-jdkinstalled ubuntu/jdkinstalled

下载Hadoop文件

wget http://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz

开启之后把下载的Hadoop文件放到新建的文件夹内,再解压

root@bd62eafa76b3:/# cp /hadoop-2.9.2.tar.gz /root/docker-ubuntu
root@bd62eafa76b3:/# cd /root/docker-ubuntu
root@bd62eafa76b3:/# tar -zxvf hadoop-2.9.2.tar.gz -C /usr/local

测试Hadoop是否安装成功,是否输出对应的Hadoop版本号

root@bd62eafa76b3:/# cd /usr/local/hadoop-2.9.2/
root@bd62eafa76b3:/usr/local/hadoop-2.9.2# ./bin/hadoop version

五、配置Hadoop集群

首先需要修改hadoop-env.sh中的JAVA_HOME

root@bd62eafa76b3:/usr/local/hadoop-2.9.2# vim etc/hadoop/hadoop-env.sh 
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

接下来修改core-site.xml

root@bd62eafa76b3:/usr/local/hadoop-2.9.2# vim etc/hadoop/core-site.xml

      
          hadoop.tmp.dir
          file:/usr/local/hadoop-2.9.2/tmp
          Abase for other temporary directories.
      
      
          fs.defaultFS
          hdfs://master:9000
      

然后修改hdfs-site.xml

root@bd62eafa76b3:/usr/local/hadoop-2.9.2# vim etc/hadoop/hdfs-site.xml

    
        dfs.namenode.name.dir
        file:/usr/local/hadoop-2.9.2/namenode_dir
    
    
        dfs.datanode.data.dir
        file:/usr/local/hadoop-2.9.2/datanode_dir
    
    
        dfs.replication
        3
    

然后将mapred-site.xml.template复制为mapred.xml,然后进行修改

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml 

    
        mapreduce.framework.name
        yarn
    

最后修改yarn-site.xml

vim etc/hadoop/yarn-site.xml

  
      
          yarn.nodemanager.aux-services
          mapreduce_shuffle
      
      
          yarn.resourcemanager.hostname
          master
      

现在集群配置的已经差不多了,将现有的镜像保存一下

root@cecilia-virtual-machine:~# docker commit 2ecf3c0dba0e ubuntu/hadoopinstalled

然后在三个终端上面开启三个容器镜像,分别代表集群中的master、slave01、slave02

# 第一个终端

$ docker run -it -h master --name master ubuntu/hadoopinstalled

#第二个终端

$ docker run -it -h slave01 --name slave01 ubuntu/hadoopinstalled

#第三个终端

$ docker run -it -h slave02 --name slave02 ubuntu/hadoopinstalled

然后分别查看他们的/etc/hosts文件,查看名字和ip

基于Docker的Hadoop集群的搭建和使用_第2张图片

最后把上述三个地址信息分别复制到master,slave01和slave02的/etc/hosts即可,可以用如下命令来分别检查是否master是否可以连上slave01和slave02

基于Docker的Hadoop集群的搭建和使用_第3张图片

接下来是配置集群的最后一步,打开master上面的slaves文件,输入slave0和slave02

root@master:/usr/local/hadoop-2.9.2# vim etc/hadoop/slaves
slave01
slave02

这样集群就配置完成了,接下来是启动

在master上面,进入/usr/local/hadoop-2.9.2,然后运行如下命令

root@master:/usr/local/hadoop-2.9.2# bin/hdfs namenode -format
root@master:/usr/local/hadoop-2.9.2# sbin/start-all.sh

这个时候集群已经启动了,然后在master,slave01和slave02上分别运行命令jps查看运行结果

root@master:/usr/local/hadoop-2.9.2# bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input output 'dfs[a-z.]+' 

等这个程序运行结束之后,就可以在hdfs上的output目录下查看到运行结果:

root@master:/usr/local/hadoop-2.9.2#  bin/hdfs dfs -cat output/*

 

 

你可能感兴趣的:(基于Docker的Hadoop集群的搭建和使用)