使用Docker快速部署hadoop测试集群

目录

  • 背景
  • 第一部分 Docker镜像准备
  • 第二部分 运行容器
  • 第三部分 cloudera-manager管理
  • 第四部分 组件使用测试
  • 第五部分 总结
  • 参考文献及资料

背景

通常在个人笔记本上部署Hadoop测试集群(含生态圈各组件)是个很耗时的工作。Cloudera公司提供一个快速部署的Docker镜像,可以快速启动一个测试集群。

测试环境为Ubuntu服务器

第一部分 Docker镜像准备

首先本机需要部署有docker环境,如果没有需要提前部署。

1.1 拉取Docker镜像

可以从DockerHub上拉取cloudera/quickstart镜像。

镜像项目地址为:https://hub.docker.com/r/cloudera/quickstart

# docker pull cloudera/quickstart:latest

如果不具备联网环境,可以通过镜像介质包安装。介质可以在官网(需要注册用户)下载:https://www.cloudera.com/downloads/quickstart_vms/5-13.html

由于墙的原因下载会很慢

# wget https://downloads.cloudera.com/demo_vm/docker/cloudera-quickstart-vm-5.13.0-0-beta-docker.tar.gz
# tar xzf cloudera-quickstart-vm-5.13.0-0-beta-docker.tar.gz
# docker import - cloudera/quickstart:latest < cloudera-quickstart-vm-5.13.0-0-beta-docker/*.tar

1.2 检查镜像库

# docker images|grep cloudera
cloudera/quickstart   latest   4239cd2958c6   3 years ago         6.34GB

说明镜像准备好了,下面基于镜像启动容器。

第二部分 运行容器

2.1 使用镜像启动容器

启动CDH集群的命令格式为:

# docker run --hostname=quickstart.cloudera --privileged=true -t -i [OPTIONS] [IMAGE] /usr/bin/docker-quickstart

官方提示的参数介绍如下:

Option Description
–hostname=quickstart.cloudera Required: Pseudo-distributed configuration assumes this hostname.容器主机名(/etc/hosts中指定hostname)。
–privileged=true Required: For HBase, MySQL-backed Hive metastore, Hue, Oozie, Sentry, and Cloudera Manager.这是Hbase组件需要的模式。
-t Required: Allocate a pseudoterminal. Once services are started, a Bash shell takes over. This switch starts a terminal emulator to run the services.
-i Required: If you want to use the terminal, either immediately or connect to the terminal later.
-p 8888 Recommended: Map the Hue port in the guest to another port on the host.端口映射参数。
-p [PORT] Optional: Map any other ports (for example, 7180 for Cloudera Manager, 80 for a guided tutorial).
-d Optional: Run the container in the background.容器后台启动。
–name 容器的名字
-v host_path:container_path 主机上目录挂载到容器中目录上,主机上该放入任何东西,Docker容器中对于目录可以直接访问。

当然还可以自定义其他docker启动参数。最后启动命令整理为:

docker run -t -i -d \
--name cdh \
--hostname=quickstart.cloudera \
--privileged=true \
-v /data/CDH:/src \
-p 8020:8020 -p 8042:8042 -p 8022:8022 -p 7180:7180 -p 21050:21050 -p 50070:50070 -p 50075:50075 -p 50010:50010 -p 50020:50020 -p 8890:8890 -p 60010:60010 -p 10002:10002 -p 25010:25010 -p 25020:25020 -p 18088:18088 -p 8088:8088 -p 19888:19888 -p 7187:7187 -p 11000:11000 -p 10000:10000 -p 88:88 -p 8888:8888 cloudera/quickstart \
/bin/bash -c '/usr/bin/docker-quickstart'

Cloudera 本身的 manager 是 7180 端口,提前配置端口映射。

启动容器我们使用了-d后台启动参数,如果没有指定后台启动,终端将自动连接到容器,退出shell后容器会中止运行(可以通过使用Ctrl + P + Q命令退出,这样容器会继续保持运行)。

对于已经后台运行的容器,我们使用下面的命令进入容器shell:

# docker attach [CONTAINER HASH]

建议使用下面的命令:

# docker exec -it 容器名 /bin/bash

2.2 时钟同步问题

容器内部使用的时间时区为UTC,和主机(宿主机通常为CST(东八区))不同时区,会提示时钟同步问题。解决的办法是:

在环境变量中添加时区变量,并source生效:

$ vi /etc/profile
文件末尾添加一行:TZ='Asia/Shanghai'; export TZ
$ source /etc/profile

最后启动时钟同步服务:

[root@quickstart home]# service ntpd startStarting ntpd:                                             [  OK  ]# 检查服务状态[root@quickstart home]# service ntpd statusntpd (pid  13536) is running...

这样完成时钟同步。

2.3 使用集群服务

这样集群的大部分服务组件均可使用。

第三部分 cloudera-manager管理

3.1 启动管理服务

CDH在该镜像中提供cloudera-manager组件,用户集群web管理界面,可以通过下面的命令启动。

需要注意的是,启动后CDH会停止其他组件服务。

#./home/cloudera/cloudera-manager --express [--force][QuickStart] Shutting down CDH services via init scripts...kafka-server: unrecognized serviceJMX enabled by defaultUsing config: /etc/zookeeper/conf/zoo.cfg[QuickStart] Disabling CDH services on boot...error reading information on service kafka-server: No such file or directory[QuickStart] Starting Cloudera Manager server...[QuickStart] Waiting for Cloudera Manager API...[QuickStart] Starting Cloudera Manager agent...[QuickStart] Configuring deployment...Submitted jobs: 14[QuickStart] Deploying client configuration...Submitted jobs: 16[QuickStart] Starting Cloudera Management Service...Submitted jobs: 24[QuickStart] Enabling Cloudera Manager daemons on boot...________________________________________________________________________________Success! You can now log into Cloudera Manager from the QuickStart VM's browser:    http://quickstart.cloudera:7180    Username: cloudera    Password: cloudera

集群控制台的地址为:http://quickstart.cloudera:7180,需要注意的是这里quickstart.cloudera是主机名,需要客户端hosts中配置,否则使用实IP或者容器端口映射后使用宿主机IP(例如:192.168.31.3)。

用户名和密码为:cloudera/cloudera,登录界面如下:

使用Docker快速部署hadoop测试集群_第1张图片

登录后,下图是集群控制台:

使用Docker快速部署hadoop测试集群_第2张图片

从管理界面上可以看到除了主机和 manager ,其他服务组件均未启动。

3.2 启动集群组件服务

在控制台上,我们按照顺序启动HDFS、Hive、Hue、Yarn服务。

如果服务启动异常,可以尝试重启服务组件。注意需要先启动HDFS后启动Hive,否则需要重启Hive。

第四部分 组件使用测试

4.1 HDFS组件使用

我们使用HDFS的Python API与集群hdfs文件系统进行交互测试:

4.1.1 查看文件系统
from hdfs.client import Clientclient = Client("http://192.168.31.3:50070", root="/", timeout=100)print(client.list("/"))# ['benchmarks', 'hbase', 'tmp', 'user', 'var']# 返回一个list记录主目录
4.1.2 上传新增文件

注意这里需要在宿主机(客户端机器)配置hosts文件:

192.168.31.3       quickstart.cloudera

然后执行:

client.upload("/tmp", "/root/jupyter/nohup.out")# '/tmp/nohup.out'# 返回路径信息
4.1.3 下载hdfs文件
client.download("/tmp/nohup.out", "/tmp")# 返回路径'/tmp/nohup.out'

第五部分 启用安全模式(Kerberos)

默认情况下集群是非安全模式,如果测试需要安全集群模式,可以在菜单:管理-安全中开始Kerberos。需要注意的是需要在容器中安装Kerberos。安装步骤如下:

  • 注释到无关源(docker容器执行);

    # cd /etc/yum.repos.d# mv cloudera-manager.repo cloudera-manager.repo.bak
    
  • 部署yum源(宿主机执行)

    # wget https://www.xmpan.com/Centos-6-Vault-Aliyun.repo# docker cp Centos-6-Vault-Aliyun.repo 容器名:/etc/yum.repos.d
    
  • 然后安装Kerberos(docker容器执行)

    ./home/cloudera/kerberos
    

    等待安装完成即可。

接下来就是配置kerberos,主要涉及的配置文件有:

/etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf/var/kerberos/krb5kdc/kdc.conf

主要调整是将EXAMPLE.COM调整为HADOOP.COM。另外配置文件krb5.conf需要个性化指定KDC服务器:

HADOOP.COM = {kdc = 服务器hostname或者IPadmin_server = 服务器hostname或者IP}

然后创建Kerberos数据库:

$ kdb5_util create –r HADOOP.COM -s

创建Kerberos管理账户:

$ kadmin.localkadmin.local: addprinc admin/[email protected]

最后启动服务:

[root@quickstart cloudera]# service krb5kdc startStarting Kerberos 5 KDC:                                   [  OK  ][root@quickstart cloudera]# service kadmin startStarting Kerberos 5 Admin Server:                          [  OK  ]

查看票据:

[root@quickstart cloudera]# kinit admin/[email protected] for admin/[email protected]: [root@quickstart cloudera]# klistTicket cache: FILE:/tmp/krb5cc_0Default principal: admin/[email protected] starting     Expires            Service principal03/16/21 16:30:57  03/17/21 16:30:57  krbtgt/[email protected]	renew until 03/16/21 16:30:57

生成keytab文件:

[root@quickstart keytab]# kadmin.localAuthenticating as principal admin/[email protected] with password.kadmin.local:  xst -norandkey -k admin.keytab admin/[email protected]

这样就生成了admin.keytab文件。然后使用下面的命令测试一下:

kinit -kt admin.keytab admin/[email protected]

第六部分 总结

1、Cloudera 的 docker 版本分成两部分启动。(1)启动各组件启动,使用命令为: /usr/bin/docker-quickstart,(2) 启动Cloudera manager 管理服务,启动命令为:/home/cloudera/cloudera-manager。docker启动时选择启动一项。

参考文献及材料

1、cloudera/quickstart镜像地址:https://hub.docker.com/r/cloudera/quickstart

2、cloudera/quickstart镜像部署指引:https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html

3、利用 Docker 搭建单机的 Cloudera CDH 以及使用实践

更多关注公众号:
使用Docker快速部署hadoop测试集群_第3张图片

你可能感兴趣的:(hadoop,Docker,hadoop,docker,大数据)