我试图让在Cloudera Manager上管理Presto成为可能的故事

这篇文章是2015年Cloudera Manager Advent Calendar的第13天。

首先

使用Cloudera Manager(以下简称CM),您可以轻松安装和运营支持Hadoop生态系统的各种产品,包括Hadoop、Hive、HBase,以及Spark和Kafka等等,非常方便实用。

然而,随着时间的推移,在Hadoop上运行的产品不断更新,事实上有一些产品是CM无法安装的,这也是事实。

例如,Presto非常方便实用,但CM无法进行管理。当然,使用Chef、Puppet等进行配置管理也是可以的,但如果我们平常就使用CM,是否希望在CM上进行统一的管理呢?

实际上,Cloudera Manager为了满足这种需求,拥有可以自定义Parcel和CSD的功能。

这次,虽然简单,但我尝试在CM上实现了Presto的运营,我将介绍一下这一过程。

为什么我会想要使用Presto?

平时分析Hadoop上积累的日志等,使用Hue上的Hive、Impala等进行分析已经足够了,但如果想用re:dash将每日的KPI显示出来,仅仅将ID和对应的数值显示在图表上,往往不容易一目了然。因此,考虑到希望将MySQL中的主数据与之进行关联,选择了Presto,可以同时将Hive和MySQL进行联接。

包裹是什么意思?

在CM中部署的Hadoop等组件,使用的不是rpm或deb软件包,而是一种称为Parcel的独特形式(尽管存储为tgz文件)。相关文档在此处可查阅。

Parcel被管理在Cloudera Manager Server的/opt/cloudera/parcel-repos目录下,并分发给各个服务器。

顺便提一下,当浏览位于解压目录/opt/cloudera/parcels时,可以看到在版本升级或降级时,替换了已解压Parcel目录的符号链接。

CSD指的是什么?

CSD是Custom Service Descriptors的缩写,它定义了使用前述原始包裹(Parcel)在CM上启动、停止、重新启动系统以及进行设置的内容。这些定义可以用JSON或Shell脚本编写。您可以在此处查看文档。

尝试使用Cloudera Manager版的Presto。

因此,功能受到相当的限制,但这是使用我制作的Presto的广告版来实际尝试的步骤。

快送宝的创建和安装

当您克隆此存储库(presto-parcel)并运行”mvn package”命令后,将在target/repository目录下生成一个parcel文件。

设置

54836557abceff6480e8258fd256f478.png

如果搭建Web服务器太麻烦的话,只需将您自己的发行版parcel以及文件名.sha的sha1sum写入文件这两者放置在Cloudera Manager Server的/opt/cloudera/parcel-repo/目录下,即可在CM的Parcel一览页面中显示。

$ ls -lah /opt/cloudera/parcel-repo/
略
-rw-rw-r-- 1 cloudera-scm cloudera-scm 576M Dec 13 22:18 PRESTO-0.125.presto0.1-el6.parcel
-rw-rw-r-- 1 cloudera-scm cloudera-scm   41 Dec 13 22:39 PRESTO-0.125.presto0.1-el6.parcel.sha
$ cat PRESTO-0.125.presto0.1-el6.parcel.sha
489a91986a6dc8c27d3317bc61adc3cc157da85d
1fd89bb5cad447e6396ef1cc8fac0526.png

如果有被显示出来的话,就像其他的包裹一样进行分发就可以了。

Presto-CSD的创建和安装

只需将此存储库(presto-csd)克隆下来并运行 mvn package 命令,即可在 target 目录下生成用于 CSD 的 JAR 文件。

CSD会将JAR文件放置在/opt/cloudera/csd,并且授权给cloudera-scm用户进行读取。

$ ls -la /opt/cloudera/csd/
total 16
drwxr-xr-x 2 cloudera-scm cloudera-scm 4096 Dec 13 06:34 .
drwxr-xr-x 6 cloudera-scm cloudera-scm 4096 Dec 13 06:34 ..
-rwxr-x--- 1 cloudera-scm cloudera-scm 5515 Dec 13 06:34 PRESTO-0.1.jar

当您重新启动Cloudera Manager服务器时,您就可以添加服务。

10a9cae57fc0e51d159639ade23b50e8.png

看到Presto的字了,接下来应该进行适当的设置,就可以执行Presto了。

关于Parcel和CSD的开发

就包裹的准备来说,相对来说很简单,只需要把需要分发的产品所需的一切东西都打包成gz文件就可以了。(可能需要写一些JSON和环境变量…)

这次制作Presto用的Parcel时,因为需要JDK8,所以在Parcel中也包含了JDK8。

由于CDH5.3开始也支持JDK8,所以如果已经在JDK8环境下运行Cloudera Manager的话,或许不需要再包含JDK8。

就CSD的准备而言,在CM上创建service.sdl以定义各种设置等,并创建一个shell脚本以定义各个命令的内容,会变得相当复杂。

在创建时,由于规定了不修改原先的Presto而尽力完成,因此我们相当拼命。另外,目前这个Presto只能引用Hive和MySQL两个Catalog,所以还需要再想办法。

作为CSD的示例,Cloudera的cm_csds仓库非常有参考价值,建议大家去看一看。

在开发过程中,可以利用Cloudera的cm_ext仓库中的验证器来检查所创建的Parcel和CSD的结构是否正确,可以尝试不断进行构建和验证,看看是否有问题。

最终

这次决定制作能够通过CM进行管理的Presto的契机,是因为看到了《nagaseyasuhito Daily works.》这篇文章中介绍可以轻松尝试Norikra的Cloudera Manager,便灵光一现。在创建这次的Parcel和CSD时,我参考了很多,借此机会表示感谢。
另外,最近的CSD情况变动查看Change Log后发现,从CM 5.4开始可以定义监控了呢!(非常抱歉目前还不支持此功能…)
期待能收到试用的感想、Pull Request等消息。同时,如果有创建了Storm的Parcel和CSD的朋友,请务必告诉我!

广告
将在 10 秒后关闭
bannerAds