超简单的CDH6部署和体验(单机版)
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
为什么会超简单
借助ansible简化了CDH6部署工作的大部分内容,也降低了手工操作失误的概率,今天实战的内容,是在一台安装了ansible的电脑上(苹果或Linux操作系统)运行ansible脚本,远程操作一台CentOS服务器,在上面部署CDH6,并操作验证本次部署是否成功。
ansible学习
如果您想了解ansible,请参考《ansible2.4安装和体验》
为什么要部署单机版CDH6
主要是用来做为大数据技术的学习和开发的环境,并不适合生产;
实战简述
本次实战内容:部署、启动、验证,整个过程如下图所示:

全文大纲
本文由以下章节组成:
- 环境信息;
- 下载文件;
- 文件摆放;
- CDH机器设置;
- ansible参数设置;
- 部署;
- 重启CDH服务器
- 启动;
- 设置;
- 修复问题;
- 体验;
环境信息
本次实战的操作过程如下图所示,安装ansible2.9版本的MabBook Pro电脑作为ansible服务器,执行playbook脚本,对一台CentOS服务器进行远程操作,完成CDH6的部署和启动:

上图蓝色背景的电脑,可以是苹果操作系统,也可以是Linux操作系统,黄色背景的电脑要用来运行CDH6,必须是CentOS7.7操作系统(实在对不起,我这条件有限,别的系统没有试过)
整个实战涉及的环境版本信息如下:
- ansible服务器:macOS Catalina 10.15(实测用CentOS7.7也成功)
- CDH服务器:CentOS Linux release 7.7.1908
- cm版本:6.1.0
- parcel版本:6.1.1
- jdk版本:8u191
下载文件(ansible服务器)
本次实战用到的所有文件如下表所示:
| 编号 | 文件名 | 简介 |
|---|---|---|
| 1 | jdk-8u191-linux-x64.tar.gz | Linux版的jdk安装包 |
| 2 | mysql-connector-java-5.1.34.jar | mysql的JDBC驱动 |
| 3 | cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm | cm的server安装包 |
| 4 | cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm | cm的daemon安装包 |
| 5 | cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm | cm的agent安装包 |
| 6 | CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel | CDH应用离线安装包 |
| 7 | CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel.sha | CDH应用离线安装包sha验证码 |
| 8 | hosts | ansible用到的远程主机配置,里面记录了CDH6服务器的信息 |
| 9 | ansible.cfg | ansible用到的配置信息 |
| 9 | ansible.cfg | ansible用到的配置信息 |
| 10 | cdh-single-install.yml | 部署CDH时用到的ansible脚本 |
| 11 | cdh-single-start.yml | 初次启动CDH时用到的ansible脚本 |
上述11个文件的下载地址:
- jdk-8u191-linux-x64.tar.gz:Oracle官网可下,另外我将jdk-8u191-linux-x64.tar.gz和mysql-connector-java-5.1.34.jar一起打包上传到csdn,您可以一次性下载,地址:https://download.csdn.net/download/boling_cavalry/12098987
- mysql-connector-java-5.1.34.jar:maven中央仓库可下,另外我将jdk-8u191-linux-x64.tar.gz和mysql-connector-java-5.1.34.jar一起打包上传到csdn,您可以一次性下载,地址:https://download.csdn.net/download/boling_cavalry/12098987
- cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm:https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm
- cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm:https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm
- cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm:https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm
- CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel:https://archive.cloudera.com/cdh6/6.1.1/parcels/CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel
- CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel.sha:https://archive.cloudera.com/cdh6/6.1.1/parcels/CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel.sha256 (下载完毕后,将扩展名从.sha256改为.sha)
- hosts、ansible.cfg、cdh-single-install.yml、cdh-single-start.yml:这四个文件都保存在我的GitHub仓库,地址是:https://github.com/zq2599/blog_demos ,这里面有多个文件夹,上述文件在名为ansible-cdh6-single的文件夹中,如下图红框所示:

文件摆放(ansible服务器)
如果您已经下载好了上述11个文件,请按照如下位置摆放,这样才能顺利完成部署:
- 在家目录下新建名为playbooks的文件夹:mkdir ~/playbooks
- 把这四个文件放入playbooks文件夹:hosts、ansible.cfg、cdh-single-install.yml、cdh-single-start.yml
- 在playbooks文件夹里新建名为cdh6的子文件夹;
- 把这七个文件放入cdh6文件夹(即剩余的七个):jdk-8u191-linux-x64.tar.gz、mysql-connector-java-5.1.34.jar、cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm、cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm、cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm、CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel、CDH-6.1.1-1.cdh6.1.1.p0.875250-el7.parcel.sha
- 摆放完毕后目录和文件情况如下图,再次提醒,文件夹playbooks一定要放在家目录下(即:~/):

CDH服务器设置
本次实战中,CDH服务器hostname是deskmini,IP地址是192.168.50.134,需要做以下操作:
- 请确保CDH服务器能SSH登录(用户名+密码);
- SSH登录到部署CDH的机器;
- 检查/etc/hostname文件是正确,如下图:

- 修改/etc/hosts文件,将自己的IP地址和hostname配置上去,如下图红框所示(事实证明这一步很重要,如果不做可能导致在部署时一直卡在"分配"阶段,看agent日志显示agent下载parcel的进度一直是百分之零):

ansible参数设置(ansible服务器)
ansible参数设置的操作设置很简单,就是把部署CDH的机器信息配置好即可,包括IP地址、登录账号、密码等,修改~/playbooks/hosts文件,内容如下所示,您需要根据自身情况修改deskmini、ansible_host、ansible_port、ansible_user、ansible_password:
[cdh_group]
deskmini ansible_host=192.168.50.134 ansible_port=22 ansible_user=root ansible_password=888888
部署(ansible服务器)
- 进入~/playbooks目录;
- 检查ansible远程操作CDH服务器是否正常,执行命令ansible deskmini -a "free -m",正常情况下显示CDH服务器的内存信息,如下图:

- 执行此命令开始部署:ansible-playbook cdh-single-install.yml
- 整个部署过程涉及在线安装、传递文件等耗时的操作,因此请耐心等待(半小时左右),我在部署期间遭遇网络问题导致失败退出,待网络正常后再重新执行上述操作即可,ansible保证了操作的幂等性;
- 部署成功如下图所示:

重启CDH服务器
由于修改了selinux和swap的设置,需要重启操作系统才能生效,因此请重启CDH服务器;
启动(ansible服务器)
- 等待CDH服务器重启成功;
- 登录ansible服务器,进入~/playbooks目录;
- 执行此命令开始初始化数据库,然后启动CDH:ansible-playbook cdh-single-start.yml
- 启动完成输出如下信息:

设置(网页)
CDH已经启动,CDH服务器对外提供了web服务,可以通过浏览器来操作:
- 浏览器访问:http://192.168.50.134:7180 ,如下图,账号密码都是admin:

- 一路next,在选择版本页面选择60天体验版:

- 选择主机页面可见deskmini:

- 选择下图红框中的CDH版本,因为对应的离线包已经复制到CM的本地仓库,无需下载:

- 下载瞬间完成,等候分配、解压、激活:

- 选择服务的页面,我这里选择了Data Engineering,因为需要spark:

- 选择机器的页面,全选deskmini:

- 数据库设置页面,请和下图保持一致,数据库主机都是localhost,每个数据库的名称、用户名、密码都相同,分别是:hive、amon、rman、oozie、hue

- 参数设置页面,请根据磁盘情况适当调整存储路径,例如我的/home目录空间充足,这里都改到了/home目录下面:

- 等待启动完成:

- 等待启动完成后,如下图所示:

至此,所有服务启动完成,不过有两个小问题需要修复;
修复HDFS问题
- 服务整体情况如下图,HDFS服务有问题,点击红框中的图标:

- 点击下图红框位置:

- 故障详情如下图所示,属于常见的副本不足的问题:

- 如下图所示,修改HDFS的配置dfs.replication,从3改成1,然后保存更改:

- 重启服务:

- 经过上述设置,副本数已经调整为1,但是已有文件的副本数还没有同步,需要重新做设置,SSH登录到电脑deskmini上;
- 执行命令vi /etc/passwd,找到账号hdfs的配置,如下图红框所示,/sbin/nologin这样的shell会导致切换到hdfs账号失败:

- 将上述红框中的内容改为/bin/bash,修改后如下图红框所示:

- 执行命令su - hdfs,即可切换到hdfs账号,此时执行以下命令即可完成副本数设置:
hadoop fs -setrep -R 1 /
- 服务已经全部正常了:

调整YARN参数避免spark-shell启动失败
- YARN默认给容器分配的内存过小,导致启动spark-shell失败,需要调整YARM相关的内存参数:

- 在YARN的配置页面,调整yarn.scheduler.maximum-allocation-mb和yarn.nodemanager.resource.memory-mb这两个参数的值,我这里将这个两个参数的值都改成8G(请按照自己电脑实际硬件配置来调整),如下图:

- 重启YARN:

- 执行spark-shell命令之前,先执行命令su - hdfs切换到hdfs账号;
- 这次终于成功进入spark-shell交互模式:

至此,CDH6的部署、启动、设置都已经完成,接下来体验一下大数据服务;
体验HDFS和Spark
接下来运行一个Spark任务,经典的WordCount:
- 准备一份文本文件,里面是英文内容,您可以下载这个文件:https://raw.githubusercontent.com/zq2599/blog_demos/master/files/GoneWiththeWind.txt
- 登录SSH,切换到hdfs账号;
- 创建HDFS文件夹:
hdfs dfs -mkdir /input
- 将文本文件上传到/input目录:
hdfs dfs -put ./GoneWiththeWind.txt /input
- 执行命令spark-shell,启动一个worker;
- 输入以下命令,即可完成一次WorkCount任务,192.168.50.134是deskmini的IP地址:
sc.textFile("hdfs://192.168.50.134:8020/input/GoneWiththeWind.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://192.168.50.134:8020/output")
- 执行完毕后,下载结果文件:
hdfs dfs -get /output/*
- 上述命令将spark任务的结果文件part-00000、part-00001下载到本机,用vi命令查看文件,如下图,可见WorkCount执行成功:

- 在浏览器上查看历史任务,地址是:http://192.168.50.134:18088 ,可见此次任务的详情:

至此,CDH6的部署、设置、体验都已经完成,如果您正在搭建自己的学习或者开发环境,希望本文能给您一些参考。
深度定制
整个实战虽然避免了传统部署过程中的大量手动操作,但弊端也很明显:所有路径、文件名、服务版本都是固定的,不能做任何设置,虽然ansible也支持变量,但是如果变量太多也会给您带来困扰,所以,如果您有修改版本或路径的需求,建议您自行修改cdh-single-install.yml、cdh-single-start.yml的内容,所有文件和版本信息都在里面。
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
超简单的CDH6部署和体验(单机版)的更多相关文章
- 超简单的 Docker部署 SpringBoot项目 步骤
很久之前就用过,一直没有好好写篇博客,今天就总结一下 创建一个 SpringBoot项目 创建一个SpringBoot项目并打成jar包,结构如图 编写 Dockerfile文件 FROM java: ...
- 第一篇 UEditor入门部署和体验
UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. UEditor富文本编辑器,轻量, ...
- 超简单的NDK单步调试方法
令人兴奋的是,ADTr20已经支持JNI单步调试,再也不需要如上这么麻烦的步骤了 你现在需要做的只需以下2步: 1.使用ndk-build编译时,加上如下参数NDK_DEBUG=1,之后生成so文件之 ...
- 这些优化 Drupal 网站速度的超简单办法,你忽略了多少?
“怎么样能让我的 Drupal 网站更快一些?”是我们最常遇到的一个问题.站点速度确实非常重要,因为它会影响你的 SEO排名效果.访客是否停留以及你自己管理网站所需要的时间. 今天我们就来看看那些通过 ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- 超简单的全新win10安装
1.准备工作! 这里说一下需要装系统的东西: 至少8G的U盘或内存卡 一台Windows电脑 在要安装的电脑上至少有16G的空间,最好至少64G. 2.现成电脑下载文件(已经有重装系统U盘跳过这一步) ...
- 超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本
超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本 前言 上一篇自动化测试,全面且详细的介绍了从零开始到发布版本的步骤,这是传统的方式,本次为大家带来的是如何在5分钟内使用上d ...
- 超简单!asp.net core前后端分离项目使用gitlab-ci持续集成到IIS
现在好多使用gitlab-ci的持续集成的教程,大部分都是发布到linux系统上的,但是目前还是有很大一部分企业使用的都是windows系统使用IIS在部署.NET应用程序.这里写一下如何使用gitl ...
- 超简单集成华为HMS ML Kit文本识别SDK,一键实现账单号自动录入
前言 在之前的文章<超简单集成华为HMS Core MLKit通用卡证识别SDK,一键实现各种卡绑定>中我们给大家介绍了华为HMS ML Kit通用卡证识别技术是如何通过拍照自动识别卡 ...
随机推荐
- python格式化输出当前时间
import time def get_now_time(): now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.tim ...
- Dockerfile使用,示例
1.dockerfile介绍 镜像分类: 基础镜像:例如centos.Ubuntu.alpine 环境镜像:例如Java.php.go 项目镜像:将项目与环境镜像打包一起 2.Dockerfile常用 ...
- 图灵机器人api的使用方法含微信版本和网页版
访问图灵机器人官网http://www.tuling123.com/ 注册一个新的机器人账号 注册成功后转到主页 点击我的机器人>创建机器人>微信机器人 填写基本信息 点击微信介入> ...
- 转载:关于Python3中venv虚拟环境
https://www.cnblogs.com/zhaof/p/7299025.html
- Vue 分支循环
分支循环 在Vue中,分支循环也是使用标签属性指令完成的,这一点与后端模板语法不太相同. v-for 下面是通过v-for进行循环,不光可以拿到元素本身,也可以拿到索引值. 如果数据是对象类型,则可以 ...
- 基础篇:深入解析JAVA反射机制
目录 反射的概念 获取Class的三种方法 JAVA反射API 反射机制应用的场景 反射和JDK动态代理 欢迎指正文中错误 关注公众号,一起交流 参考文章 反射的概念 java的放射机制:在程序运行时 ...
- linux(centos)环境下安装rabbitMq
1.由于rabbitMq是用Erlang语言写的,因此要先安装Erlang环境 下载Erlang :http://www.rabbitmq.com/releases/erlang/erlang-19. ...
- 修改默认配置文件.android.gradle.androidstudio到其他目录
.android 这个文件夹主要是用来存放模拟器的,是占用空间最大的一个,如果你没有使用它的模拟器,可以直接把这个文件夹删除.因为我建立了两个x86的模拟器,吃掉了我20G的空间.果断搬走. 复制当前 ...
- EM 算法 Expectation Maximization
- 【Python】类
初探类 类定义与函数定义( def语句 )一样必须被执行才会起作用 调用 x.f() 其实就相当于 MyClass.f(x) 补充说明 数据属性会覆盖掉具有相同名称的方法属性 命名方法 方法名称使用大 ...