基於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
- 可能會遇到主機時間不同步的問題,因為虛擬機器預設沒有開啟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
- 外網測試:
首先開放防火牆埠,安全組埠,
如遇到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
設定後可恢復正常。