用C/C++实现对STORM的执行信息查看和控制
近期公司有个需求。须要在后端应用server上实时获取STORM集群的执行信息和topology相关的提交和控制,经过几天对STORM UI和CMD源代码的分析,得出能够通过其thrift接口调用实现这些功能。先下载一个thrift库进行编码和安装。关于thrift能够參见这个地方。
安装完毕后,从STORM源代码中将storm.thrift复制到thrift文件夹下。
输入:
hrift -gen cpp storm.thrift
会得到一个gen-cpp文件夹,里面就是thrift先关脚本的C++实现。
我们先看storm.thrift文件接口:
service Nimbus
{
//TOPOLOGY上传接口
void submitTopology(1: string name, 2: string uploadedJarLocation, 3: string jsonConf, 4: StormTopology topology);
void submitTopologyWithOpts(1: string name, 2: string uploadedJarLocation, 3: string jsonConf, 4: StormTopology topology, 5: SubmitOptions options);
void killTopology(1: string name);
void killTopologyWithOpts(1: string name, 2: KillOptions options) throws (1: NotAliveException e);
void activate(1: string name) ;
void deactivate(1: string name);
void rebalance(1: string name, 2: RebalanceOptions options); //TOPOLOGY JAR包上传接口
string beginFileUpload();
void uploadChunk(1: string location, 2: binary chunk);
void finishFileUpload(1: string location);
string beginFileDownload(1: string file);
binary downloadChunk(1: string id); //获取NIMBUS的配置信息
string getNimbusConf();
//获取STORM集群执行信息
ClusterSummary getClusterInfo();
//获取TOPOLOGY的执行状态信息
TopologyInfo getTopologyInfo(1: string id);
//获取TOPOLOGY对象信息
string getTopologyConf(1: string id);
StormTopology getTopology(1: string id);
StormTopology getUserTopology(1: string id);
}
生成C++文件后,我们就能够对其接口进行调用,因为thrift c++框架是使用boost库实现的,必须安装boost库依赖。实现的代码例如以下:
#define HAVE_NETDB_H //使用网络模块的宏必须打开
#include "Nimbus.h"
#include "storm_types.h" #include <string>
#include <iostream>
#include <set> #include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>
int test_storm_thrift()
{
boost::shared_ptr<TSocket> tsocket(new TSocket("storm-nimbus-server", 6627));
boost::shared_ptr<TTransport> ttransport(new TFramedTransport(tsocket, 1024 * 512)); //此处必须使用TFramedTransport
boost::shared_ptr<TProtocol> tprotocol(new TBinaryProtocol(ttransport));
try{
//创建一个nimbus客户端对象
NimbusClient client(tprotocol);
//打开通道
ttransport->open(); ClusterSummary summ;
std::string conf;
//对STORM的RPC调用。直接获取信息,同步进行的。 client.getNimbusConf(conf);
client.getClusterInfo(summ);
//关闭通道
ttransport->close();
}catch(TException &tx){
printf("InvalidOperation: %s\n", tx.what());
}
}
以上代码就能够直接获取nimbus的配置和集群信息。其它接口以此类推。值得注意的是storm.thrift to C++生成的storm_types.h文件中当中operator < 函数都未实现。所以必须手动进行加入实现。否则编译会有问题。
不只C++能够实现STORM的控制,PHP和其它的语言也能够实现,只要thrift支持就OK。有兴趣能够实现一下试试看。
用C/C++实现对STORM的执行信息查看和控制的更多相关文章
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- 用 Python 脚本实现对 Linux 服务器的监控
目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统 ...
- 在应用程序中实现对NandFlash的操作
以TC58NVG2S3ETA00 为例: 下面是它的一些物理参数: 图一 图二 图三 图四 图五 图6-0 图6-1 说明一下,在图6-1中中间的那个布局表可以看做是实际的NandFlash一页数据的 ...
- 51单片机实现对24C02进行页写、顺序读取并显示验证
//************************************************************************************* //**程序名称:51单 ...
- 通过memcached来实现对tomcat集群中Session的共享策略
近期在做一套集群的实现,实现的方案是在Linux下完成对Apache + Tomcat 负载均衡的功能. 上述功能已经实现,有需要了解的朋友可以看我另外一篇博文. Linux下Apache与Tomca ...
- Android平台中实现对XML的三种解析方式
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
- 使用JWT来实现对API的授权访问
目录 什么是JWT JWT的结构 Header Payload Signature 解码后的JWT JWT是怎样工作的 在JAVA里使用JWT 引入依赖 JWT Service 生成JWT 解码JWT ...
- 写出java8实现对List<User>中的username字段过滤出不等于张三的数据
写出java8实现对List<User>中的username字段过滤出不等于张三的数据... 对...这个是一道面试题.当时没有看过java8的新特性...所以有点懵. 看完之后感觉 真. ...
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...
随机推荐
- VS2005 “无法在证书存储区中找到清单签名证书”错误的解决方法
方法一:在VS2005中出现该错误时,用记事本打开项目的.csproj文件,删除以下内容即可: <ManifestCertificateThumbprint>B531F2CF2227 ...
- IOS 进度条与手势
//进度条#import "ViewController.h" @interface ViewController () { UIImageView* _animaImageV; ...
- CCF 201612-1 最大波动 (水题)
问题描述 小明正在利用股票的波动程度来研究股票.小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少. 输入 ...
- 如何制作u盘启动盘
1,下载windows系统 许多人下载windows时会出现各种版本,我推荐在这里下载 你用上面的地址进行下载,一般用迅雷吧.下载结束你就有了镜像文件了. 2,下载安装碟软通 那 ...
- my sql
如果改了上面的4个配置文件,要让其立即生效,可以使用如下方法 source .bash_profile . .bash_profile 基于Apache+php+mysql的许愿墙网站的搭建 方案一: ...
- 套题 bestcoder 84
A题:Aaronson 静下心来观察就会发现1.如果m大于等于n的位数,那么n直接写成二进制形式就是最优解形式2.如果m小于n的位数,那么贪心地使得高位尽可能地多消掉n的值,因为高位少写一个数就意味着 ...
- iOS自动适配
自iphone4s以后,苹果先后推出了iphone5.iphone5s.iphone6.iphone6plus.iphone6s.iphone6splus这些新的机型,它们的屏幕大小各有所异,从此给我 ...
- 安卓系统上安装.net运行时 mono runtime
感谢以下博主: ubuntu指南 http://dawndiy.com/archives/229/ img大小调整 http://zebinj.blog.163.com/blog/static/206 ...
- 实现SQL Server中的切割字符串SplitString函数,返回Table
有时我们要用到批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了. -- ===================================== ...
- 微软BI 之SSIS 系列 - ETL 转换时关于 Code Page (1252 and 936) 转换错误的原因和解决方法
开篇介绍 最近经常碰到在 ETL 练习中出现这种转换失败的问题,试了多种方式,同样的代码同样的源结构和表结构但是一直不能成功执行,包报错.一般有这么几种错误: Error at DST_LOAD_DA ...