基于Docker 搭建Cloudera 大数据环境 并在CM中集成Kafka

一 基于docker搭建cloudera

Clouder 官方文档:

https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html

英文文档,英语基础好的同学直接照着步骤做就好了。

1 拉取cloudera 镜像

docker pull cloudera/quickstart:latest

2 运行镜像

官方文档提供的命令是:

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

#经测试有点问题,后面会给出改进命令
参数 描述
--hostname=quickstart.cloudera 必要参数:主机地址为 quickstart.cloudera
--privileged=true 必要参数:HBase, MySQL-backed Hive metastore, Hue, Oozie, Sentry, 和 Cloudera Manager 的权限开关
-it 开启交互式容器
-p 8888 推荐:映射8888端口为hue端口
-p [PORT] 参数 :7180:clouder manager 端口 80端口要开启(防火墙,安全组)
-d 后台运行

经测试发现,光开启这些端口是不够用的,比如我的需求是kafka ,hbase,zk所以还需要开放一些端口。

docker run --hostname=quickstart.cloudera --name cdh2 --privileged=true -t -i  -p 2181:2181 -p 60010:60010  -p 60000:60000  -p 9092:9092  -p 8888:8888 -p 7180:7180
CONTAINDER_NAME/ID  /usr/bin/docker-quickstart

3 运行cloudera manager

默认是没有开启CM服务的,所以要手动开启。 CM目录:/home/cloudera/cloudera-manager

sudo docker exec -it CONTAINER_ID /bin/bash


sudo /home/cloudera/cloudera-manager --force --enterprise

等待启动完成后浏览器输入 ip:7180

Username: cloudera

Password: cloudera

4 Q&A

  1. 可能会遇到主机时间不同步的问题,因为虚拟机默认没有开启ntp服务。 解决办法:
#先进入容器后运行命令查看服务状态
service --status-all

#开启ntp服务
service ntpd start

二 集成 kafka

1 下载kafka

kafka相关包准备 csd包:http://archive.cloudera.com/csds/kafka/

parcel包: http://archive.cloudera.com/kafka/parcels/latest/ ( 根据自己的集群的系统版本下载 )

2 集成实现

关闭集群,关闭cm服务( 假如不关闭cm服务,会出现在添加kafka服务时找不到相关的服务描述 )

  • 将csd包放到cm安装节点下的 /opt/cloudera/csd目录下
  • 将parcel包放到cm安装节点下的 /opt/cloudera/parcel-repo目录下,文件改名为 .sha 结尾才能识别,启动cm服务,分配并激活percel包。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

3 Q&1

1,白名单配置问题。表现为Kafka MirrorMaker启动失败。
错误信息:

whitelist must be specified when using new consumer in mirror maker

点击cm集群管理页面--kafka--instances--kafka mirrormaker--然后搜索Whitelist,然后提示mirrormaker default group,我就把刚才分配的时候设置的添加了进去。你在分配kafka生产环境是怎么分配的,你这里就怎么填。我的是quickstart.cloudera:9092 然后重启kafka。

kafka的java内存过低导致broker启动失败。

错误信息:

在CM 界面中查看 broker的异常日志后,发现:OutofMemeryException

这是因为 Java Heap size of Broker这个选项默认配置是 50M ,需要将其修改成 256M 或者 更多,这里修改成 1G ,保存配置后,在启动kafka集群即可.

4 测试fakfa

  • 内网测试:
# 查找kafka目录,并进入kafka/bin 目录
find / -name 'kafka' -type d

# 创建test TOPIC
./kafka-topics.sh --create --topic test  --zookeeper 	quickstart.cloudera:2181 --partitions 3 --replication-factor 1    

# 查看创建的topic 列表
./kafka-topics.sh --list --zookeeper quickstart.cloudera:2181

# 生产者生产消息
./kafka-console-producer.sh --broker-list  quickstart.cloudera:9092 --topic test

# 客户端接收消息
./kafka-console-consumer.sh --zookeeper  quickstart.cloudera:2181 --topic test --from-beginning
  • 外网测试:
  1. 首先开放防火墙端口,安全组端口,

  2. 如遇到docker内网kafka正常可以访问,代码无法访问时: 1,修改本地hosts 文件 windows:在这个目录

    /windows/system32/drivers/etc/hosts
    
    新增:
    [服务器外网ip]  quickstart.cloudera

    2,修改服务器宿主机hosts文件

    vi /etc/hosts
    
    新增:
    [内网ip]    quickstart.cloudera quickstart
    [外网ip]    quickstart.cloudera quickstart

    设置后可恢复正常。

你可能感兴趣的:(docker)