1. 程式人生 > >基於Docker 搭建Cloudera 大資料環境 並在CM中整合Kafka

基於Docker 搭建Cloudera 大資料環境 並在CM中整合Kafka

一 基於docker搭建cloudera

Clouder 官方文件:

英文文件,英語基礎好的同學直接照著步驟做就好了。

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 -p2181:2181 -p60010:60010 -p60000:60000 -p9092:9092 -p8888:8888 -p7180: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

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

    設定後可恢復正常。