如何使用docker搭建hadoop的cdh版本单节点伪集群开发测试环境

前言

docker 是一个容器化技术的程序。不仅适用于微服务集群部署,而且作为开发者个人使用,也是十分方便的,比如我们可以快速安装数据库,缓存等中间件,丝毫不影响物理机的系统环境,不会因为卸载,更新等,带来不可预知的问题,也减少了重装系统的可能性。

在容器化技术,docker 一直走在前列,docker 是用 go 语言编写的一个容器平台,他的基本单位是容器,每个容器就像一个独立的操作系统一样,可以在自己封闭的环境里独立运行,其中,容器是由镜像生成的。

所以使用 docker 的一般顺序是,拉取(或自己构建)镜像,然后由镜像生成一个或多个容器,然后启动容器,开始使用。

Hadoop 版本介绍

  • Apache Hadoop
    • 完全开源免费、社区活跃、文档,资料详实
    • 复杂的版本管理
    • 复杂的集群部署、安装、配置
    • 复杂的集群运维。对集群的监控,运维
    • 复杂的生态环境
  • CDH: Cloudera Distributed Hadoop
    • 基于Apache协议,100%开源
    • 最早出现,拥有最多的部署案例
    • 提供强大的部署、管理和监控工具
    • 开发并贡献了可实时处理大数据的Impala项目
  • HDP: Hortonworks Data Platform
    • 开创性地极大地优化了Hive项目
    • 开发了很多增强特性并提交至核心主干
    • 100%开源,总是有最新版本的 Hadoop
  • 其他

Hadoop 小象

其中在第三发发行版中,国内应用较多的是Cloudera的CDH[3],我们使用 CDH 版本继续本文的内容。

准备 docker

本文使用 windows 举例,前往https://docs.docker.com/docker-for-windows/install/下载 Docker Desktop for Windows。

然后双击 exe 文件进行安装,如果遇到错误提示,请自行百度google解决。

安装 Hadoop

方式一:使用 docker pull

使用docker pull命令拉取 cloudera 官方在 docker hub 上面的快速开始仓库:

$ docker pull cloudera/quickstart:latest

由于镜像文件大约 4.4 GB ,存储在 docker hub ,在线下载速度特别慢,尤其是当网络条件受限的情况下,可能需要好几天才能下载完成。所以推荐第二种下载方式:

方式二:离线导入(推荐)

docker 支持导入离线的镜像,通过使用docker import命令即可导入下载的 docker image:

$ docker import --help

Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Import the contents from a tarball to create a filesystem image

Options:
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Set commit message for imported image

下载

点击https://www.cloudera.com/downloads/quickstart_vms/5-13.html前往QuickStarts for CDH 5.13页面下载 docker image

请选择 docker image

然后填表,进行下载,这里的下载速度很快。

解压

下载完毕后开始解压:

$ tar zxf cloudera-quickstart-vm-5.13.0-0-beta-docker.tar.gz

或使用 winrar 或其他您喜欢的 GUI 解压软件进行解压。

解压完成后会在文件夹里找到名为cloudera-quickstart-vm-5.13.0-0-beta-docker.tar的文件,其大小为 6.58 GB。

导入

使用docker import命令导入 tar 文件:

$ docker import /path/to/your/cloudera-quickstart-vm-5.13.0-0-beta-docker.tar cloudera/quickstart:5.13.0

sha256:99bf0549gfb236526bcbb0db0f1dab8d35g774eb9d9712cd430debb640ee7ce5

在 tar 文件后面继续写 cloudera/quickstart:5.13.0 指明仓库名(Repository)和版本号(Tag),方便管理。

运行 Hadoop

现在已经导入了我们所下载的 hadoop 镜像,接下来就是把它在 docker 中运行起来[1]

$ docker run --name cdh_study --hostname=quickstart.cloudera --privileged=true -t -i -p 8888:8888 -p 80:80 -p 7180:7180 cloudera/quickstart:5.13.0 /usr/bin/docker-quickstart

Starting mysqld:                                           [  OK  ]    

if [ "$1" == "start" ] ; then                                          
    if [ "${EC2}" == 'true' ]; then                                    
        FIRST_BOOT_FLAG=/var/lib/cloudera-quickstart/.ec2-key-installed
        if [ ! -f "${FIRST_BOOT_FLAG}" ]; then                         
            METADATA_API=http://169.254.169.254/latest/meta-data       
            KEY_URL=${METADATA_API}/public-keys/0/openssh-key          
            SSH_DIR=/home/cloudera/.ssh                                
            mkdir -p ${SSH_DIR}                                        
            chown cloudera:cloudera ${SSH_DIR}                         
            curl ${KEY_URL} >> ${SSH_DIR}/authorized_keys              
            touch ${FIRST_BOOT_FLAG}                                   
        fi                                                             
    fi                                                                 

# more insignificant output #

Started Impala Catalog Server (catalogd) :                 [  OK  ]
Started Impala Server (impalad):                           [  OK  ]

上述命令的参数解释如下:

参数 解释
–hostname=quickstart.cloudera 必须。伪分布式就认这个名字。
–privileged=true 必须。HBase, MySQL-backed Hive metastore, Hue, Oozie, Sentry, and Cloudera Manager 需要权限
-i -t 必须。-i 或 –interactive 可交互的,保持 STIDIN 存活;-t 或 –tty 分配一个 tty bash 来进行交互
-p 8888:8888 推荐。把 Hue 的端口暴露到物理机。同样类似的还有 80 7180等
-d 可选。-d 或 –detach,后台运行命令
/usr/bin/docker-quickstart 必须。当容器 cloudera/quickstart:5.13.0 创建完成后,执行这个容器里面的脚本

脚本运行一会儿后,出现好几个 OK 的提示,就说明安装成功了。这时候我们就默认停留在了这个容器里面:

脚本运行完毕

测试 Hadoop

紧接着,在终端目前所处的 [root@quickstart /]#下输入:

$ hadoop version
Hadoop 2.6.0-cdh5.13.0
...other insignificant infomation...

检查 java 环境:

$ java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

进行存储文件测试:

$ hadoop fs -mkdir test_hdfs
$ hadoop fs -touchz test_hdfs/hello.txt
$ hadoop fs -ls
Found 1 items
drwxr-xr-x   - root supergroup          0 2019-05-08 11:05 test_hdfs
$ hadoop fs -ls test_hdfs
Found 1 items
-rw-r--r--   1 root supergroup          0 2019-05-08 11:05 test_hdfs/hello.txt
$ hadoop fs -text test_hdfs/hello.txt

cloudera live

在浏览器中输入http://localhost

cloudera live

Hue

在浏览器中输入http://localhost:8888/

Hue 认证页

默认用户名密码为 cloudera

在 Hue 的文件浏览器中查看刚刚创建的文件

下次使用

关掉终端之后,如果下次想再次使用,以下命令可以帮到您:

  1. 查看所有的容器
$ docker container ls -a

等效于:

$ docker ps -a

其中的STATUS如果是Exited就说明此容器已经退出了。

启动方式为:

  1. 启动一个容器
$ docker container start [container name]
cdh_study

然后再执行查看所有的容器的命令,发现 cdh_study 的STATUS已经变成UP了。但是并没有出现可交互的命令行。

  1. 进入一个已经在运行的容器的终端命令行

如果容器的STATUSUP使用下面命令就能重新回到容器内部的命令行:

$ docker container attach [container name]
[root@quickstart /]#

$ docker container exec -it [container name] bash
[root@quickstart /]#

这两个命令中的 container字样可以省略不写

  1. 查看容器输出的日志:
$ docker container logs -f [container name]
# a lot of logs are printed here and more are coming on the way #

其中 -f 是持续输出。

参考资料


  1. 1.cloudera/quickstart Single-node deployment of Cloudera’s 100% open-source Hadoop platform, and Cloudera Manager https://hub.docker.com/r/cloudera/quickstart/
  2. 2.使用Cloudera-CDH部署Hadoop大数据集群 https://www.jianshu.com/p/d7bc116a89e4
  3. 3.Apache Hadoop、CDH、HDP、MapR区别 https://blog.csdn.net/feng12345zi/article/details/83016460

   转载规则


《如何使用docker搭建hadoop的cdh版本单节点伪集群开发测试环境》Harbor Zeng 采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
 本篇
如何使用docker搭建hadoop的cdh版本单节点伪集群开发测试环境 如何使用docker搭建hadoop的cdh版本单节点伪集群开发测试环境
前言docker 是一个容器化技术的程序。不仅适用于微服务集群部署,而且作为开发者个人使用,也是十分方便的,比如我们可以快速安装数据库,缓存等中间件,丝毫不影响物理机的系统环境,不会因为卸载,更新等,带来不可预知的问题,也减少了重装系统的可能性。 在容器化技术,docker 一直走在前列,docker 是用 go 语言编写的一个容器平台,他的基本单位是容器,每个容器就像一个独立的操作系统一样,可
下一篇 
一文读懂什么是serverless和它的重要性 一文读懂什么是serverless和它的重要性
前一阵子,我在公司实习的时候,给小组内做了这样一个分享,今天终于有时间,整理出来。变成一片文章,与您分享。内容是我初次探索 Serverless 架构学习到的一些知识,如有错误的地方,希望您能指出。谢谢。 1. 前言语言的进化、浏览器的进化、服务器的进化,都是从复杂到简单,底层到封装的过程,而 Serverless 是后端 + 运维作为一个整体的进一步封装的过程,是把运维“外包”出去的服务架构
2019-04-11
  目录