使用docker搭建本地hadoop集群(代码片段)

dashjunih dashjunih     2022-12-18     396

关键词:

终于开始学习hadoop了,虽然是学校开课了才开始跟着学校的课程学,至少也是开始了。
首先要做的就是搭建好一个hadoop的环境,需要三台主机,配置一个master两个slave的架构。
老师让我们用vbox来做,但是个人觉得虚拟机太慢了,而且还要开三个,太亏。刚好最近开始接触docker,准备就在docker的环境下搭建hadoop环境。

安装docker

可以考虑使用国内的加速镜像 daocloud.io 注册后可以看到如何使用

由于我已经通过官网的方法安装了,这里就只记录下我的操作:

 curl -fsSL https://get.docker.com/ | sh

这个过程会很漫长,谁让我作死去官网下呢 (-_-)
脚本执行完后就能发现docker已经安装好了,而且还添加了一个用户组docker,可以把自己常用的用户加入到这个组,方便使用。
可以使用docker version查看一下版本

$ docker version
Client:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Tue Apr 26 23:43:49 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Tue Apr 26 23:43:49 2016
 OS/Arch:      linux/amd64

拉取镜像

dockergit的命令有些相像,可以使用pull命令拉取远程仓库,不过git拉取的往往是代码,而docker拉取的是镜像

daocloud拉取镜像

docker pull daocloud.io/library/centos:centos7

daocloud.io/library/centos表示镜像的名字
centos7表示镜像的版本,默认是latest,表示最新版

启动镜像

我们可以使用docker images命令查看本地镜像列表,选择启动哪一个镜像

$ docker images
REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE
daocloud.io/library/centos                   centos7             96eecaf1019a        6 days ago          196.7 MB
daocloud.io/library/centos                   latest              96eecaf1019a        6 days ago          196.7 MB
44mfwmrx.mirror.aliyuncs.com/library/redis   latest              ad6e7427198c        2 weeks ago         184.9 MB
daocloud.io/library/ubuntu                   latest              c5f1cf30c96b        2 weeks ago         120.8 MB
hello-world                                  latest              94df4f0ce8a4        3 weeks ago         967 B
daocloud.io/library/ubuntu                   trusty-20160424     8fa7f61732d6        4 weeks ago         188 MB
daocloud.io/daocloud/daocloud-toolset        latest              1ab33797d8a1        4 weeks ago         150.2 MB

$ docker run -h master --dns=61.139.2.69 -it daocloud.io/library/centos:centos7

这个命令启动一个容器,参数解释如下

参数名参数值参数含义
-h master 指定hostname
--dns 61.139.2.69 指定DNS,默认的是8.8.8.8,国内环境...
-it   以交互模式启动

具体的含义可以使用docker run --help查看,这里就不赘述了。

安装需要的软件

安装wget

 很多初学者,对大数据的概念都是模糊不清的,大数据是什么,能做什么,学的时候,该按照什么线路去学习,学完往哪方面发展,想深入了解,想学习的同学欢迎加入大数据学习扣君:四一零加上三九一连起来七四四,有大量干货(零基础以及进阶的经典实战)分享给大家,并且有清华大学毕业的资深大数据讲师给大家免费授课
$ sudo yum install -y wget vim openssh-server openssh-clients net-tools

拉取到本地的镜像是尽可能小的,所以很多命令都没有安装:

  • openssh-server : 安装sshd服务
  • openssh-clients : 安装ssh命令
  • net-tools : 安装netstatifconfig等命令

但是安装完后并不会启动sshd服务,容器是被docker管理的,无法使用一些系统命令,要启动sshd需要执行如下命令

后台启动sshd服务,之后就可以使用ssh命令登录容器了。

因为sshhadoop必需的服务,所以我们要在容器启动是就开启,所以把这条命令写到一个脚本里

$ vim /root/run.sh
$ chmod 750 /root/run.sh
$ cat /root/run.sh
!/bin/bash
/usr/sbin/sshd -D

这里不让其后台运行是为了保证容器不退出,只要容器在后台运行,我们就可以在宿主机上连接容器。

网络配置

本来是要开始下载jdk的,但是发现不能上网,测试了一下发现是dns的问题。
不怕折腾的我怎么能够忍受每启动一个容器都要带上--dns参数呢,一定可以改的。
结果是折腾了半天(真的是半天啊),找到了下面的解决方案。

修改默认dns

...
DOCKER_NETWORK_OPTIONS="--dns=61.139.2.69"
...
  • 修改/lib/systemd/system/docker.service
...
[Service]
EnviornmentFile=-/etc/default/docker
ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS           $DOCKER_NETWORK_OPTIONS
...

这里的设置是按照官网的说明来配置的,百度到的东西都不能使参数生效,不知道为什么

然后重启docker

systemctl daemon-reload
systemctl restart docker.service
#使用这个命令可以查看 docker 的启动命令是否生效
$ ps -ef | grep docker
root     ***     1  0 5月25 ?       00:02:23 /usr/bin/docker daemon -H fd:// --dns=61.139.2.69 --registry-mirror=***

安装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
sudo mkdir /usr/java
sudo tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/java
sudo echo "export JAVA_HOME=/usr/java/jdk1.8.0_91" >> /etc/bashrc
sudo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/bashrc
sudo echo "export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar" >> /etc/bashrc
source /etc/bashrc

安装Hadoop

下载与环境变量

wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
sudo mkdir /usr/local/hadoop
sudo tar zxf hadoop-2.7.2.tar.gz -C /usr/local/hadoop
sudo echo "export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.2" >> /etc/bashrc
sudo echo "export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop" >> /etc/bashrc
sudo echo "export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin" >> /etc/bashrc
source /etc/bashrc

配置

对于hadoop,我还是个初学者,下面的配置是在网上借鉴的别人的文章

  • 首先在HADOOP_HOME目录下创建如下目录

    • tmp:临时目录
    • namenode:NameNode 存放目录
    • datanode:DataNode 存放目录
  • 切换到HADOOP_CONFIG_HOME目录

cp mapred-site.xml.template mapred-site.xml

  
    hadoop.tmp.dir
    /usr/local/hadoop/hadoop-2.7.2/tmp
    A base for other temporary dirctories.
  

  
    fs.default.name
    hdfs://master:9000
    true
    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.
  

这里指定了缓存目录$HADOOP_HOME/tmp和默认文件系统


  
    dfs.replication
    2
    true
    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.
    
  

  
    dfs.namenode.name.dir
    /usr/local/hadoop/hadoop-2.7.2/namenode
    true
  

  
    dfs.datenode.data.dir
    /usr/local/hadoop/hadoop-2.7.2/datanode
    true
  

这里指定了备份的数目、namenodedatanode的目录


  
    maperd.job.tracker
    master:9001
    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
  

这里指定了MapReduce作业调度程序的工作主机和端口。

配置免密码登录

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
cd ~/.ssh
#获取宿主机的公钥,方便宿主机登录
scp [email protected]:~/.ssh/id_rsa.pub authorized_keys
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys

还有一个细节,因为后面运行时,如果每次都从镜像启动,那都是全新的环境,使用ssh登录时是需要确认的。
为了避免不必要的麻烦,特意查了资料,找到解决办法。
想要达到连接新主机时不用确认的效果,就需要修改客户端的ssh配置的StrictHostKeyChecking。该参数默认为ask,修改为no

Host *
  StrictHostKeyChecking no

Docker配置

保存Container

docker commit -m "hadoop installed"  centos:hadoop

#启动 Hadoop

一开始没有理清hadoop的网络模型,以为需要每个节点都需要知道其他所有节点的地址,一直在配置固定IP
但认真想一下,hadoop并没有这样的需求,它只需要master知道其他节点在哪里就行了,slave之间根本不需要通信。

 

事实证明上面这段理解是错误的,slave需要知道master在哪里,才能向master发送心跳和数据块,否则master上的namenode将找不到datanode

因为对docker的网络配置不熟悉,所以我采用了一个简单的办法,修改/root/run.sh

#!/bin/bash
echo "172.17.0.4    master" >> /etc/network
/usr/sbin/sshd -D

因为节点只有3个,我也只开这三个容器,master又是最后启动的,所有master的地址就是172.17.0.4

技术图片

所以上面创建的镜像已经可以使用了。

启动容器

$ docker run -d --name slave1 centos:hadoop /root/run.sh
$ docker run -d --name slave2 centos:hadoop /root/run.sh
$ docker run -d --name master -h master -P --link slave1:slave1 --link slave2:slave2 centos:hadoop /root/run.sh

我将以上三个命令写到了一个启动脚本里,直接就可以启动了,然后在用ssh登录到master上启动hadoop
因为使用的是docker的默认网络,所有可以算出masterIP地址,当然,也可以通过docker netword inspect bridge命令去获取

启动 Hadoop

切换到$HADOOP_HOME目录,首先格式化namenode:

./bin/hadoop namenode -format

看到如下信息,说明格式化成功了。
技术图片
然后就可以启动Hadoop

$ ./sbin/start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [master]
master: Warning: Permanently added ‘master,172.17.0.4‘ (RSA) to the list of known hosts.
master: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.2/logs/hadoop-root-namenode-master.out
localhost: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.2/logs/hadoop-root-datanode-master.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: Warning: Permanently added ‘0.0.0.0‘ (RSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.2/logs/hadoop-root-secondarynamenode-master.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.7.2/logs/yarn-root-resourcemanager-master.out
localhost: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.2/logs/yarn-root-nodemanager-master.out
#使用 jps 查看进程
$ jps
480 SecondaryNameNode
640 ResourceManager
737 NodeManager
290 DataNode
195 NameNode
1192 Jps

我的配置到这里就完成了,如果有错误,欢迎指正??

docker中hadoop集群搭建(代码片段)

使用腾讯云主机,docker构建集群测试环境。环境1、操作系统:CentOS7.264位网路设置hostnameIPcluster-master172.18.0.2cluster-slave1172.18.0.3cluster-slave2172.18.0.4cluster-slave3172.18.0.5Docker安装curl-sSLhttps://get.daocloud.io/docker 查看详情

基于docker快速搭建hadoop集群和flink运行环境(代码片段)

...adoop配置Flink打包镜像启动集群前言本文主要讲,基于Docker在本地快速搭建一个Hadoop2.7.2集群和Flink1.11.2运行环境,用于日常Flink任务运行测试。前任栽树,后人乘凉,我们直接用DockerHadoop镜像kiwenlau/hadoop-cluster-docker... 查看详情

dockerxhadoop使用docker搭建hadoop集群(从零开始保姆级)(代码片段)

...启动集群2021-10-6补充(务必看一下)好叭--我承认使用nginx进行代理是疏忽了,到后面使用Java访问集群的时候会出现问题正确的方式应该是通过端口映射 查看详情

使用docker一键搭建hadoop,hbase,hive等大数据集群(代码片段)

注意资源的下载地址:链接:https://pan.baidu.com/s/1jB3j_wKFOXaWOfVR9o9WVg?pwd=f16j提取码:f16j有问题联系我:lizhenchao@atguigu.cn脚本的运行环境:centos7.5+目录说明不要更改docker_bigdata及子目录的目录结构进入到docker_bigdata目录下再执行脚... 查看详情

【大数据】使用docker搭建hadoop集群

参考技术A启动后发现还是无法使用hadoop、hdfs、hive等命令,我们需要安装hadoop和hive这个时候我们进入bin路径下,即可执行./hadoop或者./hdfs等命令,我们接下来将其加入环境遍历以便全局使用这些命令,在~/.bashrc文件后面追加下面... 查看详情

使用docker一键搭建hadoop,hbase,hive等大数据集群(代码片段)

...户设置密码为aaaaaa特别说明容器一旦创建成功之后,以后使用的时候启动即可启动hadoop:hadoop.sh 查看详情

云计算集群搭建记录[hadoop|zookeeper|hbase|spark|docker]更新索引|动态更新(代码片段)

...之后,然后输入想要更改的密码退出登陆之后就可以使用root登录了另外推荐一款终端工具:Tabby,既能够连接自己的服务器,也能够连接自己本地的虚拟机,还能够进行SFTP文件的传输下载链接可以自定义很多... 查看详情

基于docker的hadoop集群搭建(代码片段)

最近想学习如何使用hdfs来存储文件,在网上学习了一下,明确了HDFS(HadoopDistributeFileSystem分布式存储)、mapReduce(分布式计算)、YARN(YetAnotherResourceNegotiator资源管理)是hadoop的三大组成部分,... 查看详情

hadoop+spark+zookeeper+hbase集群搭建(代码片段)

文章目录端口HadoopSparkZookeeperHbase端口端口开放问题关闭防火墙systemctlstopfirewalld,并在服务器开放以下端口:Hadoop使用docker部署hadoop集群-手把手复现vimcore-site.xml<property><name>fs.defaultFS</name><valu 查看详情

docker快速搭建hadoop集群(2023.3.27)(代码片段)

...载概览1.构建java与hadoop的基础镜像新建目录mkdirdocker-hadoop使用rz-E上传jdk1.8的tar.gz压缩包和hadoop3.1.3的压缩包编辑Dockerfile文件,构建一个带ssh、java、hadoop、vim环境的centos镜像FROMcentos:7.5.1804#安装jdk、hadoop到/opt/serviceADDjre-8u361-li... 查看详情

搭建本地测试es集群(代码片段)

需求在本地搭建es+kibana+elasticsearch-head搭建环境mac本地,使用docker+docker-compose方式搭建设置docker内存8G搭建es和es+head#es使用官方镜像7.5.1#es-head已经有人构建好镜像version:'2.2'services:es01:image:docker.elastic.co/elasticsearch/elasticsearch-si... 查看详情

hadoop集群+spark集群搭建基于vmware虚拟机教程+安装运行docker(代码片段)

 Hadoop集群+Spark集群搭建+安装运行Docker目录一、准备工作二、在虚拟机上安装CentOS7三、hdfs的环境准备四、hdfs配置文件的修改五、克隆(复制虚拟机)六、制作免密码登陆七、一行命令启动Hadoop集群八、Spark集群九... 查看详情

hadoop集群+spark集群搭建基于vmware虚拟机教程+安装运行docker(代码片段)

 Hadoop集群+Spark集群搭建+安装运行Docker目录一、准备工作二、在虚拟机上安装CentOS7三、hdfs的环境准备四、hdfs配置文件的修改五、克隆(复制虚拟机)六、制作免密码登陆七、一行命令启动Hadoop集群八、Spark集群九... 查看详情

hadoop集群搭建(一主二从)(代码片段)

...安装五、克隆虚拟机,配置主机,搭建集群六、使用Xshell连接虚拟机七、配置Hadoop八、启动Hadoop集群前言Hadoop集群的 查看详情

大数据实操3-hadoop集群添加新节点(代码片段)

...不需要停止原有集群节点就可以实现新节点的加入。我是使用docker搭建的进群环境,制作了镜像文件,这里以我的工作基础为例子介绍集群中添加集群的方法一、制作一个新节点1、为新节点搭建hadoop环境如果是一般情况下,将... 查看详情

使用docker搭建hadoop集群和sparkonyarn

参考技术A选择uhopper定制的一系列hadoop生态镜像来搭建docker集群,这些镜像具体包括:上述关于端口映射部分,对每个容器端口的说明可参考docker-composeup-d在/etc/hosts下配置上述docker容器中出现的hostname,将这些域名都指向本机(宿... 查看详情

使用kind搭建本地k8s集群(代码片段)

介绍Kind是KubernetesInDocker的缩写,是使用Docker容器部署Kubernetes的工具。也是官方推荐的搭建本地集群的工具。安装Kind$curl-Lo./kindhttps://github.com/kubernetes-sigs/kind/releases/download/v0.5.1/kind-$(uname)-amd64$chmod+x./kind$sudomv./kind/usr/bin/安... 查看详情

hadoop详解——zookeeper详解,zookeeper伪分布搭建和集群搭建,hadoop集群搭建,sqoop工具的使用(代码片段)

ZooKeeper简介什么是ZooKeeper?ZooKeeper是Google的Chubby一个开源的实现,是Hadoop分布式协调服务。它包含了一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命令服务等。它的结构图如下:Zo... 查看详情