Cloudera Manager CDH

0 阅读37分钟

大数据集群搭建及管理问题

提出问题

需要搭建1000台服务器的集群,其中集群包含Hive、Hbase、Flume、Kafka、Spark等集群,需要多长时间搭建好?

思考

搭建四台集群与搭建1000台集群的区别?比较相似

解决问题(以搭建HDFS为例)

集群环境规划

首先我们需要进行集群基础环境的规划:比如每台节点的网络ip规划,节点时间同步,每台节点的名称,每台节点安装jdk,节点之间配置免密等

其次需要进行Hadoop的集群规划:比如搭建HDFS的版本,搭建的HDFS模式,搭建单机模式?还是完全分布式模式?还是HA的完全分布式模式?搭建HDFS是否需要依赖?比如zookeeper

最后对节点进行规划:比如哪些节点搭建zookeeper?那些节点搭建Hadoop集群等

实际搭建步骤

  • 基础环境准备,每台节点安装jdk,hosts配置,免密
  • 规划集群节点 zookeeper,hadoop namenode datanode ...,选择各个技术的版本
  • 配置并安装zookeeper
  • 配置Hadoop 安装包
  • 分发到1000台节点上,完成hadoop搭建

如果需要安装其它组件,也是同样的步骤,例如,继续安装Hive,选择Hive版本 -> 选择节点 -> 在一台节点配置 -> 分发到其他节点...

存在的问题

  • 各个大数据技术包的下载。升级复杂
  • 配置文件多节点之间分发。部署过程复杂
  • 大数据技术各个版本的匹配兼容。开源版本有bug问题,版本对应混乱,兼容性差,集群升级不方便
  • 集群监控麻烦;各服务状态、内存、磁盘、IO等。日志查看麻烦;去节点查看详细内容,安全性差

CDH介绍

CDH简介

目前Hadoop发行版非常多,除了原生的Apache Hadoop外,还有Cloudera发行版(CDH)、Hortonworks发行版(2018年与Cloudera公司已经合并),MapR的MapR产品、AWS(Amazon Web Services)的EMR(Elastic MapReduce)等。目前市场份额占比最高的是前三家。所有这些发行版都是基于Apache Hadoop衍生出来的,之所以有这么多版本,是由于Apache Hadoop的开源协议决定的:任何人可以对其进行修改,并作为开源或者商业产品发布或者销售

Apache Hadoop 版本: 最原始的版本,所有的发行版都是基于这个版本改进,也称为社区版Hadoop

Cloudera版本:Cloudera’s Distribution Including Apache Hadoop ,简称CDH

Hortonworks版本:Hortonworks Data Platform ,简称HDP

对于国内的用户来说,CDH版本使用最多。CDH基于Web的用户界面,支持大多数Hadoop的组件,包括:HDFS、MapReduce、Hive、Hbase、Zookeeper等组件,并且简化了大数据平台的安装和使用,使集群方便管理

Cloudera 的CDH和Apache原生的Hadoop的区别如下:

  1. CDH对版本的划分非常清晰,CDH共有6个版本,前四个版本已经不再更新,目前更新的两个版本为CDH5和CDH6,CDH4基于Hadoop2.0,CDH5基于Hadoop2.2-2.6,CDH6基于Hadoop3.0,而原生的Apache Hadoop版本比较多,CDH相比原生Apache Hadoop做到版本统一管理

  2. CDH相比原生Hadoop 在兼容性、安全性、稳定性上有较大改善,对Hadoop一些bug进行了修复,支持Kerberos安全认证,更新速度快且CDH文档完善清晰

  3. CDH支持yum包,rpm包,tar包,Cloudera Manager几种方式安装,原生的Apache Hadoop只支持tar包安装

  4. 提供了部署、安装、配置工具,大大提高了集群部署的效率,可以在短时间内部署好集群

  5. 运维简单,提供了管理、监控、诊断、配置修改工具,管理配置方便,定位问题快速,准确,使运维工作简单高效

CDH集成组件

CDH集成了数据整合、存储、计算、搜索、分析等大数据相关技术组件,如下图

image.png

CDH中文官网: cn.cloudera.com/

CDH英文官网: www.cloudera.com

CDH官方文档: docs.cloudera.com/documentati…

CDH界面

image.png

CDH架构

image.png

Server: Cloudera Manager 的核心是Cloudera Manager Server, Server 管理控制台服务和托管应用程序逻辑,负责软件的安装、配置、服务的启动与关闭及管理集群

Agent: 安装在每台主机上。Agent负责进程的启动和停止,解压配置,触发安装及监控主机

Management Service: 由一组角色组成的服务,这些角色执行各种监视,警报和报告功能

DataBase: 存储配置及监控信息

ClouderaRepository: Cloudera Manager 分发软件的存储库

Clients: 与Server交互的接口,有两部分,Admin Console: 管理员web界面版。Api: 用于开发者创建Cloudera Manager程序

Cloudera Manager安装

准备

docs.cloudera.com/documentati… 可以在这里查看环境要求

Cloudera Enterprise 6.3. x 支持的操作系统

Operating SystemVersion (bold=new)
RHEL-compatible
RHEL/CentOS/OL with RHCK kernel7.9, 7.8, 7.7, 7.6, 7.5, 7.4, 7.3, 7.26.10, 6.9
Oracle Linux (OL)7.6, 7.4, 7.3, 7.2 (UEK default)6.10 (UEK default)
SUSE Linux Enterprise Server
SLES12 SP5, 12 SP4*, 12 SP3
Ubuntu
Ubuntu18.04 LTS (Bionic)16.04 LTS (Xenial)

支持的JDK

Cloudera Enterprise VersionSupported Oracle JDKSupported OpenJDK
5.3 -5.151.7, 1.8none
5.16 and higher 5.x releases1.7, 1.81.8
6.01.8none
6.11.81.8
6.21.81.8
6.31.81.8, 11.0.3 or higher

经过测试和推荐的Oracle JDK 8版本

Oracle JDK VersionNotes
1.8u181Recommended / Latest version tested
1.8u162Recommended
1.8u141Recommended
1.8u131Recommended
1.8u121Recommended
1.8u111Recommended
1.8u102Recommended
1.8u91Recommended
1.8u74Recommended
1.8u31Minimum required

经过测试和推荐的OpenJDK 8版本

OpenJDK VersionNotes
1.8u212Recommended / Latest version tested
1.8u181Minimum required

节点规划

ipCPU内存硬盘角色主机名
192.168.91.212C6G200GBServer,Agentcm1
192.168.91.222C2G200GBAgentcm2
192.168.91.232C2G200GBAgentcm3
# 所有节点
# hosts 配置
cat >> /etc/hosts << "EOF"
192.168.91.41  cm1
192.168.91.42  cm2
192.168.91.43  cm3
EOF

# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

# 关闭selinux,SELinux就是Security-Enhanced Linux的简称,安全加强的linux。传统的linux权限是对文件和目录的owner, group和other的rwx进行控制,而SELinux采用的是委任式访问控制,也就是控制一个进程对具体文件系统上面的文件和目录的访问,SELinux规定了很多的规则,来决定哪个进程可以访问哪些文件和目录。虽然SELinux很好用,但是在多数情况我们还是将其关闭,因为在不了解其机制的情况下使用SELinux会导致软件安装或者应用部署失败
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

# 时间同步配置,最小化安装系统需要安装ntpdate软件
yum -y install ntpdate
echo "0 */1 * * * ntpdate time1.aliyun.com" >> /var/spool/cron/root
# 启动ntpdate,并设置开机自启
systemctl enable ntpdate && systemctl start ntpdate

# 查看现有时区
ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Sep 13  2023 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
# 时区如果不是Shanghai,需要指向上海
# 删除现有时区
rm -f /etc/localtime
# 修改为上海时区
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

jdk安装

www.oracle.com/pe/java/tec… 这个页面可以找到Oracle JDK 8的相关版本下载,这里下载的是jdk-8u181-linux-x64.rpm,需要现在Oracle官网上注册才可以下载

# 所有节点
rpm -ivh jdk-8u181-linux-x64.rpm

安装第三方依赖包

# 在每台节点上安装ClouderManager需要的第三方依赖包,每台节点执行如下命令
yum install -y chkconfig bind-utils psmisc cyrus-sasl-plain cyrus-sasl-gssapi portmap /lib/lsb/init-functions httpd mod_ssl openssl-devel python python-psycopg2 MySQL-python libxslt zlib sqlite fuse fuse-libs redhat-lsb

以上可以在一个节点配置好,然后克隆出另外两个节点

免密配置

在CDH中需要任意两个节点之间都可以免秘钥登录。节点两两免秘钥的根本原理如下:假设A节点需要免秘钥登录B节点,只要B节点上有A节点的公钥,那么A节点就可以免密登录当前B节点。

首先需要在每台节点上安装ssh客户端(yum -y install openssh-clients),否则不能使用ssh命令(最小化安装Liunx,默认没有安装ssh客户端),这里在Centos7系统中默认已经安装,此步骤可以省略

# 配置所有节点相互免密,在所有节点上执行如下命令,给当前节点创建公钥和私钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 将cm1、cm2、cm3的公钥copy到cm1上,这样这三台节点都可以免密登录到cm1
# 在所有节点上执行
ssh-copy-id cm1
# 现在所有节点都可以免密登录cm1了,再将cm1节点上~/.ssh/authorized_keys文件拷贝到cm2、cm3各节点的~/.ssh/目录下,即可实现所有节点之间相互免密
# cm1节点执行
scp ~/.ssh/authorized_keys cm2:~/.ssh/
scp ~/.ssh/authorized_keys cm3:~/.ssh/

# cm2、cm3,远程cm2和cm3还需要再输入一次yes
ssh cm2
ssh cm3

mysql安装

# cm1
# mysql5.7安装
# 下载离线包并解压
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar
tar xf mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar
# 使用rpm安装mysql,rpm包有依赖关系,安装的顺序如下(--force:强制安装 --nodeps:不检查环境依赖)
rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm --force --nodeps
# 删除rpm包
rm -f mysql-community*.rpm
# 默认mysqlL服务是关闭,需要启动mysql服务并设置开机自启
systemctl start mysqld && systemctl enable mysqld
# 登录mysql,修改密码,创建用户
grep 'temporary password' /var/log/mysqld.log
2024-04-29T06:13:58.383548Z 1 [Note] A temporary password is generated for root@localhost: SdhvRkY(u2Rs

mysql -uroot -p"SdhvRkY(u2Rs"
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Abc@1234';
use mysql;
truncate user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Abc@1234' WITH GRANT OPTION;
# 创建scm用户并授权
GRANT ALL PRIVILEGES ON *.* TO 'scm'@'%' IDENTIFIED BY 'Abc@1234' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;
# 修改MySQL服务端编码为utf8,然后重启服务
echo 'character-set-server=utf8' >> /etc/my.cnf
systemctl restart mysqld

ClouderaManager和CDH安装包下载

Cloudera Manager 6: docs.cloudera.com/documentati…

CDH6: docs.cloudera.com/documentati…

现在Cloudera Manager已经收费,不能免费下载了,需要自行下载,这里准备了cm6.3.1-redhat7.tar.gz包,里面主要包含Cloudera Manager的daemons、agent、server的rpm包

安装

# cm1,需要安装servers、daemons、agent
# 先将cm6.3.1-redhat7.tar.gz上传到cm1

tar xf cm6.3.1-redhat7.tar.gz
cd ~/cm6.3.1/RPMS/x86_64/
# 由于安装过程中会检查系统中的依赖包,如果没有会报错,可以安装时指定 --nodeps 不检查依赖关系
rpm -ivh cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
rpm -ivh cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
rpm -ivh cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm

# 将daemons和agent分发到cm2和cm3
for i in 2 3; do scp cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm cm$i:/root/;done
for i in 2 3; do scp cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm cm$i:/root/;done
# cm2和cm3,需要安装daemons、agent
rpm -ivh cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
rpm -ivh cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
# 所有节点,配置CM Agent的server host
# 修改"server_host=cm1"
sed -i 's/server_host=localhost/server_host=cm1/' /etc/cloudera-scm-agent/config.ini
# cm1

# 准备mysql-connector-java-5.1.26.jar包,并上传至cm1节点,注意这个jar包的版本不可以换,否则可能会出现问题
mkdir -p /usr/share/java/;cd ~
mv mysql-connector-java-5.1.26.jar /usr/share/java/mysql-connector-java.jar

# 初始化数据库,-h主机host,-u用户名,-p密码,--scm-host授权host,数据库类型,scm数据库,scm用户,scm密码
# 用于生成scm数据库配置文件,并在数据库创建用户和库,如果前面没有创建scm用户,-u可以使用root
/opt/cloudera/cm/schema/scm_prepare_database.sh -hcm1 -uscm -pAbc@1234 --scm-host=cm1 mysql scm scm Abc@1234

# 执行上面的脚本会生成一个db.properties,上面执行脚本时如果不指定-hcm1,这里生成com.cloudera.cmf.db.host=localhost
tail -6 /etc/cloudera-scm-server/db.properties
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=cm1
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.setupType=EXTERNAL
com.cloudera.cmf.db.password=Abc@1234

# 查看生成的库和用户
mysql -uroot -pAbc@1234

# 生成了scm库
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| scm                |
| sys                |
+--------------------+

use mysql;

# 查看生成的用户,'scm'@'%' 是安装mysql之后创建的,'scm'@'cm1' 是上面执行脚本时创建的,执行脚本时如果不指定--scm-host=cm1 会生成 'scm'@'localhost',由于scm用户已经提前创建好了,所以--scm-host选项可以不用指定,否则必须指定
select user,host from user where user='scm';
+------+--------+
| user | host   |
+------+--------+
| scm  | %      |
| scm  | cm1 |
+------+--------+

# 可以看到scm_prepare_database.sh脚本执行,只是创建配置文件、库、用户,这些也可以自己创建或修改,通过脚本执行,可以提前看看连接数据库有没有问题

# 退出mysql客户端
exit;

准备CDH Parcels本地源

# cm1,上传3个CDH文件到/opt/cloudera/parcel-repo目录
# 查看上传之后的文件
ll /opt/cloudera/parcel-repo
-rw-r--r-- 1 root root 2082186246 Apr 29 14:11 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
-rw-r--r-- 1 root root         40 Apr 29 14:11 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
-rw-r--r-- 1 root root      33887 Apr 29 14:12 manifest.json

启动CM Server、Agent

在Server节点启动ClouderaManager Server,分别在Agent节点启动ClouderaManager Agent

# cm1 节点上启动 Server 服务
systemctl start cloudera-scm-server

# cm1、cm2、cm3 节点上启动 Agent 服务
systemctl start cloudera-scm-agent

注意:Server启动比较慢,需要等待一会才能访问对应的web界面,可以查看启动日志,Sever的启动日志默认是"/var/log/cloudera-scm-server/cloudera-scm-server.log"。Agent的启动日志默认是"/var/log/cloudera-scm-agent/cloudera-scm-agent.log"。可以通过以上日志来检查启动中是否有错

Sever首次启动会自动创建表以及数据,不要立即关闭或重启,否则需要删除所有表及数据重新安装

至此,Cloudera Manager的安装完成

CDH安装

登录CM web界面

Cloudera Manager的webui界面登录地址为cm1:7180,默认的用户名和密码都是admin。输入完成后,点击登录

image.png

选择安装CDH的节点

登录之后,一直选择“继续”即可

image.png

image.png

选择Cloudera Express,点击“继续”,弹出页面后再点击“继续”

image.png

机器性能差的,这个页面需要等一会

image.png

image.png

弹出如下页面,该页面是为CDH指定主机,可以使用“模式”通配来选择主机,也可以选择“当前管理的主机”,这里“当前管理的主机”中有节点内容的原因正是由于之前我们在这三台节点配置过agent。如果未来集群增加机器,可以在新主机中搜索添加,后期会自动将agent安装到选中的新节点

这里我们选择“当前管理的主机”中的所有节点,点击“继续”

image.png

集群安装

选择CDH版本为CDH6.3.2,点击“继续”,如下图

image.png

点击“继续”之后,Cloudera Manager主节点会将下载好的CDH分发到各个Agent节点,此时可以在cm1,cm2,cm3节点上看到/opt/cloudera/ parcel-cache目录中有Cloudera Manager主节点传过来的CDH安装包,同时在完成传输之后,每个Agent节点还会将CDH安装包解压到/opt/cloudera/parcels路径下,此时界面显示如下(会显示正在下载解压)

image.png

点击“继续”,显示正在检查主机健康状况(稍等片刻,会自动跳转到这个页面)

image.png

image.png

点击检查结果,查看检查主机出现的问题

image.png

这里建议swappiness=10的时候表示最大限度使用物理内存。由于透明超大页面已知会导致意外的节点重新启动,可以在每台节点中执行如下命令,然后在当前页面"Inspect Hosts"后面点击“重新运行”即可规避这些警告,生产环境中不可以这样把警告规避掉

# 所有节点
# 默认是 30
echo 10 > /proc/sys/vm/swappiness
# 默认是 [always] madvise never
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 默认是 [always] madvise never
echo never > /sys/kernel/mm/transparent_hugepage/enabled

最后,点击“继续”,进入“集群设置”

image.png

集群设置

在进入的集群设置界面中,点击“自定义服务”,选择"HDFS"、"YARN"、"Zookeeper"进行安装,注意:这里提示还会安装Cloudera Management Service ,用于后期的监控、报告、事件和警报

image.png

image.png

点击“继续”,进入“角色分配”页面,显示的是Cloudera Manager自动划分的集群分配,当然这里也可以自己分配节点。如下图所示

image.png

接着点击“继续”,进入“审核更改页面”,在这里可以手动修改一些配置文件,如下图所示

image.png

接着点击“继续”,进入执行集群命令,启动各个组件页面,页面中可以看到各个组件的启动情况,当所有组件启动完成之后,如下图示

image.png

点击“继续”,完成集群设置

image.png

CDH主页面

image.png

ClouderaManager使用

CM中的名词术语

主机:host

机架:rack

服务:service;例如:Hadoop、MapReduce、spark

服务实例:service instance;激活的服务就叫服务实例

角色:role;服务中的角色,例如Yarn中的zookeeper节点,Spark中的Master节点

角色实例:role instance;分配的角色,就是角色实例

角色组:role group

主机模板:host template,可以用来给主机设置不同的角色

parcle: 就是CDH的安装包

静态服务池:static service pool

动态资源池:dynamic resource pool

集群管理

  1. 添加、删除集群
  2. 启动、停止、重启集群
  3. 重命名集群
  4. 全体集群配置
  5. 移动主机

主机管理

  1. 查看主机详细
  2. 主机检查
  3. 集群添加主机
  4. 分配机架
  5. 主机模板
  6. 维护模式
  7. 删除主机

服务管理

  1. 添加服务
  2. 对比不同集群上的服务配置
  3. 启动、停止、重启服务
  4. 滚动重启
  5. 终止客户端正在执行的命令
  6. 删除服务
  7. 配置最大进程数

资源管理

  1. 动态资源池
  2. 静态服务池

用户管理

安全管理

安装Hive

选择集群,添加Hive服务

image.png

image.png

添加服务向导

选择默认角色配置即可

image.png

点击“继续”之后,需要配置Hive依赖的mysql数据库,需要在cm1节点上连接mysql,执行创建数据库及分配权限语句

# cm1
mysql -uroot -pAbc@1234

create database hive DEFAULT CHARACTER SET utf8;
grant all on hive.* TO 'hive'@'%' IDENTIFIED BY 'Hive@1234';
flush privileges;
exit;

在弹出的页面中选择数据库,填写用户名及密码,点击“测试连接”,测试数据库连接成功后,点击“继续”

image.png

点击继续之后,设置hive的数据目录及端口,默认即可,点击继续之后等待Hive安装完成即可

image.png

image.png

oozie的安装

oozie是一个基于Hadoop的工作流引擎,也叫任务调度器,它以xml的形式写调度流程,可以调度mr,pig,hive,shell,jar,spark等。在工作中如果多个任务之间有依赖执行顺序要求,可以使用oozie来进行调度执行

选择集群,添加oozie服务

选择一个集群,搭建添加服务,选择“oozie”,点击“下一步”

image.png

image.png

添加服务向导

选择HDFS

image.png

选择节点,分配oozie角色

image.png

当点击“继续”后,需要给oozie配置数据库,需要在cm1节点上连接mysql,执行创建数据库及分配权限语句

# cm1
mysql -uroot -pAbc@1234

create database oozie DEFAULT CHARACTER SET utf8;
grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'Oozie@1234';
flush privileges;
exit;

在弹出的页面中选择数据库,填写用户名及密码,点击“测试连接”,测试数据库连接成功后,点击“继续”

image.png

在弹出的页面中,选择默认oozie使用的数据目录,默认即可,点击“继续”

image.png

等待服务向导完成,点击“继续”->“完成”,完成oozie安装

image.png

Hue介绍及安装

HUE是一个开源的Apache Hadoop UI系统,早期由Cloudera开发,它是基于Python Web框架Django实现,后来贡献给开源社区。它包括3个部分hue ui,hue server,hue db。通过使用Hue我们可以通过浏览器方式操纵Hadoop集群,查看修改hdfs的文件,管理hive的元数据,运行Sqoop,编写Oozie工作流等大量工作。Hue的安装可以依赖hive和oozie,所以这里先安装了Hive和oozie

选择集群,添加服务

image.png

添加服务向导

选择“hue”服务,点击“继续”

image.png

选择依赖的HDFS,点击“继续”

image.png

角色按照默认配置即可,点击“继续”,完成hue的安装

image.png

当点击“继续”后,需要给hue配置数据库,需要在cm1节点上连接mysql,执行创建数据库及分配权限语句

# cm1
mysql -uroot -pAbc@1234

create database hue DEFAULT CHARACTER SET utf8;
grant all on hue.* TO 'hue'@'%' IDENTIFIED BY 'Hue@1234';
flush privileges;
exit;

在弹出的页面中选择数据库,填写用户名及密码,点击“测试连接”,测试数据库连接成功后,点击“继续”

image.png

等待服务向导完成,点击“继续”->“完成”,完成hue安装

image.png

Hue的使用

以上将hue安装在cm1节点上,这里登陆hue时,地址为:http://cm1:8889,首次登陆hue需要登陆hue的账号密码,这里输入user:myhue,password:myhue。最好这里使用hdfs用户。因为hdfs用户可以操作hdfs中的文件,如果使用其他用户只能在当前用户的目录下创建文件

image.png

hue创建用户

点击“管理用户”->“添加用户”可以创建用户,并且可以指定权限,是否在HDFS中创建主目录等

image.png

image.png

hue操作HDFS文件

可以创建新的文件,也可以修改,最好HDFS中大文件不要在hue中操作。hue中的用户默认是进入当前用户的主目录进行操作

image.png

image.png

点击以上”文件”进入到HDFS文件系统,进行创建文件夹或者文件,还可以对文件进行编辑

准备personinfo.txt,内容如下(这些小文件可以在hue中直接编辑)

1,zhangsan,18,100
2,lisi,19,200
3,wangwu,20,300
4,zhangsan,21,400

将该文件上传到/user/myhue中,上传之后在页面查看,如下图

image.png

hue操作hive中的数据

登录hue之后,点击“查询”->“编辑器”->“Hive”,编写sql创建Hive表

create table my_hive_table(id int,name string,age int,score double) row format delimited fields terminated by ',';

image.png

创建完成后,点击hive数据库刷新,可以看到刚才创建的Hive表,创建表完成之后,可以右键表找到“在浏览器中打开”,可以查询、导入、删除表等操作,导入数据时选择的数据可以是HDFS中也可以是本地中的文件数据

image.png

点击“提交”将HDFS中文件数据导入到表中。点击“查询”查询表中的数据,如下

image.png

在Hive SQL面板中还可以查询数据,在查询编辑器中执行查询sql语句。在hue中执行的sql语句,可以在“查询历史记录”中查到,还可以将sql语句保存,在“文档”中查看

image.png

执行sql语句之后,hql转换成MR作业,可以点击“作业”查看任务

image.png

hue添加rdbms数据库

hue也支持RDBMS关系数据库的展示及操作。在Cloudera Manager web页面中进入hue页面,在配置中搜索hue_safety_valve.ini配置项,配置如下内容,保存更改

image.png

[librdbms]
[[databases]]
[[[mysql]]]
nice_name="Mysql"
engine=mysql
host=192.168.91.41
port=3306
user=root
password=Abc@1234
options={ "init_command":"SET NAMES 'utf8'"}

[notebook]
[[interpreters]]
[[[hive]]]
name=Hive
[[[mysql]]]
name=Mysql
interface=rdbms
[[[java]]]
name=Java
interface=oozie
[[[spark2]]]
name=Spark
interface=oozie
[[[shell]]]
name=Shell
interface=oozie
[[[sqoop1]]]
name=Sqoop1
interface=oozie
[[[distcp]]]
name=Distcp
interface=oozie

以上参数中,nice_name指定在hue中显示的连接名称。name指定连接的mysql数据库名称,不指定这个参数,将默认显示全部的数据库。engine指定mysql数据库类型。host指定数据库地址。port指定数据库端口号。user指定连接用户名。password指定密码。options中指定的"init_command"指定数据库编码为utf8,防止有中文时乱码

此外,在配置"[notebook]"时,可以只需要配置Hive与Mysql即可。以上配置完成之后,重启hue(在当前页面,操作中有重启按钮,点击即可)。重新进入hue webui中,点击“查询”->“编辑器”,可以看到“MySQL”标签,点击在主页右侧“SQL”中也会出现对应的MySQL中的数据库及表信息

image.png

impala介绍及安装

impala简介

impala由Cloudera公司推出,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。 基于Hive使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。是CDH平台首选的PB级大数据实时查询分析引擎。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点就是基于内存处理数据,查询速度快

Impala与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等

Impala与Hive在Hadoop中的关系下图所示。Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数据分析工具。可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析

image.png

Impala架构

image.png

Impala主要由Impalad、State Store 、Catlog和CLI组成

Impalad

与DataNode运行在同一节点上,由Impalad进程表示,它接收客户端的查询请求(接收查询请求的Impalad为Coordinator,Coordinator通过JNI[java native interface]调用java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果通过网络流式的传送回给Coordinator,由Coordinator返回给客户端。同时Impalad也与State Store保持连接,用于确定哪个Impalad是健康和可以接受新的工作。在Impalad中启动三个ThriftServer: beeswax_server(连接客户端),hs2_server(借用Hive元数据), be_server(Impalad内部使用)和一个ImpalaServer服务

每个impalad实例会接收、规划并调节来自ODBC或Impala Shell等客户端的查询。每个impalad实例会充当一个Worker,处理由其它impalad实例分发出来的查询片段(query fragments)。客户端可以随便连接到任意一个impalad实例,被连接的impalad实例将充当本次查询的协调者(Ordinator),将查询分发给集群内的其它impalad实例进行并行计算。当所有计算完毕时,其它各个impalad实例将会把各自的计算结果发送给充当 Ordinator的impalad实例,由这个Ordinator实例把结果返回给客户端。每个impalad进程可以处理多个并发请求

Imapla State Store

负责Query的调度及跟踪集群中的Impalad的健康状态及位置信息,由statestored进程表示,它通过创建多个线程来处理Impalad的注册订阅和与各Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,当State Store离线后,因为Impalad有State Store的缓存仍然可以工作,但会因为有些Impalad失效了,而已缓存数据无法更新,导致把执行计划分配给了失效的Impalad,导致查询失败。Impalad发现State Store处于离线时,会进入recovery模式,反复注册,当State Store重新加入集群后,自动恢复正常,更新缓存数据

Catalog

当Impala集群启动后,负责从Hive MetaStore中获取元数据信息,放到impala自己的catalog中。Catalog会与StateStore通信,将元数据信息通过StateStore广播到每个Impalad节点。同时当Impala客户端在某个Impalad中创建表后,Impalad也会将建表的元数据信息通过State Store通知给各个Impalad节点和Catalog,由Catalog同步到Hive的元数据中

注意在Hive中创建表产生的元数据信息,不能同步到catalog中,需要手动执行命令同步

CLI(Impala shell)

命令行客户端,提供给用户查询使用的命令行工具

impala的优势

  1. 基于内存进行计算,能够对PB级数据进行交互式实时查询、分析

    不需要把中间结果写入磁盘,省掉了大量的I/O开销。最大限度的使用内存,中间结果不写磁盘,Impalad之间通过网络以stream的方式传递数据

  2. 无需转换为MR,直接读取HDFS数据

    省掉了MR作业启动的开销,Impala直接通过相应的服务进程来进行作业调度,速度快

  3. C++编写,LLVM统一编译运行

    LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)。使用C++实现,做了很多针对性的硬件优化

  4. 兼容HiveSQL,可对Hive数据直接分析

  5. 支持Data Local

    Impala支持Data Locality的I/O调度机制,尽可能的将数据和计算分配在同一台机器上执行,减少网络开销

  6. 支持列式存储

  7. 支持JDBC/ODBC远程访问

impala的劣势

  1. 对内存的依赖大,要求高
  2. 完全依赖Hive,不支持Hive的UDF和UDAF函数,不支持查询期的容错
  3. 分区超过1w性能严重下降
  4. 稳定性不如hive

Impala与Hive的异同

相同点

impala与Hive使用相同的元数据,都支持将数据存储在HDFS和Hbase中,都是对SQL进行词法分析生成执行计划

不同点

1.执行计划

Hive: 依赖MR执行框架,执行计划分为map->shuffle->reduce->map->shuffle->reduce…由于中间有很多次shuffle,SQL执行时间长

Impala: 执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad中执行查询,而不需要转换成MR模式处理,保证impala有更好的并发性和避免不必要的中间sort和shuffle

2.数据流

Hive: 采用推的方式,每个计算节点计算完成之后将数据主动推给后续节点

impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,此方式可以将数据流式的返回给客户端,只要有一条数据处理完成,就可以立即被展示出来,不需要等待全部数据处理完成,更符合sql交互式查询

3.内存使用

Hive: 在执行过程中如果内存放不下数据,则会使用磁盘,保证SQL能顺序执行完成,每一轮MR执行结束后,中间结果也会落盘

Impala: 在遇到内存放不下数据时,就会报错。这使impala处理数据有一定的局限性,最好与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程中不会有写磁盘操作(insert除外)

4.调度

Hive: Hive调度依赖于Hadoop的调度策略

Impala: 调度由Impala自己完成,会尽量将处理数据的进程靠近数据本身所在的物理机器

5.容错

Hive: 依赖于Hadoop的容错能力

Impala: 整体来看,Impala容错一般,用户可以向任意一台impalad提交SQL查询。如果一个Impalad失效,在当前Impala上执行的所有SQL查询将失败,但是用户可以重新提交查询由其他的Impalad代替执行,不影响服务。在查询过程中,没有容错逻辑,如果执行过程中发生故障,则直接返回错误。对于Impala中的State Store目前只有一个,但当State Store失效,也不会影响服务,每个Impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把执行任务分配给已经失效的Impalad执行,导致SQL执行失败

6.适用方面

Hive: 复杂的批处理查询任务,数据转换任务

Impala: 实时数据分析,因为不支持UDF,对处理复杂的问题分析有局限性,与Hive配合使用,对Hive的结果数据集进行实时分析

安装

选择集群,添加服务

image.png

添加服务向导

在弹出的窗口中选择impala,点击“继续”

image.png

角色按照默认配置即可,点击“继续”

image.png

选择impala的数据目录,默认即可,点击“继续”->“完成”,完成impala的安装

image.png

image.png

impala的使用

在集群主页上,启动impala

测试Hive&impala的速度

首先在cm2中切换hdfs用户,默认ClouderaManager在创建hdfs用户时,禁用了使用hdfs用户进行ssh登录,这里需要执行命令(建议所有节点都执行)

# 所有节点
usermod -s /bin/bash hdfs

在cm2节点的shell上进入hive客户端,在之前hue的使用中,给Hive中插入过表my_hive_table,执行sql语句查看在hive中执行速度

# cm2
su - hdfs
# 进入hive客户端
hive
show tables;
my_hive_table

select count(*) from my_hive_table;
...
4
Time taken: 25.373 seconds, Fetched: 1 row(s)

在cm3节点上进入impala-shell,执行相同的语句查看执行时长

# cm3
# 进入impala客户端
impala-shell

show tables;
Query: show tables
+---------------+
| name          |
+---------------+
| my_hive_table |
+---------------+

select count(*) from my_hive_table;
...
+----------+
| count(*) |
+----------+
| 4        |
+----------+
Fetched 1 row(s) in 5.06s

执行同样的sql,hive耗时25秒,impala耗时5秒

测试impala创建表同步元数据

在impala中创建一张表,查看是否元数据会同步到Hive的MetaStore,在impala-shell中执行建表语句

# cm3 impala-shell
create table impala_table (id int,name string,score int) row format delimited fields terminated by '\t';
+-------------------------+
| summary                 |
+-------------------------+
| Table has been created. |
+-------------------------+

同时,在cm2节点的Hive客户端查看是否有表"impala_table",发现在impala中创建的表元数据在Hive中立即可以查询到

-- cm2 hive
show tables;
impala_table
my_hive_table

测试Hive创建表不同步元数据

在cm2节点,Hive中创建一张表,执行命令如下,在impala中看不到对应的表信息,需要手动更新元数据才可以

-- cm2 hive
create table my_hive_table1 (id int,name string) row format delimited fields terminated by '\t';

在cm3节点查询impala-shell,执行命令如下

# cm3 impala-shell
show tables;
+---------------+
| name          |
+---------------+
| impala_table  |
| my_hive_table |
+---------------+

# impala同步元数据信息
invalidate metadata;

show tables;
+----------------+
| name           |
+----------------+
| impala_table   |
| my_hive_table  |
| my_hive_table1 |
+----------------+

impala Shell命令

impala-shell命令的选项

选项说明
-h --help帮助
-v --version查看版本信息
-V --verbose启用详细输出,显示详细时间,显示执行信息
--quiet关闭详细输出
-p
--show_profiles
显示执行计划
-i IMPALAD
--impalad=IMPALAD
指定连接主机,格式hostname:port 默认端口21000
-q QUERY
--query=QUERY
从命令行执行查询,不进入impala-shell
-d DEFAULT_DB
--database=DEFAULT_DB
指定数据库(在启动时发出use database命令)
-f QUERY_FILE
--query_file=QUERY_FILE
执行查询文件中的查询,以;分隔。如果-f的参数为"-",则从stdin读取查询,并以ctrl-d结束查询
-o OUTPUT_FILE
--output_file=OUTPUT_FILE
如果设置,查询结果将写入给定的文件。多个以分号结束的查询的结果将被追加到同一个文件中(就是将1标准输出输出到文件)
-c
--ignore_query_failure
查询执行失败时继续执行,即跳过错误
-B --delimited以分隔模式输出行(去默认的格式化输出)
--print_header美化打印时,以分隔模式打印列名
--output_delimiter=OUTPUT_DELIMITER用于分隔模式下输出的字段分隔符
-k, --kerberos连接到kerberized impalad,使用kerberos安全加密方式运行impala-shell
-l --ldap使用LDAP认证Impala,Impala必须配置为允许LDAP认证
-u USER
--user=USER
要进行身份验证的用户
# cm3

# 创建impala_test.sql
echo 'select count(*) from my_hive_table;select * from my_hive_table;' > impala_test.sql
# 执行impala_test.sql脚本,跳过错误、打印列名、输出分隔符为#
# --print_header --output_delimiter 必须与-B一起使用,否则不生效
impala-shell -f impala_test.sql -c --print_header --output_delimiter="#"
...
+----------+
| count(*) |
+----------+
| 4        |
+----------+
...
+----+----------+-----+-------+
| id | name     | age | score |
+----+----------+-----+-------+
| 1  | zhangsan | 18  | 100   |
| 2  | lisi     | 19  | 200   |
| 3  | wangwu   | 20  | 300   |
| 4  | zhangsan | 21  | 400   |
+----+----------+-----+-------+
...

impala-shell -f impala_test.sql -B -c --print_header
...
count(*)
4
...
id      name    age     score
1       zhangsan        18      100
2       lisi    19      200
3       wangwu  20      300
4       zhangsan        21      400
...

# 执行impala_test.sql脚本,以分隔模式输出行,跳过错误,并将标准输出重定向到out1.txt
impala-shell -f impala_test.sql -B -c 1>out1.txt

cat out1.txt
4
1       zhangsan        18      100
2       lisi    19      200
3       wangwu  20      300
4       zhangsan        21      400

# 与上面命令的效果一样
impala-shell -f impala_test.sql -B -o out2.txt

特殊用法,进入impala-shell命令后

命令说明
help在impala-shell中查看帮助
connect <hostname:port>连接主机,默认端口21000
refresh <tablename>增量刷新元数据库
invalidate metadata全量刷新元数据库
explain <sql>显示查询执行计划、步骤信息
set explain_level设置显示级别(0,1,2,3) ,默认为1
shell <shell>不退出impala-shell执行Linux命令
profile查询最近一次查询的底层信息(查询完成后执行)
impala-shell

explain select * from my_hive_table;

# 级别越小,内容越精简,级别越大,内容越多
set explain_level = 3;
explain select * from my_hive_table;

# 执行linux命令
shell cat ./impala_test.sql;

impala存储和压缩方式

image.png

image.png

oozie的使用

Oozie是用于 Hadoop 平台的开源的工作流调度引擎。 用来管理Hadoop作业。 属于web应用程序,由Oozie client和Oozie Server两个组件构成。 Oozie Server是运行于Java Servlet容器(Tomcat)中的web程序

oozie作用

  • 统一调度hadoop系统中常见的mr任务启动、hdfs操作、shell调度、hive操作等
  • 使得复杂的依赖关系、时间触发、事件触发使用xml语言进行表达
  • 一组任务使用一个DAG来表示,使用图形表达流程逻辑更加清晰
  • 支持很多种任务调度,能完成大部分hadoop任务处理
  • 程序定义支持EL常量和函数,表达更加丰富

oozie中的概念

image.png

  • workflow: 工作流 ,顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个)
  • coordinator: 多个workflow可以组成一个coordinator,可以把前几个workflow的输出作为后一个workflow的输入,也可以定义workflow的触发条件,来做定时触发
  • bundle: 是对一堆coordinator的抽象, 可绑定多个coordinator

oozie web控制台

1. 将ext-2.2解压到对应目录

如果使用web控制台,还需要在oozie安装节点cm1上将"ext-2.2"解压到"/var/lib/oozie"目录下

# cm1
wget http://archive.cloudera.com/gplextras/misc/ext-2.2.zip
yum -y install unzip
# 解压ext到路径 /var/lib/oozie 中
unzip ext-2.2.zip -d /var/lib/oozie/

2. 启用 Oozie 服务器 Web 控制台

在CDH中进入oozie,点击配置,找到“启用 Oozie 服务器 Web 控制台”选项,点击“保存更改”之后,重启oozie服务即可

image.png

3. 浏览器或者CDH页面访问oozie的webui

webui地址是 cm1:11000

image.png

4. oozie job.properties文件参数

image.png

5. oozie提交任务命令

默认在CDH中安装了oozie后,每台节点都可以当做客户端来提交oozie任务流任务。启动任务,停止任务,提交任务,开始任务和查看任务执行情况,命令如下

# 启动任务
oozie job -oozie http://ip:11000/oozie/ -config job.properties -run
# 停止任务
oozie job -oozie http://ip:11000/oozie/ -kill 0000000-240430160814840-oozie-oozi-W
# 提交任务
oozie job -oozie http://ip:11000/oozie/ -config job.properties -submit
# 开始任务
oozie job -oozie http://ip:11000/oozie/ -config job.properties -start
# 查看任务执行情况
oozie job -oozie http://ip:11000/oozie/ -info 0000000-240430160814840-oozie-oozi-W

6. oozie提交任务流

oozie提交任务需要两个文件,一个是workflow.xml文件,这个文件要上传到HDFS中,当执行oozie任务流调度时,oozie服务端会从这个xml中获取当前要执行的任务

另一个是job.properties文件,这个文件是oozie在客户端提交流调度任务时告诉oozie服务端workflow.xml文件在什么位置的描述配置文件

配置workflow.xml文件,内容如下

<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
  <start to="shell-node"/>
  <action name="shell-node">
    <shell xmlns="uri:oozie:shell-action:0.1">
      <job-tracker>${jobTracker}</job-tracker>
      <name-node>${nameNode}</name-node>
      <configuration>
        <property>
          <name>mapred.job.queue.name</name>
          <value>${queueName}</value>
        </property>
      </configuration>
      <exec>echo</exec>
      <argument>**** first-hello oozie *****</argument>
    </shell>
    <ok to="end"/>
    <error to="fail"/>
  </action>
  <kill name="fail">
    <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  </kill>
  <end name="end"/>
</workflow-app>

在CDH中进入hue,在HDFS中创建文件workflow.xml

image.png

打开文件编辑器,将以上内容写入workflow.xml中,点击保存

image.png

在cm1,cm2,cm3任意节点上,选择一个节点当做提交oozie任务的客户端,创建job.properties文件,写入以下内容

nameNode=hdfs://cm1:8020
jobTracker=cm1:8032
queueName=default
examplesRoot=examples
oozie.wf.application.path=${nameNode}/user/myhue

提交oozie任务后会自动转换成MapReduce任务执行,这个时候需要Yarn资源调度。默认在Hadoop2.x版本中默认Yarn每个NodeManager节点分配资源为8core和8G,内存配置为yarn.nodemanager.resource.memory-mb代表当前NodeManager可以使用的内存总量。每个container启动默认可以使用最大的内存量为yarn.scheduler.maximum-allocation-mb,默认为8G

在Hadoop3.x版本之后,Yarn NodeManager节点默认分配的资源为1G和4Core。这里oozie任务需要的默认资源是2G和1Core,所以这里需要在Yarn中调大每台NodeManager的内存资源,在Yarn 配置中找到配置项“yarn.nodemanager.resource.memory-mb(表示该节点上YARN可使用的物理内存总量)”调节到至少2G以上,同时需要调大每个Container可以使用的最大内存,将“yarn.scheduler.maximum-allocation-mb(每个Container可申请的最多物理内存量)”调节到至少2G以上,但是应小于“yarn.nodemanager.resource.memory-mb”参数。配置如下

image.png

以上点击“保存修改”完成配置之后,需要重新启动Yarn集群即可。配置完成后,在当前客户端执行提交如下oozie的命令,可以看到返回了一个jobid,可以根据这个jobId,停止任务或者查看任务执行情况

# cm3
# 先切换到hdfs用户,否则可能会报访问hdfs权限错误
su - hdfs
# 先创建job.properties
# 启动任务
oozie job -oozie http://cm1:11000/oozie/ -config job.properties -run
job: 0000000-240430165611257-oozie-oozi-W

# 查看任务执行情况
oozie job -oozie http://cm1:11000/oozie/ -info 0000000-240430165611257-oozie-oozi-W
Job ID : 0000000-240430165611257-oozie-oozi-W
----------------------------------------------------------------------------------------------------------
Workflow Name : shell-wf
App Path      : hdfs://cm1:8020/user/myhue
Status        : SUCCEEDED
Run           : 0
User          : hdfs
Group         : -
Created       : 2024-04-30 09:01 GMT
Started       : 2024-04-30 09:01 GMT
Last Modified : 2024-04-30 09:01 GMT
Ended         : 2024-04-30 09:01 GMT
CoordAction ID: -

Actions
----------------------------------------------------------------------------------------------------------
ID                                                  Status    Ext ID                 Ext Status Err Code
----------------------------------------------------------------------------------------------------------
0000000-240430165611257-oozie-oozi-W@:start:        OK        -                      OK         -
----------------------------------------------------------------------------------------------------------
0000000-240430165611257-oozie-oozi-W@shell-node     OK        application_1714465260691_0001SUCCEEDED  -        
----------------------------------------------------------------------------------------------------------
0000000-240430165611257-oozie-oozi-W@end            OK        -                      OK         -
----------------------------------------------------------------------------------------------------------

启动任务之后,可以在oozie的webui页面中看到如下结果

image.png

上图中,可以点击任务流中的任务找打对应的console url ,在浏览器中输入url查看结果(实际就是在yarn中查看结果)

image.png

7. oozie提交含有多个任务的任务流

通过hue修改workflow.xml文件写入以下命令,执行任务a和任务b

<workflow-app xmlns="uri:oozie:workflow:0.3" name="myflow">
  <start to="a"/>
  <action name="a">
    <shell xmlns="uri:oozie:shell-action:0.1">
      <job-tracker>${jobTracker}</job-tracker>
      <name-node>${nameNode}</name-node>
      <configuration>
        <property>
          <name>mapred.job.queue.name</name>
          <value>${queueName}</value>
        </property>
       </configuration>
       <exec>echo</exec>
      <argument>**** first-hello oozie *****</argument>
    </shell>
    <ok to="b"/>
    <error to="fail"/>
  </action>
  <action name="b">
    <shell xmlns="uri:oozie:shell-action:0.1">
    <job-tracker>${jobTracker}</job-tracker>
    <name-node>${nameNode}</name-node>
    <configuration>
      <property>
        <name>mapred.job.queue.name</name>
        <value>${queueName}</value>
      </property>
    </configuration>
    <exec>echo</exec>
    <argument>**** second-i am second *****</argument>
    </shell>
    <ok to="end"/>
    <error to="fail"/>
    </action>
    <kill name="fail">
       <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
   </kill>
   <end name="end"/>
</workflow-app>
# cm3节点hdfs用户
oozie job -oozie http://cm1:11000/oozie/ -config job.properties -run

执行命令之后,进入oozie webui查看任务执行情况,可以点击任务流中的某个任务,查看详细执行信息或登录yarn查看结果

image.png

CDH集成Flink

安装包准备

下载Flink jar工具包

Flink jar工具包主要是让Cloudera Manager来支持Flink服务安装,下载地址:archive.cloudera.com/csa/1.0.0.0…

将下载好的"FLINK-1.9.0-csa1.0.0.0-cdh6.3.0.jar"工具包上传至cm1节点的/opt/cloudera/csd目录下,Cloudera Manager 才能有安装Flink的服务界面,不然界面看不到Flink,无法添加Flink服务

下载Flink parcels文件

下载地址:archive.cloudera.com/csa/1.0.0.0…

Flink parcels 文件中含有Flink的安装包,下载Flink Parcels时,需要下载以下三个文件

  • FLINK-1.9.0-csa1.0.0.0-cdh6.3.0-el7.parcel
  • FLINK-1.9.0-csa1.0.0.0-cdh6.3.0-el7.parcel.sha
  • manifest.json

将下载好的以上三个文件上传至cm1节点的/opt/cloudera/parcel-repo目录下,该目录下已经有manifest.json这个文件注意做好备份

注意:上面的下载路径现在都不可用了,可以在网上找到相关的资源

分配parcel进行安装

# cm1
# 可能需要先重启CM,在线安装的可能不用
systemctl restart cloudera-scm-server

进入Cloudea Manager平台中,点击“主机”,选择“Parcel”,进入parcel管理页面

image.png

点击“检查新Parcel”,刷新几次就可以看到对应的Flink Parcel出现,如下图

image.png

点击分配,会将parcel分发到其他Agent节点,并自动完成解压

image.png

点击激活,激活就是创建对应的Flink一些目录和用户,激活成功后可以在集群中添加Flink服务

添加Flink服务

打开Cloudera Manager主页,找到对应的集群,添加Flink服务

image.png

选择Flink HistoryServer和Flink客户端

image.png

点击“继续”,“审核更改”中可以不做修改,点击“继续”->”完成”。最后Flink服务实例安装完成

注意:完成之后,需要重启Cloudera Management Service服务(在页面中有重启按钮),Flink服务实例状态才能被监控

image.png

提交Flink任务

# cm3节点hdfs用户

# 准备数据
hdfs dfs -mkdir -p /tmp/flink_test/in
cat > word.txt << EOF
hello java
hello bigdata
hello hadoop
hello spark
hello flink
flink flink
EOF
hdfs dfs -put word.txt /tmp/flink_test/in/

# 测试flink
flink run -m yarn-cluster -yn 4 -yjm 1024 -ytm 1024 /opt/cloudera/parcels/FLINK/lib/flink/examples/streaming/WordCount.jar --input hdfs://cm1:8020/tmp/flink_test/in/ --output hdfs://cm1:8020/tmp/flink_test/out

# 查看结果
hdfs dfs -cat /tmp/flink_test/out
(hello,1)
(java,1)
(hello,2)
(bigdata,1)
(hello,3)
(hadoop,1)
(hello,4)
(spark,1)
(hello,5)
(flink,1)
(flink,2)
(flink,3)

可以在Flink的webui中查看执行的job,通过CM部署的组件对应的webui都可以在CM页面中点击跳转过去