利用 Docker 搭建单机的 Cloudera CDH 以及使用实践

想用 CDH 大礼包,于是先在 Mac 上和 Centos7.4 上分别搞个了单机的测试用。其实操作的流和使用到的命令差不多就一并说了:

首先前往官方下载包:

https://www.cloudera.com/downloads/quickstart_vms/5-13.html

如果使用 mac 并且安装 docker。 我们可以很轻松的使用 kitematic 来获取最新版本的 cloudera docker 镜像。只需要搜 cloudera/quickstar 即可这是地址:

https://hub.docker.com/r/cloudera/quickstart/

当我们下载好镜像之后就可以愉快的将进行加载起来。macos 基本是全程无脑,linux 稍微麻烦一点使用

docker import cloudera-quickstart-vm-5.13.0-0-beta-docker.tar

将镜像 import 进来。

然后使用命令启动就可以了。

Cloudera 的 docker 版本分成两部分启动。一方面是大礼包的启动 /usr/bin/docker-quickstart,一方面是 Cloudera manager 本身的启动 /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'

直接启动两个程序。这里注意参数都可以从下面 refrence 查询到大概是什么意思,合理之所以要写这么多端口映射也是为了方便我们外面的机器可以方面的访问 docker 内部的这些端口,访问这些服务。 Cloudera 本身的 manager 是 7180 端口。当这些启动起来之后就可以访问目标机器 ip 的 7180 端口访问 Cloudera manager 了。

上图就是一个 dashbord 的样子。另外在 linux 机器有一个地方需要注意的是,可能你的 docker 用上面命令起起来之后,docker 内的实例没有办法访问外网,这里我们配置一下 docker 创建容器时候的参数增加 -net host 即可。也可以在宿主机器上在 /etc/default/docker 文件。并且配置上 DOCKER_OPTS="--dns host_ip" 即可。

从上图我们还可以注意到另外一个问题,除了主机和 manager 都没有启动。在 Cloudera 大礼包中,只有 hue 和 manager 本身是什么服务都不依赖的可以在任何时候选择启动和关闭。其他的应用多多少少存在着一些启动顺序上的依赖这个要注意。

现在我们来启动几个我们关心的服务,我们先来启动 HDFS。

这里我已经把它启动起来了当没有启动的时候点击 start cm(Cloudera manager) 就会把这个给启动起来。

点一下已经启动起来的 HDFS 就会到这个应用的 dashborad cm 给我们提供了非常多的图表以及面板可以关注目前机器和集群的情况如下图:

目前看到的都是单节点的情况。让我意外的是启动的时候竟然还会有 Canary 模式。在这个界面点击右上角的 NameNode Web UI 就可以看到老板我们熟悉的

社区版的 HDFS 界面了。比较方便的是当我们点击 Configuration 就可以进到 HDFS 的一些配置包括块大小之类的配置这里都可以方便设置。

可以看到这一套东西真的是把能包好的东西都已经给我们列出来了。

我暂时在单机上面启了两个 app 一个 HDFS 一个 Spark ,内存基本被打到了 5个G. 可以看出来其实 CDH 大礼包其实还是非常吃内存的。当我们在进行线上环境配置的

时候占用的资源肯定是只增不减。这里抛砖引玉了一个 app 接下来大家可以按照这个方法继续探索。

既然 HDFS 已经启动让我们来尝试使用 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")

可以看到我们可以直接创建连接,client.list 是列出 HDFS 目前根目录的情况。 下面我们调用 client.upload 上传文件。

上传文件的时候可能遇到很多问题,因为我们这里使用的是 docker 搭建的 CDH ,所以一般会报这个错误:

('<requests.packages.urllib3.connection.HTTPConnection object at 0x00000000043A3FD0>: Failed to establish a new connection:[Errno 11004] getaddrinfo failed',))

这个时候我们需要去 docker 里面 hostname 一下会得到 quickstart.cloudera。我用的 macos 所以把这个直接配置进我电脑的 /etc/hosts 里。

127.0.0.1       quickstart.cloudera

否则,永远报错。。这里搞了非常久需要注意一下。

之后继续尝试连接,应该还会报另外一个错误:

Permission denied: user=root, access=WRITE, inode=&quot;/&quot;:hdfs:supergroup:drwxr-xr-x 

很明显权限问题,因为我们并没有登陆而且在本地使用的权限也不明。755 的权限导致我们无法上传文件,这里的 root 权限是 hdfs 用户,所以会失败

这里有两个办法可以解决这个问题:

1. 调整 hdfs 的权限检查将

<property><name>dfs.permissions</name><value>false</value>
</property>

设置为 False 关闭权限检查。

2. 增加一个由这个用户创建的文件夹在根目录,然后将文件往那里面传就可以了。

现在我们再将传上去的文件下载回来:

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 安装启动文档

https://www.cloudera.com/documentation/enterprise/5-15-x/topics/cm_mc_start_stop_service.html#cmug_topic_5_6  ---启动 hdfs 服务教程

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包操作分布式文件系统(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, 运行容器
3, 进入容器启动cloudera服务
4, 通过web访问: http://quickstart.cloudera:7180

服务名称 账户 密码
7180-web控制台 cloudera cloudera
hue cloudera cloudera
mysql root cloudera

拉取cdh的docker镜像, 运行容器
###1, 使用docker 拉取cdh的docker镜像, 运行容器

root@wang-pc:/var/lib/docker# docker pull cloudera/quickstartroot@wang-pc:/var/lib/docker# docker run \-id \--hostname=quickstart.cloudera \
--privileged=true  \-p 8020:8020 -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 -t -p 8888:8888 \--name=mycdh3 \cloudera/quickstart /usr/bin/docker-quickstart
d805d3c51b3f4c41c68fe2f3ba923f7e710b7f3c987b990b63a8fda9ee7bec4aroot@wang-pc:/var/lib/docker# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                                                                                                                                                                                                                                                                                                                                                                                                                    NAMES
d805d3c51b3f        cloudera/quickstart   "/usr/bin/docker-q..."   5 seconds ago       Up 3 seconds        0.0.0.0:7180->7180/tcp, 0.0.0.0:7187->7187/tcp, 0.0.0.0:8020->8020/tcp, 0.0.0.0:8088->8088/tcp, 0.0.0.0:8888->8888/tcp, 0.0.0.0:8890->8890/tcp, 0.0.0.0:10002->10002/tcp, 0.0.0.0:11000->11000/tcp, 0.0.0.0:18088->18088/tcp, 0.0.0.0:19888->19888/tcp, 0.0.0.0:21050->21050/tcp, 0.0.0.0:25010->25010/tcp, 0.0.0.0:25020->25020/tcp, 0.0.0.0:50010->50010/tcp, 0.0.0.0:50020->50020/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:50075->50075/tcp, 0.0.0.0:60010->60010/tcp   mycdh3

1, cloudera-manager启动脚本分析

/home/cloudera/cloudera-manager:# cm server启动
log 'Starting Cloudera Manager server...'
service cloudera-scm-server start 2>&1 > /dev/null
# cm agent启动
log 'Starting Cloudera Manager agent...'
service cloudera-scm-agent start 2>&1 > /dev/null

2, 进入容器: 启动cdh服务

###, 运行容器, 启动cloudera
root@wang-pc:/var/lib/docker# docker exec -it mycdh3 bash
[root@quickstart /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  packer-files  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@quickstart /]# /home/cloudera/cloudera-manager --enterprise[QuickStart] Shutting down CDH services via init scripts...
kafka-server: unrecognized service
JMX enabled by default
Using 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] Activating trial license for Enterprise...
[QuickStart] Configuring deployment...
Submitted jobs: 16
[QuickStart] Deploying client configuration...
Submitted jobs: 17
[QuickStart] Starting Cloudera Management Service...
Submitted jobs: 25
[QuickStart] Enabling Cloudera Manager daemons on boot...
________________________________________________________________________________
Success! You can now log into Cloudera Manager from the QuickStart VM's browser:http://quickstart.cloudera:7180Username: clouderaPassword: cloudera

配置host映射

root@wang-pc:/home/wang# cat /etc/hosts
127.0.0.1    localhost wang-pc quickstart.cloudera

测试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

———————————————

利用 Docker 搭建单机的 Cloudera CDH 以及使用实践相关推荐

  1. 利用docker搭建在线Markdown服务器

    利用docker搭建在线Markdown服务器 [CodiMD] CentOS7服务器 1.安装docker和docker-compose 2.编写docker-compose.yml version ...

  2. 基于CectOS7利用docker搭建Vulhub漏洞靶机环境

    基于CectOS7利用docker搭建Vulhub漏洞靶机环境 准备条件 第一步:在CentOS7上安装docker centos安装python3 安装 docker-compose docker- ...

  3. 利用docker搭建php7cms靶机

    前言 今天应师父要求,写一篇利用docker搭建渗透靶机的文章来记录一下自己的菜鸟时光,要求是小白照着一步一步走就能搭建成功(即使我也是小白).想来想去还是从docker的安装说起吧. 一.docke ...

  4. win10本地利用docker搭建FATE【快速方法】

    win10本地利用docker搭建FATE[快速方法] 本文介绍如何利用docker快速搭建FATE(需要的前期准备:安装win10对应版本的docker) 1.启动任意docker,与本地地址相映射 ...

  5. Win10系统Docker搭建单机Redis环境

    一.背景 很多时候在本地开发需要快速搭建需要的软件环境,Redis就是常用的开发环境之一,本文主要讲述怎么利用Win10 Docker 搭建Redis环境. 系统:Win10 64位 Docker:D ...

  6. 利用docker搭建服务器集群并部署大数据生态软件

    1.集群搭建与配置 本来想使用centos镜像搭建服务器集群,但最小化安装版的镜像也需要1G左右,如果后面再部署一些大数据软件,单是多台服务器环境部署就会占用大量空间,加上此版本镜像在不同电脑环境的安 ...

  7. 利用Docker搭建Redis集群

    Redis集群搭建 运行Redis镜像 分别使用以下命令启动3个Redis docker run --name redis-6379 -p 6379:6379 -d hub.c.163.com/lib ...

  8. 利用docker 搭建File Browser 文件管理系统

    File Browser就是一个文件浏览器,因为linux并不方便桌面管理,所以Filebrowser就是帮助我们管理linux服务器上文件的程序,你可以称他为网盘程序,可以管理文件.可以分享文件,另 ...

  9. 利用docker搭建php调试环境(phpstorm+xdebug)

    前言 最近审计php代码发现手动打印变量实在是太累了,不能快速的了解目标应用程序的运行逻辑.还是决定转战xdebug,下面是一些简单的记录-真香 docker环境获取 为什么用docker来搭建调试环 ...

最新文章

  1. mysqldump定时备份数据库
  2. java的动态代理机制详解
  3. tensorflow学习笔记五:mnist实例--卷积神经网络(CNN)
  4. Apache Flink 零基础入门(四)Flink开发批处理应用程序
  5. jzoj1753-锻炼身体【单调队列】
  6. jasperreport转成html,JasperReport chart导出HTML不能显示chart图
  7. AI前沿 | Gartner曲线5大趋势:传感和移动、超能人类、自动机器人、高级人工智能…...
  8. 一份深度学习相关的面试题
  9. 【SpringBoot 】SpringBoot注解详解
  10. PLSA隐变量主题模型的公式推导解惑
  11. 材价看板(1)- 如何建立你的第一个kanban,看看这些暴露的问题你们有没有?...
  12. [HNOI2013] 切糕
  13. Atitit 软件 开发 与互联网发展趋势 与一些原则 潮流就是社区化 o2o 各种服务化 xaas ##--------信息化建设的理念 1.1.兼容性(不同版本与项目兼容性有利
  14. 如何让“后浪”热爱工作,来自“前浪”的十大拷问
  15. 数据结构c语言版陈越,数据结构 陈越
  16. 计算机数字音乐合成技术 fm,● 计算机数字音乐合成技术主要有(13)两种方式,其中使用(14)合成的音乐,其音质更好。(13)A. FM和AM - 扁豆云问答...
  17. MISC中图片隐藏文件分离
  18. python京东注册账号_玩转京东支付(python)
  19. 软件开发模型之迭代模型
  20. windows cmd 添加路由命令

热门文章

  1. vc6.o--fatal error C1010错误的解决
  2. 160 - 35 cupofcoffe.1
  3. redis 备份导出rdb_Redis数据迁移利器之redisshake
  4. 汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式)
  5. 按钮旁边加一个提示_地铁站的那些“红色按钮”,你知道是干啥用的吗?乱按可能被拘留...
  6. uva 1631——Locker
  7. 198. 打家劫舍 golang 动态规划 数组越界
  8. Unity(一)必然事件
  9. java小程序小游戏代码贪吃蛇,附高频面试题合集
  10. 【微信小程序】使用Hystrix的插件机制