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

利用 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控制台clouderacloudera
hueclouderacloudera
mysqlrootcloudera

拉取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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端有用JavaScript技巧

数组去重 var arr [1, 2, 3, 3, 4];console.log(...new Set(arr))// [1, 2, 3, 4] 数组和布尔值 有时我们需要过滤数组中值为 false 的值. 例如(0, undefined, null, false) var myArray [1, 0 , undefined, null, false];myArray.filter(Boolean);//[1] 合并对象 const page…

还没吃透内存缓存LruCache实现原理的看这篇文章,面试必会

前言 这篇文章主要是分享今年上半年的面试心得&#xff0c;现已就职于某大厂有三个月了&#xff0c;近期有很多公司均已启动秋招&#xff0c;也祝大家在 2020 的下半年面试顺利&#xff0c;获得理想的offer&#xff01; 之前找工作的那段时间感想颇多&#xff0c;总结一点面试…

fastjson反序列化漏洞原理及利用

重要漏洞利用poc及版本 我是从github上的参考中直接copy的exp&#xff0c;这个类就是要注入的类 import java.lang.Runtime; import java.lang.Process; public class Exploit { public Exploit() { try{ // 要执行的命令 String commands "calc.exe"; Process pc …

这个回答让我错失offer!offer拿到手软

开头 每到“金三银四”的季节&#xff0c;总人很多人去寻找名叫“面经”一样的东西&#xff0c;其实就是一个个具体的题目&#xff0c;然后临阵磨枪&#xff0c;去“背”答案&#xff0c;如果一直是这样的话&#xff0c;我相信你的能力不会有任何提高&#xff0c;即使工作三年…

Spark Windows

本文主要是讲解Spark在Windows环境是如何搭建的 一、JDK的安装 1、1 下载JDK 首先需要安装JDK&#xff0c;并且将环境变量配置好&#xff0c;如果已经安装了的老司机可以忽略。JDK&#xff08;全称是JavaTM Platform Standard Edition Development Kit&#xff09;的安装&…

ts

ts文件中使用以下注释来临时忽略规则出现的错误。如在定义变量是为定义类型就报错误 // tslint:disable——忽略该行以下所有代码出现的错误提示// tslint:enable——当前ts文件重新启用tslint// tslint:disable-line——忽略当前行代码出现的错误提示// tslint:disable-next-l…

这个回答让我错失offer!成功收获美团,小米安卓offer

前言 我们移动开发程序员应该首先明白一个要点&#xff0c;能够学习的东西可以区分为『知识』和『技能』。 知识&#xff0c;就是你知道就知道、不知道就不知道的东西&#xff0c;比如『计算机系统中一个字节是包含8个bit』&#xff0c;你知道了之后就算掌握了。 技能&#…

vue 双数据绑定原理

Vue的双向数据绑定原理是什么&#xff1f; 答&#xff1a;vue.js 是采用数据劫持结合发布者-订阅者模式的方式&#xff0c;通过Object.defineProperty()来劫持各个属性的setter&#xff0c;getter&#xff0c;在数据变动时发布消息给订阅者&#xff0c;触发相应的监听回调。 具…

Java lamda表达式快速分组

public class ProductDto {private long month;private String cate;private double count;} 分组 Map<String,List<ProductDto>> categoryMap alllist.getValue().stream().collect(Col lectors.groupingBy(ProductDto::getCate));求和 Double sumCount catego…

这么香的技术还不快点学起来,不吃透都对不起自己

大家应该看过很多分享面试成功的经验&#xff0c;但根据幸存者偏差的理论&#xff0c;也许多看看别人面试失败在哪里&#xff0c;对自己才更有帮助。 最近跟一个朋友聊天&#xff0c;他准备了几个月&#xff0c;刚刚参加完字节跳动面试&#xff0c;第二面结束后&#xff0c;嗯&…

Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的

前言 用c#开发的时候&#xff0c;新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数&#xff0c;如Awake,Start, Update, OnDestroy等。 在相应的方法中实现游戏逻辑&#xff0c;引擎会适时调用。 而Lua在这里做为c#的一个外延语言&#xff0c;自然是不受…

这么香的技术还不快点学起来,含BATJM大厂

前言 北京字节跳动科技有限公司成立于2012年3月&#xff0c;是最早将人工智能应用于移动互联网场景的科技企业之一。其独立研发的“今日头条”客户端&#xff0c;开创了一种全新的新闻阅读模式。 我一直很向往这样有创新精神&#xff0c;并做出了巨大成果的大公司&#xff0c…

.net Core把一个list集合里面的所有字段的数值汇总

前言&#xff1a;此随笔仅供自己学习&#xff0c;如有不足还请指出 在很多时候&#xff0c;得到一个list集合&#xff0c;需要把里面的数据汇总&#xff0c;但我又不想写那么多循环&#xff0c;于是去.net core 官方文档找有没有相关方法&#xff0c;很可惜我没有找到&#xff…

openshift for linux

安装openshift 1、下载地址&#xff1a; https://github.com/openshift/origin/releases 3.11下载&#xff1a; https://github.com/openshift/origin/releases/tag/v3.11.0 https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-server-v3.11…

这些Android高级必会知识点你能答出来几个?含BATJM大厂

前言 首先介绍一下自己&#xff0c;计算机水本&#xff0c;考研与我无缘。之前在帝都某公司算法部实习&#xff0c;公司算大公司吧&#xff0c;然而个人爱好偏开发&#xff0c;大二的时候写个一个app&#xff0c;主要是用各种框架。 一、掌握架构师筑基必备技能 二、掌握Andr…

Docker kafka

阅读目录 一、下载镜像二、先启动zookeeper三、启动kafka四、创建一个topic&#xff08;使用代码次步可省略&#xff09;五、kafka设置分区数量六、python代码回到顶部 一、下载镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 回到顶部 二、先启…

这些年Android面试的那些套路,社招面试心得

前言 说不焦虑其实是假的&#xff0c;因为无论是现在还是最近几年&#xff0c;很早就有人察觉Android开发的野蛮生长时代已经过去。过去的优势是市场需要&#xff0c;这个技术少有人有&#xff0c;所以在抢占市场的时候&#xff0c;基本上满足需要就已经可以了。但是现在&…

flask第一章:项目环境搭建

windows环境pycharmpython3 1、命令提示窗口 1&#xff09;创建项目目录&#xff1a;mkdir myblog 2&#xff09;cd myblog 3&#xff09;创建虚拟环境&#xff1a;python -m venv myvenv 4&#xff09;激活虚拟环境&#xff1a;venv\Scripts\activate 5&#xff09;安装flask&…

windows docker 空出C盘 迁移到其他盘

下面是操作方法&#xff1a; 首先关闭docker 关闭所有发行版&#xff1a;wsl --shutdown 将docker-desktop-data导出到D:\SoftwareData\wsl\docker-desktop-data\docker-desktop-data.tar&#xff08;注意&#xff0c;原有的docker images不会一起导出&#xff09;wsl --expo…

安卓开发入门到精通!免费Android高级工程师学习资源,系列篇

前言 2017年进大学开始接触Android&#xff0c;从刚开始接触就不断地听到Android市场饱和&#xff0c;工作难找等消息。虽然当时也非常迷茫&#xff0c;不过由于第一次深入接触编程语言&#xff0c;再加上自己的一点兴趣&#xff0c;就一直坚持下来了。 到现在要毕业了&#…