如果想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机。但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的。这个时候我们可以使用Docker。Docker可以看做是一种轻量级的虚拟机,占用资源少,用起来和传统的虚拟机很像,使用的时候可以类比VMware或VirtualBox。
本文不能让你精通Docker,但能让你快速上手,并搭建好这个集群,前提是你对Hadoop和Linux有所了解。

〇、准备工作
1.准备Docker宿主机
目前Docker只能运行在内核版本为3.10或以上的64位Linux上。安装Docker的Linux系统称为Docker的宿主机。如果你的系统不符合,可以先安装一台符合要求的虚拟机,然后再在这个虚拟机上使用Docker。我的笔记本是Windows系统,装了一台64位CentOS7.3虚拟机做演示。由于要将10个节点都跑在一台虚拟机上,所以给这台虚拟机分配的资源不能太少,否则会有问题。虽然Docker比虚拟机省了不少资源,但Hadoop需要的资源省不了啊。我给分配了2个核,4G内存,这比用10台虚拟机需要的资源还是小很多的。另外因为只需要一台Linux,所以在笔记本上装双系统也是可以的。

2.准备相关软件
JDK使用jdk-7u80-linux-x64
Hadoop使用hadoop-2.7.3
将JDK和Hadoop提前下载并减压,放到Docker宿主机上备用。

一、安装Docker
现在Docker分为社区版Docker CE和企业版Docker EE。Docker CE免费,Docker EE收费。Docker CE又分为Docker CE Edge和Docker CE Stable。Docker CE Edge每1个月发布一个版本,Docker CE Stable每3个月发布一个版本。Stable表示稳定版,所以下面只介绍Docker CE Stable。

1.安装yum-utils
$ sudo yum install -y yum-utils

2.添加Docker CE的yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.更新yum包索引
$ sudo yum makecache fast

4.安装Docker CE
$ sudo yum install docker-ce
安装过程中如有类似Is this ok [y/N]的提问,都输入y,然后回车即可。直到最后显示“Complete!”表示安装成功!

二、Docker初体验
1.启动Docker
$ sudo systemctl start docker

2.查看Docker版本
$ sudo docker -v
默认安装的是最新版本,我们可以看到当前最新版本是Docker version 17.03.1-ce, build c6d412e。

3.运行hello world示例
$ sudo docker run hello-world
官方给提供了一个hello-world示例,用来测试Docker是否正常工作。第一次运行时,Docker需要从官网下载该示例,不过很小,下载很快。只要能输出下面的英文,就说明hello-world示例运行成功了!

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

4.去掉sudo
对于非root用户,很多Docker命令都必须用sudo才能正常执行。比如不用sudo运行刚才的hello-world示例会出现下面的错误提示:
[chengyujia@localhost ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.27/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

老用sudo挺麻烦的,下面介绍解决的办法。Docker在安装的时候会生成一个叫docker的用户组,只要把你使用的用户加到这个组里就能免sudo了。
下面我们来加入docker组
$ sudo usermod -aG docker chengyujia
然后退出当前shell,重新登录一下,以后就不用sudo了。

三、Docker中的一些概念
1.镜像image和容器container
如果将Docker比作是VMware,镜像可以比作是ISO文件,容器可以比作是安装好的虚拟机。镜像不能直接使用,通过镜像可以创建容器,然后我们使用容器。在使用上,容器和虚拟机很像,我们在容器里可以随便折腾,折腾坏了也没关系,只要相应的镜像在,随时可以创建一个新的容器。而且无论是创建容器还是启动容器都比虚拟机快很多。

2.查看本机上的镜像
$ sudo docker images


先介绍一下相关的词义
REPOSITORY  可以理解为镜像的名称。
TAG      可以理解为镜像的版本。
IMAGE ID    镜像的编号。在创建镜像时自动生成。
CREATED    镜像的创建时间。
SIZE      镜像的大小。
从截图上可以看到,现在只有一个叫hello-world的镜像,就是刚才我们运行hello-world示例自动下载的。默认会下载最新版,也就是TAG为latest的版本,镜像编号为48b5124b2768,创建于4个月前,大小为1.84kB。

3.查看本机上的容器
$ sudo docker ps -a
命令中的-a参数表示显示所有容器,否则只显示正在运行的容器。


同样先介绍一下相关的词义
CONTAINER ID    容器的编号。在创建容器时自动生成。
IMAGE      镜像名称或镜像编号。用来指明该容器是用哪个镜像创建的。
COMMAND            容器启动后执行的命令。
CREATED            容器创建的时间。
STATUS            容器的当前状态。Exited表示容器处于退出状态,类似于电脑“已关机”;Up表示容器正在运行。
PORTS            端口映射。如果有的话也只能在运行状态才能看到。具体情况后面搭集群时再介绍。
NAMES            容器名称。这个可以自己指定或修改,但不能和其它容器的名称相同。如果不指定,Docker会自动生成。
从截图上可以看到,当前只有一个容器,就是刚才的hello-world示例,容器编号为42989ad0874a,使用hello-world镜像创建,启动后执行一个叫hello的命令,创建于12分钟前,现在处于退出状态,docker自动给起了个名字elegant_mccarthy。

4.刚才hello-world示例中生成的容器是不是就能像虚拟机一样用了呢?
不能。我们使用类比来解释,ISO文件常用来装系统,但ISO文件不是只能装系统,里面可以放任何文件。同样,docker镜像里也未必带操作系统功能,官网的hello-world镜像就不带。用它来生成的容器,只能输出一段话,没有其它功能,毕竟只是一个1k多东西。下面来介绍我们真正要用的东西。

四、Docker镜像基本操作
Docker的服务器上有很多镜像,分为两类,一类是Docker官方的,另一类是普通用户上传的。Docker把他们放镜像的地方叫做Docker Hub。

1.搜索镜像
下面以centos为例
$ docker search centos


在搜索结果列表中OFFICIAL列中有[OK]的表示是官方的镜像。我们看到第一个就是官方的。

2.下载镜像
$ docker pull centos


默认下载最新版

3.查看镜像
$ docker images
可以看到刚下载的centos镜像已经在列表中了,大小为193MB。需要注意的是Docker中的镜像都是针对Docker设计的,只能在Docker中使用。比如刚下载的这个centos镜像不能用来装系统哦。Docker中的操作系统镜像比用来装系统的ISO镜像要小的多。

五、Docker容器基本操作
1.创建并运行容器
$ docker run -it -h pseudo-distributed --name pseudo-distributed centos


说明:
docker run    表示创建一个容器并运行。
-it            表示容器运行后直接进入容器内部的命令行。此时就可以像操作虚拟机一样操作这个容器了。
-h            表示容器的主机名hostname,和虚拟机的hostname一样。如果不指定,Docker会用CONTAINER ID来作为hostname。
--name        表示容器的名称。这个前面已经提到了,如果自己不指定,Docker会自动分配一个名称。不过还是自己指定的更有意义。
其中主机名和容器名一不一样都行,我这里是给了一样的,都是pseudo-distributed。
最后一个参数centos是镜像名称,表示该容器用哪个镜像创建。
这个过程类似于用系统光盘装系统。

2.退出当前容器并保持其继续运行
快捷键Ctrl+p+q

3.进入正在运行的容器
$ docker attach  pseudo-distributed

4.退出当前容器并停止其运行
# exit

5.启动已停止运行的容器
$ docker start -i pseudo-distributed
-i    表示启动后直接进入该容器

6.关闭正在运行的容器
$ docker stop pseudo-distributed

用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker的更多相关文章

  1. Hadoop集群上搭建Ranger

    There are two types of people in the world. I hate both of them. Hadoop集群上搭建Ranger 在搭建Ranger工程之前,需要完 ...

  2. [转载] 把Nutch爬虫部署到Hadoop集群上

    http://f.dataguru.cn/thread-240156-1-1.html 软件版本:Nutch 1.7, Hadoop 1.2.1, CentOS 6.5, JDK 1.7 前面的3篇文 ...

  3. 把Nutch爬虫部署到Hadoop集群上

    原文地址:http://cn.soulmachine.me/blog/20140204/ 把Nutch爬虫部署到Hadoop集群上 Feb 4th, 2014 | Comments 软件版本:Nutc ...

  4. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  5. MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行

    上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...

  6. 在Hadoop集群上的HBase配置

    之前,我们已经在hadoop集群上配置了Hive,今天我们来配置下Hbase. 一.准备工作 1.ZooKeeper下载地址:http://archive.apache.org/dist/zookee ...

  7. hadoop 把mapreduce任务从本地提交到hadoop集群上运行

    MapReduce任务有三种运行方式: 1.windows(linux)本地调试运行,需要本地hadoop环境支持 2.本地编译成jar包,手动发送到hadoop集群上用hadoop jar或者yar ...

  8. 在Hadoop集群上,搭建HBase集群

    (1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里 ...

  9. 在Hadoop集群上的Hive配置

    1. 系统环境Oracle VM VirtualBoxUbuntu 16.04Hadoop 2.7.4Java 1.8.0_111 hadoop集群master:192.168.19.128slave ...

随机推荐

  1. [SinGuLaRiTy] 2017-03-27 综合性测试

    [SinGuLaRiTy-1013] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 这是 三道 USACO 的题...... 第一题:奶牛飞 ...

  2. .net mvc------下拉列表DropDownList控件------绑定数据

    下拉列表 以性别为例 绑定可以了,可以显示了,但有些地方就能传值,有些地方就会出错提示,如有大神请指教.... 错误如下: 具有键"sex"的 ViewData 项属于类型&quo ...

  3. winform 自定义分页控件 及DataGridview数据绑定

    分页效果如上图所示,用到的控件均为基本控件 ,其方法如下 右击项目-添加-新建项 选择用户控件 然后在用户控件中拖入所需要的Label,Button,Text 用户控件全部代码: using Syst ...

  4. laravel redis Error while reading line from the server.

    代码运行一段时间后,会报下面的错误. [Predis\Connection\ConnectionException] Error while reading line from the server. ...

  5. Redis基础学习(四)—Redis的持久化

    一.概述      Redis的强大性能很大程度上都是因为数据时存在内存中的,然而当Redis重启时,所有存储在内存中的数据将会丢失,所以我们要将内存中的数据持久化. Redis支持两种数据持久化的方 ...

  6. Java转型(向上转型和向下转型)

    在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...

  7. Druid Indexing 服务

    索引服务由三个主要组件:一个是peon 组件,可以运行一个任务,一个是Middle Managers组件,管理peons,和一个overlord 组件管理任务分发给Middle Managers. o ...

  8. Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)

    一.先摆需求: 1.中文搜索.英文搜索.中英混搜   如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜   如 ...

  9. 移动端测试方案--sptt

    sptt sptt是移动端UI自动化测试的一种解决方案,全称为special tool of test.sptt提供了一套测试解决方案,并使用命令行完成相关操作,最终可集成在各种后续的流程中. spt ...

  10. SIP DB33标准笔记 监控图像获取

    实时监控图像的获取: a) 实时监控图像的获取过程应包括获取实时流.释放实时流.应使用 RFC 3261 中定义的方法INVITE 获取一个摄像机的实时监控视频流. 取消没有完成的连接应采用 CANC ...