想用 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 : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : 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=) 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 ] 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=) 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 常用文件的操作命令

利用 Docker 搭建单机的 Cloudera CDH 以及使用实践的更多相关文章

  1. 利用Docker搭建本地https环境的完整步骤

    利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有 ...

  2. 利用 Docker 搭建 IPFS 私有网络

    利用 Docker 搭建 IPFS 私有网络 本文原始地址:https://sitoi.cn/posts/40630.html 下载项目 项目地址:https://github.com/Sitoi/p ...

  3. 利用Docker搭建开发环境

    一. 前言 随着平台的不断壮大,项目的研发对于开发人员而言,对于外部各类环境的依赖逐渐增加,特别是针对基础服务的依赖.这些现象导致开 发人员常常是为了简单从而直接使用公有的基础组件进行协同开发,在出现 ...

  4. ubuntu14.04环境下利用docker搭建solrCloud集群

    在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器 ...

  5. Docker入门详解——安装docker并利用docker搭建lnmp

    首先我们需先安装docker环境,这个比较简单,以centos7为例 docker在centos7上安装需要系统内核版本3.10+,可以通过uname -r查看内核版本号,如果版本不符请自行查阅资料更 ...

  6. 利用docker搭建RTMP直播流服务器实现直播

    一.rtmp服务器搭建 环境: centos 7.* 1.先安装docker(省略) 2.下载docker容器 docker pull alfg/nginx-rtmp 3.运行容器(记得打开防火墙端口 ...

  7. 单台服务器-利用docker搭建Redis哨兵集群模式

    前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...

  8. 利用docker搭建rtmp服务器(1)

    以后的项目里面可能需要用到直播,所以就先看看 本来想在自己MAC上搭建nginx的,后来怕把自己的机子搞乱,刚好就学习了下docker,感觉docker强大就在于是一个操作系统软件的版本管理系统,可以 ...

  9. 利用docker搭建ubuntu+nginx+PHP容器

      环境:操作系统(Ubuntu  16.04 64位); php7.1;  nginx/1.14.0   基础环境准备: 整体思路:docker pull一个ubuntu镜像,然后在容器中安装ngi ...

随机推荐

  1. [python] A*算法基于栅格地图的全局路径规划

    # 所有节点的g值并没有初始化为无穷大 # 当两个子节点的f值一样时,程序选择最先搜索到的一个作为父节点加入closed # 对相同数值的不同对待,导致不同版本的A*算法找到等长的不同路径 # 最后c ...

  2. While 循环语句

    Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句... 执行语句可以是单个语句也可 ...

  3. javascript中数组化的一般见解

    javascript中数组化的一般见解,数组化浏览器中存在许多类数组对象,往往对类数组操作比较麻烦,没有数组那些非常方便的方法,在这种情况下,就有了数组化方法. 数组化的一般方法 1.第一种也是我们最 ...

  4. 008_使用pyenv进行py开发环境管理

    一. 安装Python 绝大多数Python入门书籍,都会介绍如何安装Python,然而,本书要介绍一种全新的安装方式.使用pyenv来安装并管理我们的环境. pyenv简介 由于Python的依赖是 ...

  5. Linux下简单的缓冲区溢出

    缓冲区溢出是什么? 科班出身,或者学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持 ...

  6. jvm 年轻代、年老代、永久代

    关键字约定 Young generation –>新生代    Tenured / Old Generation –>老年代    Perm Area –>永久代 年轻代: 所有新生 ...

  7. Python+Pycharm—学习1—封装&导入

    一.封装 目的: 写了一个复杂功能的实现,下次有相同的需求时可以直接导入这个包来使用.就可以达到复用的目的了.通俗的来讲就是打包.(以下用四则运算举例) 方案: 1.1.新建python工程,新建一个 ...

  8. # 20175329 2018-2019-2 《Java程序设计》第一周学习总结

    教材学习内容总结 ·通过教材学习了如何安装JAVA ·在安装JAVA后对其环境变量的设置 ·第一次接触并手打出JAVA语言## 教材学习中的问题和解决过程- 问题1:在环境变量设置中不懂path cl ...

  9. C语言中数组变量和指针变量

    指针变量为什么需要类型? 数组变量和指针变量在使用sizeof时不同,sizeof(数组变量)是数组长度,sizeof(指针变量)是存储int的字节长度4或者8(64bit). 数组变量在参数传递中, ...

  10. React-记connect的几种写法

    第一种 最普通,最常见,delllee和官网第写法. import React, { Component } from 'react'; import {connect} from 'react-re ...