windows10下docker的hadoop集群安装与配置

Docker 17 中文开发手册

在Docker上安装Ubuntu系统

直接从Docker上下载Ubuntu系统

docker pull ubuntu

docker pull命令表示从docker hub上拉取Ubuntu镜像到本地,可以用下面命令查看是否安装成功。

docker images

在本地windows10中创建一个build目录,用于和docker系统共享文件。
在这里插入图片描述

运行ubuntu系统:

docker run -it -v F:\VirtualMachine\build:/root/build --name ubuntu ubuntu

docker run 表示运行一个镜像。
-i 表示开启交互式;-t 表示分配一个tty(可以理解为一个控制台);因此,-it可以理解为在当前终端上与Docker内部的Ubuntu系统进行交互。
-v 表示Docker内部的Ubuntu系统中的/root/build目录与本地的F:\VirtualMachine\build目录共享,这样就可以很方便地将文件上传到Docker内部的Ubuntu系统中。
-name 表示ubuntu表示Ubuntu镜像启动名称,如果没有指定,那么Docker将会随机分配一个名字。
-ubuntu 命令中的最后一个ubuntu,表示docker run启动的镜像文件。

在这里插入图片描述
在这里插入图片描述

Ubuntu系统初始化

1)更新系统软件源

apt-get update

2)安装vim编辑器

apt-get install vim

3)安装和配置sshd

apt-get install ssh

开启sshd服务器

/etc/init.d/ssh start

把启动命令写进~/.bashrc文件,每次登录Ubuntu系统时,都能自动启动sshd服务。
用vim编辑器打开~/.bashrc文件,在该文件最后一行添加如下内容:

/etc/init.d/ssh start

安装sshd之后,需要配置SSH无密码连接本地sshd服务,在Docker上的Ubuntu系统中执行如下命令:

ssh-keygen -t rsa #一直按Enter键即可
cd ~/.ssh
cat id_dsa.pub >> authorized_keys

如果找不到.ssh或者cat: id_dsa.pub: No such file or directory 点击这里ssh错误

安装java

在Docker上的Ubuntu系统中可以输入下面命令来安装jdk(如果出现E: Unable to locate package defaultjdk。一般apt-get出现这种情况,就是没有更新APT库,更新一下就好了。则运行

sudo apt-get update
sudo apt-get upgrade

apt-get install default-jdk

配置java环境变量,打开 ~/.bashrc文件,在最开始位置增加如下内容:

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

执行下面命令使~/.bashrc配置文件生效。

source ~/.bashrc

注意:如果要装oracle java版本,则卸载open-jdk版本即可(命令:sudo apt-get remove openjdk*)
参考的卸载openjdk与安装oraclejdk的文章:https://blog.csdn.net/dengdengma520/article/details/81189318

保存镜像

在Docker内部对容器做的修改,是不会自动保存到镜像中的,就是说,上面对容器进行了大量配置,一旦把容器关闭,然后重新开启容器,之前的设置会全部消失。首先到Docker官网注册账号,然后再本地系统(不是Docker中的系统)Linux系统通过下面命令登录,windows通过Docker Desktop登录

docker login #登录·

登录后,再cmd输入下面命令查看当前运行的容器的信息:

docker ps

在这里插入图片描述
从上面信息可以看出,当前运行的Ubuntu镜像的ID是9b66321b893b。输入下面命令将修改后的容器保存为一个新的镜像,新镜像名称为ubuntu/jdkinstalled。

docker commit 9b66321b893b ubuntu/jdkinstalled

安装hadoop
将hadoop-2.7.1.tar.gz放到F:\VirtualMachine\build。然后在Docker内部系统的/root/build目录下解压:

tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local

这里已经配置好hadoop单机模式了。运行下面命令测试是否安装正确。

cd /usr/local
mv ./hadoop-2.7.1 ./hadoop
cd hadoop
./bin/hadoop version

配置hadoop集群

配置hadoop集群,需要修改/usr/local/hadoop/etc/hadoop目录下的配置文件hadoop_env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml。
首先使用vim编辑器打开hadoop_env.sh文件

cd /usr/local/hadoop
vim etc/hadoop/hadoop-env.sh

打开后,在文件前添加下面内容:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

然后用vim编辑器修改core-site.xml文件

<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
</configuration>

然后用vim编辑器修改hdfs-site.xml文件

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/namenode_dir</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/datanode_dir</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
</configuration>

然后用vim编辑器修改mapred-site.xml文件

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

最后用vim编辑器修改yarn-site.xml文件

<configuration>

<!-- Site specific YARN configuration properties -->

        <property>
                 <name>yarn.nodemanager.aux-services</name>
                 <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
</configuration>

最后保存这个镜像

C:\Users\xixi>docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS               NAMES
5a9d331672b4        ubuntu/jdkinstalled   "/bin/bash"         36 seconds ago      Up 33 seconds                           ubuntu-jdkinstalled
9b66321b893b        ubuntu                "/bin/bash"         2 hours ago         Up 2 hours                              ubuntu

C:\Users\xixi>docker commit 5a9d331672b4 ubuntu/hadoopinstalled
sha256:3a9eab1bb8df5573195d48e6a4d080d64e6498a051fe51e906b6e9f1f691e19a

C:\Users\xixi>docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
ubuntu/hadoopinstalled   latest              3a9eab1bb8df        9 seconds ago       1.08GB
ubuntu/jdkinstalled      latest              80e7c7e5d482        3 hours ago         750MB
ubuntu                   latest              549b9b86cb8d        2 days ago          64.2MB
hello-world              latest              fce289e99eb9        11 months ago       1.84kB

接下来,在windows终端中打开3个终端窗口,每个终端分别启动一个容器运行ubuntu/hadoopinstalled镜像,分别表示Hadoop集群中的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

配置Master、Slave01和Slave02的地址信息,分别打开/etc/hosts文件,可以查看本机的IP和主机名信息,最后hosts都应该是

172.17.0.4      slave02
172.17.0.3      slave01
172.17.0.2      master

然后测试下Master是否可以成功连上Slave01和Slave02:

ssh slave01
ssh slave02

最后还需要打开Master节点上的slaves文件,输入两个Slave节点的主机名,在Master节点输入下面命令:

cd /usr/local/hadoop
vim etc/hadoop/slaves

使用vim编辑器打开slaves文件,将localhost替换成两个节点的主机名:

Slave01
Slave02

至此,Hadoop集群已经配置完成,现在可以启动集群,在Master节点的终端中执行下面命令:

cd /usr/local/hadoop
bin/hdfs namenode -format
sbin/start-all.sh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

运行实例

在HDFS上创建一个目录,在Master节点的终端执行下面命令:

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop/input

然后将/usr/local/hadoop/etc/hadoop/目录下的所有文件复制到HDFS中

./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input

然后通过下面命令查看是否正确将文件上传到HDFS,需要在Master节点的终端中继续执行如下命令:

./bin/hdfs dfs -ls /user/hadoop/input

最后执行实例程序:

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input output 'dfs[a-z.]+'

等程序结束后,就可以在HDFS上的output目录查看运行结果,在Master终端执行下面命令:

./bin/hdfs dfs -cat output/*

运行结果如下:

1       dfsadmin
1       dfs.replication
1       dfs.namenode.name.dir
1       dfs.datanode.data.dir

最后,若要在windows10访问http://localhost:9000/,则要设置通过独立IP访问docker for windows 容器内网

参考书籍:《大数据》林子雨编著

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值