Docker
镜像准备cloudera-manager
管理通常在个人笔记本上部署Hadoop
测试集群(含生态圈各组件)是个很耗时的工作。Cloudera
公司提供一个快速部署的Docker
镜像,可以快速启动一个测试集群。
测试环境为
Ubuntu
服务器
首先本机需要部署有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
# docker images|grep cloudera
cloudera/quickstart latest 4239cd2958c6 3 years ago 6.34GB
说明镜像准备好了,下面基于镜像启动容器。
启动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
容器内部使用的时间时区为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...
这样完成时钟同步。
这样集群的大部分服务组件均可使用。
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,登录界面如下:
登录后,下图是集群控制台:
从管理界面上可以看到除了主机和 manager ,其他服务组件均未启动。
在控制台上,我们按照顺序启动HDFS、Hive、Hue、Yarn服务。
如果服务启动异常,可以尝试重启服务组件。注意需要先启动HDFS后启动Hive,否则需要重启Hive。
我们使用HDFS的Python API与集群hdfs文件系统进行交互测试:
from hdfs.client import Clientclient = Client("http://192.168.31.3:50070", root="/", timeout=100)print(client.list("/"))# ['benchmarks', 'hbase', 'tmp', 'user', 'var']# 返回一个list记录主目录
注意这里需要在宿主机(客户端机器)配置hosts文件:
192.168.31.3 quickstart.cloudera
然后执行:
client.upload("/tmp", "/root/jupyter/nohup.out")# '/tmp/nohup.out'# 返回路径信息
client.download("/tmp/nohup.out", "/tmp")# 返回路径'/tmp/nohup.out'
默认情况下集群是非安全模式,如果测试需要安全集群模式,可以在菜单:管理-安全中开始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 以及使用实践