利用 Docker 搭建单机的 Cloudera CDH 以及使用实践
利用 Docker 搭建單機(jī)的 Cloudera CDH 以及使用實(shí)踐
想用 CDH 大禮包,于是先在 Mac 上和 Centos7.4 上分別搞個(gè)了單機(jī)的測(cè)試用。其實(shí)操作的流和使用到的命令差不多就一并說了:
首先前往官方下載包:
https://www.cloudera.com/downloads/quickstart_vms/5-13.html
如果使用 mac 并且安裝 docker。 我們可以很輕松的使用 kitematic 來獲取最新版本的 cloudera docker 鏡像。只需要搜 cloudera/quickstar 即可這是地址:
https://hub.docker.com/r/cloudera/quickstart/
?
當(dāng)我們下載好鏡像之后就可以愉快的將進(jìn)行加載起來。macos 基本是全程無腦,linux 稍微麻煩一點(diǎn)使用
docker import cloudera-quickstart-vm-5.13.0-0-beta-docker.tar
將鏡像 import 進(jìn)來。
然后使用命令啟動(dòng)就可以了。
Cloudera 的 docker 版本分成兩部分啟動(dòng)。一方面是大禮包的啟動(dòng) /usr/bin/docker-quickstart,一方面是 Cloudera manager 本身的啟動(dòng) /home/cloudera/cloudera-manager
這里我們使用命令
docker run --name cdh --hostname=quickstart.cloudera --privileged=true -t -i -p 8020:8020 -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 cloudera/quickstart /bin/bash -c '/usr/bin/docker-quickstart && /home/cloudera/cloudera-manager --express && service ntpd start'直接啟動(dòng)兩個(gè)程序。這里注意參數(shù)都可以從下面 refrence 查詢到大概是什么意思,合理之所以要寫這么多端口映射也是為了方便我們外面的機(jī)器可以方面的訪問 docker 內(nèi)部的這些端口,訪問這些服務(wù)。 Cloudera 本身的 manager 是 7180 端口。當(dāng)這些啟動(dòng)起來之后就可以訪問目標(biāo)機(jī)器 ip 的 7180 端口訪問 Cloudera manager 了。
?
?
上圖就是一個(gè) dashbord 的樣子。另外在 linux 機(jī)器有一個(gè)地方需要注意的是,可能你的 docker 用上面命令起起來之后,docker 內(nèi)的實(shí)例沒有辦法訪問外網(wǎng),這里我們配置一下 docker 創(chuàng)建容器時(shí)候的參數(shù)增加 -net host 即可。也可以在宿主機(jī)器上在 /etc/default/docker 文件。并且配置上 DOCKER_OPTS="--dns host_ip" 即可。
?
從上圖我們還可以注意到另外一個(gè)問題,除了主機(jī)和 manager 都沒有啟動(dòng)。在 Cloudera 大禮包中,只有 hue 和 manager 本身是什么服務(wù)都不依賴的可以在任何時(shí)候選擇啟動(dòng)和關(guān)閉。其他的應(yīng)用多多少少存在著一些啟動(dòng)順序上的依賴這個(gè)要注意。?
現(xiàn)在我們來啟動(dòng)幾個(gè)我們關(guān)心的服務(wù),我們先來啟動(dòng) HDFS。
這里我已經(jīng)把它啟動(dòng)起來了當(dāng)沒有啟動(dòng)的時(shí)候點(diǎn)擊 start cm(Cloudera manager) 就會(huì)把這個(gè)給啟動(dòng)起來。
點(diǎn)一下已經(jīng)啟動(dòng)起來的 HDFS 就會(huì)到這個(gè)應(yīng)用的 dashborad cm 給我們提供了非常多的圖表以及面板可以關(guān)注目前機(jī)器和集群的情況如下圖:
目前看到的都是單節(jié)點(diǎn)的情況。讓我意外的是啟動(dòng)的時(shí)候竟然還會(huì)有 Canary 模式。在這個(gè)界面點(diǎn)擊右上角的 NameNode Web UI 就可以看到老板我們熟悉的
社區(qū)版的 HDFS 界面了。比較方便的是當(dāng)我們點(diǎn)擊 Configuration 就可以進(jìn)到 HDFS 的一些配置包括塊大小之類的配置這里都可以方便設(shè)置。
可以看到這一套東西真的是把能包好的東西都已經(jīng)給我們列出來了。
?
我暫時(shí)在單機(jī)上面啟了兩個(gè) app 一個(gè) HDFS 一個(gè) Spark ,內(nèi)存基本被打到了 5個(gè)G. 可以看出來其實(shí) CDH 大禮包其實(shí)還是非常吃內(nèi)存的。當(dāng)我們?cè)谶M(jìn)行線上環(huán)境配置的
時(shí)候占用的資源肯定是只增不減。這里拋磚引玉了一個(gè) app 接下來大家可以按照這個(gè)方法繼續(xù)探索。
?
既然 HDFS 已經(jīng)啟動(dòng)讓我們來嘗試使用 python 來操作一下 HDFS
pip install hdfs 安裝 hdfscli 包
from hdfs.client import Client client = Client("http://127.0.0.1:50070", root="/", timeout=100)print(client.list("/")) client.upload("/", "/Users/piperck/Desktop/About_me/dragen.wma")可以看到我們可以直接創(chuàng)建連接,client.list 是列出 HDFS 目前根目錄的情況。 下面我們調(diào)用 client.upload 上傳文件。
上傳文件的時(shí)候可能遇到很多問題,因?yàn)槲覀冞@里使用的是 docker 搭建的 CDH ,所以一般會(huì)報(bào)這個(gè)錯(cuò)誤:
('<requests.packages.urllib3.connection.HTTPConnection object at 0x00000000043A3FD0>: Failed to establish a new connection:[Errno 11004] getaddrinfo failed',))這個(gè)時(shí)候我們需要去 docker 里面 hostname 一下會(huì)得到 quickstart.cloudera。我用的 macos 所以把這個(gè)直接配置進(jìn)我電腦的 /etc/hosts 里。
127.0.0.1? ? ? ?quickstart.cloudera
否則,永遠(yuǎn)報(bào)錯(cuò)。。這里搞了非常久需要注意一下。
之后繼續(xù)嘗試連接,應(yīng)該還會(huì)報(bào)另外一個(gè)錯(cuò)誤:
Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x很明顯權(quán)限問題,因?yàn)槲覀儾]有登陸而且在本地使用的權(quán)限也不明。755 的權(quán)限導(dǎo)致我們無法上傳文件,這里的 root 權(quán)限是 hdfs 用戶,所以會(huì)失敗
這里有兩個(gè)辦法可以解決這個(gè)問題:
1. 調(diào)整 hdfs 的權(quán)限檢查將
<property><name>dfs.permissions</name><value>false</value> </property>設(shè)置為 False 關(guān)閉權(quán)限檢查。
2. 增加一個(gè)由這個(gè)用戶創(chuàng)建的文件夾在根目錄,然后將文件往那里面?zhèn)骶涂梢粤恕?
?
現(xiàn)在我們?cè)賹魃先サ奈募螺d回來:
from hdfs.client import Client client = Client("http://127.0.0.1:50070", root="/", timeout=100)print(client.list("/")) client.download("/dragen.wma", "/Users/piperck/Desktop")很輕松成功了,沒有再出什么幺蛾子。
?
Reference:
https://www.cloudera.com/documentation/enterprise/5-15-x/topics/quickstart_docker_container.html? ---docker 安裝啟動(dòng)文檔
https://www.cloudera.com/documentation/enterprise/5-15-x/topics/cm_mc_start_stop_service.html#cmug_topic_5_6? ---啟動(dòng) hdfs 服務(wù)教程
https://blog.csdn.net/g11d111/article/details/72902112
https://dxysun.com/2018/07/19/hadoopForPythonHdfs/? PYTHONHDFS 使用教程
https://blog.csdn.net/Gamer_gyt/article/details/52446757??使用python的hdfs包操作分布式文件系統(tǒng)(HDFS)
https://segmentfault.com/a/1190000002672666? hadoop 常用文件的操作命令
?
?
官方文檔1:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/quickstart_docker_container.html#importing_quickstart_image
官方文檔2:https://hub.docker.com/r/cloudera/quickstart1, 使用docker 拉取cdh的docker鏡像
2, 運(yùn)行容器
3, 進(jìn)入容器啟動(dòng)cloudera服務(wù)
4, 通過web訪問: http://quickstart.cloudera:7180
?
| 7180-web控制臺(tái) | cloudera | cloudera |
| hue | cloudera | cloudera |
| mysql | root | cloudera |
拉取cdh的docker鏡像, 運(yùn)行容器
###1, 使用docker 拉取cdh的docker鏡像, 運(yùn)行容器
?
1, cloudera-manager啟動(dòng)腳本分析
2, 進(jìn)入容器: 啟動(dòng)cdh服務(wù)
配置host映射
?
測(cè)試hdfs, yarn 是否正常
su hdfs cd ; echo "a,b,c">a.txt; hdfs dfs -put a.txt / hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /a.txt /mapred-out-wc.txt———————————————
總結(jié)
以上是生活随笔為你收集整理的利用 Docker 搭建单机的 Cloudera CDH 以及使用实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zookeeper+kafka+logs
- 下一篇: fastjson反序列化漏洞原理及利用