0


使用docker进行部署hadoop

使用docker进行部署hadoop

安装docker

wget -qO- https://get.docker.com/ |sh

安装完成后,要启动docker服务

sudoservicedocker start

查看是否运行成功

ps -aux |grepdocker

也可以看看docker里面有什么

sudodockerps

预处理,为安装hadoop做必要准备

DNS解析

域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此要想达到访问效果,就需要将域名翻译成IP地址。而DNS域名解析承担的就是这种翻译效果。[1]

sudodocker network create --driver=bridge hadoop

以上命令创建了一个名为 Hadoop 的虚拟桥接网络,该虚拟网络内部提供了自动的DNS解析服务。

桥接:就是把一台机器上的若干个网络接口连接起来,其结果是其中一个网卡收到的报文会被复制给其他网卡发送出去。以使得网口之间的报文能够互相转发

查看docker中的网络

sudodocker network ls

下载ubuntu镜像

sudodocker pull ubuntu:16.04
#这里指定了版本为16.04,默认为最新版
#常用的docker命令#查看已经下载的镜像sudodocker image ls#启动dockersudodocker run -it ubuntu:16.04 /bin/bash

#推出容器exit#启动一个状态是退出的容器sudodocker start ID

#关闭一个容器sudodocker stop ID

安装JAVA 和 Scala

注:java要安装1.8版本

在这里最好先安装vim,

aptinstallvim
  • 修改image中apt的源
#备份源cp /etc/apt/sources.list /etc/apt/sources_init.list

#删除源rm /etc/apt/sources.list
#阿里源,将下面内容写进sources.list中,并且使用apt update 更新
deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main

deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main

deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe

deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
  • 安装JDK
aptinstall openjdk-8-jdk
#亲测需要五分钟左右,也可能是我的网慢
  • 查看结果
java -version
  • 安装scalaaptinstall scala注:这里如果出现docker网络不能用,就重启一下试试,重启docker,夜俱麼侄般瑟怯蘇冥呼瑟罰悉闍缽者缽迦麼諳室能寫切跋都舍侄曰缽爍皤諸夜罰竟侄咒皤心他依諳栗呐僧冥豆提

安装hadoop

  • 安装一个网络工具
aptinstall net-tools
  • 安装 SSH,并配置免密登录,由于后面的容器之间是由一个镜像启动的,就像同一个磨具出来的 5 把锁与钥匙,可以互相开锁。所以在当前容器里配置 SSH 自身免密登录就 OK 了。
#安装sshapt-getinstall openssh-server

#安装ssh客户端apt-getinstall openssh-client

#在用户根目录下生成密钥,一路enter就可
ssh-keygen -t rsa -P ""#将公钥追加到 authorized_keys 文件中cat .ssh/id_rsa.pub >> .ssh/authorized_keys

#启动sshservicessh start

#试试自己登陆自己ssh127.0.0.1

#修改 .bashrc 文件,启动 shell 的时候,自动启动 SSH 服务,在最后一行加上servicessh start
  • 下载hadoop
#下载好hadoopdockercp 本地文件路径 ID全称:容器路径
#就可#解压tar -zxvf hadoop-3.2.0.tar.gz -C /usr/local/

cd /usr/local/
mv hadoop-3.2.0 hadoop  
  • 修改 /etc/profile 文件,添加一下环境变量到文件中
#javaexportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
exportJRE_HOME=${JAVA_HOME}/jre    
exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
exportPATH=${JAVA_HOME}/bin:$PATH#hadoopexportHADOOP_HOME=/usr/local/hadoop
exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
exportHADOOP_COMMON_HOME=$HADOOP_HOMEexportHADOOP_HDFS_HOME=$HADOOP_HOMEexportHADOOP_MAPRED_HOME=$HADOOP_HOMEexportHADOOP_YARN_HOME=$HADOOP_HOMEexportHADOOP_INSTALL=$HADOOP_HOMEexportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
exportHADOOP_CONF_DIR=$HADOOP_HOMEexportHADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec 
exportJAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATHexportHADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
exportHDFS_DATANODE_USER=root
exportHDFS_DATANODE_SECURE_USER=root
exportHDFS_SECONDARYNAMENODE_USER=root
exportHDFS_NAMENODE_USER=root
exportYARN_RESOURCEMANAGER_USER=root
exportYARN_NODEMANAGER_USER=root
#使环境变量生效source /etc/profile
  • 在目录 /usr/local/hadoop/etc/hadoop
#修改 hadoop-env.sh 文件,在文件末尾添加一下信息exportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
exportHDFS_NAMENODE_USER=root
exportHDFS_DATANODE_USER=root
exportHDFS_SECONDARYNAMENODE_USER=root
exportYARN_RESOURCEMANAGER_USER=root
exportYARN_NODEMANAGER_USER=root

修改 core-site.xml,修改为

<configuration><property><name>fs.default.name</name><value>hdfs://h01:9000</value></property><property><name>hadoop.tmp.dir</name><value>/home/hadoop3/hadoop/tmp</value></property></configuration>

修改 hdfs-site.xml,修改为

<configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.name.dir</name><value>/home/hadoop3/hadoop/hdfs/name</value></property><property><name>dfs.namenode.data.dir</name><value>/home/hadoop3/hadoop/hdfs/data</value></property></configuration>

修改 mapred-site.xml,修改为

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.application.classpath</name><value>
            /usr/local/hadoop/etc/hadoop,
            /usr/local/hadoop/share/hadoop/common/*,
            /usr/local/hadoop/share/hadoop/common/lib/*,
            /usr/local/hadoop/share/hadoop/hdfs/*,
            /usr/local/hadoop/share/hadoop/hdfs/lib/*,
            /usr/local/hadoop/share/hadoop/mapreduce/*,
            /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
            /usr/local/hadoop/share/hadoop/yarn/*,
            /usr/local/hadoop/share/hadoop/yarn/lib/*
        </value></property></configuration>

修改 yarn-site.xml,修改为

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

修改 workers为

h01
h02
h03
h04
h05

此时,hadoop已经配置好了

测试

先将当前容器导出为镜像,并查看当前镜像

sudodocker commit -m "haddop" -a "hadoop" ID newuhadoop

启动 5 个终端,分别执行这几个命令

第一条命令启动的是

h01

是做 master 节点的,所以暴露了端口,以供访问 web 页面

sudodocker run -it --network hadoop -h "h01" --name "h01" -p 9870:9870 -p 8088:8088 newuhadoop /bin/bash

其余的四条命令就是几乎一样的了

sudodocker run -it --network hadoop -h "h02" --name "h02" newuhadoop /bin/bash

sudodocker run -it --network hadoop -h "h03" --name "h03" newuhadoop /bin/bash

sudodocker run -it --network hadoop -h "h04" --name "h04" newuhadoop /bin/bash

sudodocker run -it --network hadoop -h "h05" --name "h05" newuhadoop /bin/bash

接下来,在

h01

主机中,启动 Haddop 集群

先进行格式化操作

root@h01:/usr/local/hadoop/bin# ./hadoop namenode -format

进入 hadoop 的 sbin 目录

root@h01:/# cd /usr/local/hadoop/sbin/
root@h01:/usr/local/hadoop/sbin#

启动

root@h01:/usr/local/hadoop/sbin# ./start-all.sh 

访问本机的 8088 与 9870 端口就可以看到监控信息了

Hadoop 集群已经构建好了

2.2.5 运行内置WordCount例子

把license作为需要统计的文件

把license作为需要统计的文件

root@h01:/usr/local/hadoop# cat LICENSE.txt > file1.txt
root@h01:/usr/local/hadoop# ls

在 HDFS 中创建 input 文件夹

root@h01:/usr/local/hadoop/bin# ./hadoop fs -mkdir /input
root@h01:/usr/local/hadoop/bin#

上传 file1.txt 文件到 HDFS 中

root@h01:/usr/local/hadoop/bin# ./hadoop fs -put ../file1.txt /input
root@h01:/usr/local/hadoop/bin#

查看 HDFS 中 input 文件夹里的内容

root@h01:/usr/local/hadoop/bin# ./hadoop fs -ls /input
Found 1 items
-rw-r--r--   2 root supergroup     150569 2019-03-19 11:13 /input/file1.txt
root@h01:/usr/local/hadoop/bin#

运作 wordcount 例子程序

root@h01:/usr/local/hadoop/bin# ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /input /output

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RgdsF94Z-1666679275670)(/home/ai/.config/Typora/typora-user-images/image-20221025140731183.png)]

参考文章:

[1] :http://t.csdn.cn/hbM3o

标签: docker hadoop 容器

本文转载自: https://blog.csdn.net/junsuyiji/article/details/127512783
版权归原作者 君苏 所有, 如有侵权,请联系我们删除。

“使用docker进行部署hadoop”的评论:

还没有评论