Impala实践之六:使用Rest Api

前言

上次的impala状况出现后,决定自己做一套impala的管理系统,那么首先面临的一个问题就是获取impala的各种状态,比如任务执行状态。经过一天多的尝试,总结一下。

  • hue:可以使用hue的脚本,hue使用python编写,其中有一个beeswax模块,负责任务的执行等。缺点是没发现java的api。
  • cloudera manager java api:java可以调用cm原生的api,需要导入jar包。跑是跑通了,但是资料太说,目前只能通过这个接口获取集群的基本情况,不想再折腾impala那快了。
  • cloudera manager 的api:cm提供了rest的api供别人调用,经过接近一天的折腾,跑通了这一块。

Cloudera Manager API

impala相关

和impala相关的api有下面这几个,能用上的主要是最下面带queries的几个接口:

  • /clusters/{clusterName}/services/{serviceName}/commands/hueSyncDb
  • /clusters/{clusterName}/services/{serviceName}/commands/impalaCreateCatalogDatabase
  • /clusters/{clusterName}/services/{serviceName}/commands/impalaCreateCatalogDatabaseTables
  • /clusters/{clusterName}/services/{serviceName}/commands/impalaCreateUserDir
  • /clusters/{clusterName}/services/{serviceName}/commands/impalaDisableLlamaHa
  • /clusters/{clusterName}/services/{serviceName}/commands/impalaDisableLlamaRm
  • /clusters/{clusterName}/services/{serviceName}/commands/impalaEnableLlamaHa
  • /clusters/{clusterName}/services/{serviceName}/commands/impalaEnableLlamaRm
  • /clusters/{clusterName}/services/{serviceName}/impalaQueries
  • /clusters/{clusterName}/services/{serviceName}/impalaQueries/{queryId}
  • /clusters/{clusterName}/services/{serviceName}/impalaQueries/{queryId}/cancel
  • /clusters/{clusterName}/services/{serviceName}/impalaQueries/attributes

调用示例

接口说明:

GET

Returns details about the query. Not all queries have details, check the detailsAvailable field from the getQueries response.

/api/v9/clusters/{clusterName}/services/{serviceName}/impalaQueries/{queryId}

注意:

1. username:password:是指登录cm的账号和密码

2. Cluster1:是你的集群的名字

3. impala:是你的impala服务的名字

4. 364e76f05cdffsdf802b0:3a499cc3fb86bf8afsd: 是query的id

curl例子:

curl -u username:password ‘clouderamanager.zhdd.com/api/v9/clusters/Cluster1/services/impala/impalaQueries/364e76f05cdffsdf802b0:3a499cc3fb86bf8afsd‘

结果:

结果是一个大的json串

java示例:

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class ClientAuthentication {
    public static void main(String[] args) throws Exception {
        String username = "username";
        String password = "password";
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(
                new AuthScope("clouderamanager.zhdd.com", AuthScope.ANY_PORT),
                new UsernamePasswordCredentials(username, password));
        CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCredentialsProvider(credsProvider)
                .build();
        try {
            HttpGet httpget = new HttpGet("http://clouderamanager.zhdd.com/api/v9/clusters/Cluster1/services/impala/impalaQueries/364e76f05cdffsdf802b0:3a499cc3fb86bf8afsd");

            System.out.println("Executing request " + httpget.getRequestLine());
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                System.out.println(EntityUtils.toString(response.getEntity()));
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }
    }
}

总结

遇到这个问题,我第一反应就是用hue的,但是python和java接口感觉太麻烦,所以就找了cm的rest api。

问题

cm的api应该有一些小问题,我在curl和postman上测试都比较轻松就调通了,但是使用java的httpclient调用的时候总是出错,权限认证失败,总是不能认证权限,这个问题折腾了很久,找了几个人帮忙。最后不知道怎么的我就自己把它折腾好了。



2016-04-17 18:39:00 hzct

时间: 2024-10-12 15:19:04

Impala实践之六:使用Rest Api的相关文章

VC++ ADO开发实践之六

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.此次课程以<星际争霸II>回放文件分析为例,集中在IBM Cloud相关数据分析服务的应用.面对星际游戏爱好者希望提升技能的要求,我们使用IBM Data Science Experience中的jJupyter Notebooks来实现数据的可视化以及对数据进行深度分析,并最终存储到IBM Cloudant中.这是个介绍+动手实践的教程,参会者不仅将和讲师一起在线

Linux多线程实践(2) --线程基本API

POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以"pthread_"开头,要使用这些函数库,要通过引入头文<pthread.h>,而且链接这些线程函数库时要使用编译器命令的"-lpthread"选项[Ubuntu系列系统需要添加的是"-pthread"选项而不是"-lpthread",如Ubuntu 14.04版本,深度Ubuntu等] 1.pthread_create int pt

Impala实践之五:一次系统任务堵塞记录 + 思考

前言 前段时间,imppala资源告警,各种任务失败,查询堵塞,因此公司集群升级. 这次迁移的确必须,因为当时的集群规模很小,资源太紧张了. 迁移集群后,今天集群再次出问题,导致一个下午没什么事都没干,查了一下午的错误. 事件发展 1.阶段一:下午2点17分 数据组反映集群崩溃,HUE界面不能登录,登录之后刷不出来表,当然也不能提交数据. 查看各种log日志.任务信息,发现事件发生前后有两个现象: 有一个admin用户每隔一分钟提交一次insert任务,一次任务的数据量主要分两个个等级:500M

RESTful实践:如何设计API的错误消息

现有状况 发现很多RESTful API的错误代码都是用HTTP的状态码(Status Code)作为API的错误代码,公司的一些产品也是如此,如下图所示: 这种设计基本是把错误代码依次映射到HTTP的状态码上,HTTP协议中定义的状态码基本包含下面几类: 1xx Informational 2xx Success 3xx Redirection 4xx Client Error 5xx Server Error 比如对一个常见的新增用户的API,返回的Code会设计如下: 201 创建成功 4

Impala实践之十一:parquet性能测试

前言 之前一直考虑更换impala的文件存储格式为parquet,但是没有立即使用,最近又做了一些测试,看看parquet是否真的有用.在测试的时候顺便测了一下compute语句的效果,一起作为参考.下面抽出一个小业务的部分测试结果来展示. 测试准备 库名和表名当然不是真的. 测试范围: 文件格式:parquet和text compute语句的影响 测试用表: 表名 行数 字段数 物理存储大小 ain 34231137 11 1.4 G a_in 395857172 11 4.4 G in 62

Impala实践之十二:impala压缩方式测试

前言 测一下parquet.snappy.gzip.textfile这些方式在hdfs中占用的存储大小. 在impala中直接建内部表. 测试 存储格式 压缩格式 文件大小 建表时间 textfile none 3.0 G 38.74s parquet none 1.5 G 32.33s parquet snappy 709.3 M 31.71s parquet gzip 471.5 M 48.23s snappy snappy的官方描述. Snappy is a compression/dec

Impala实践之十三:Impala建表时的关键字

前言 由于经常要帮数据分析抽表,因此自己写了个自动生成impala和sqoop脚本的工具,结果今天发现一个库中17张表,只成功导入了12张.仔细检查才发现是是由于impala建表时候字段使用了location关键字的原因. 分析 建表语句 impala-shell -i ip:25004 -q " DROP TABLE IF EXISTS database.table; CREATE EXTERNAL TABLE database.table( id string, location strin

Impala实践之七:添加负载均衡

前言 impala的负载均衡,使用haproxy来做,主要是比较简单.安装后做一个小配置就行. 主要用的就是haproxy四层交换机的特性,讲所有指向haproxy主机和端口的请求,转发到相应的主机:端口上. cdh官网里面的信息已经比较久了,有些配置需要改,因此做一个笔记. impala负载 安装haproxy yum install haproxy 配置文件 vim /etc/haproxy/haproxy.cfg 下面是一个实际的配置文件,主机信息已经隐藏. global # To hav

Impala实践之八:脚本中引号问题

前言 写脚本,遇到一个小坑,python和seven帮忙填了一下,突然想起来之前貌似遇到过类似的情况. 版本一 脚本: sql=$1 coordinator=$2 output_file=$3 echo $sql echo "------" echo $output_file echo "------" echo $coordinator impala-shell -i $coordinator -q $sql -o $output_file 执行命令: bash