通用查询引擎Restful service设计(目前支持hive,shark)

最近在设计开发一个通用查询Restful Service (https://github.com/lalaguozhe/polestar-1) ,项目名polestar (中文名叫北极星,野营灯,指导者,希望把大家的查询语句都吸引汇聚过来,你懂的) ,之前查询Hive语句基本都是走Hive Server,但是Hive Server 1不太完善,比如

1. 有编译器memory leak问题

2. thrift api不支持multiple connections和client sessions

3. 提交语句后就会被block住,无法实时获取执行状态信息

4. 不支持authentication(kerberos)

这些问题要到hive server 2才能解决(https://issues.apache.org/jira/browse/HIVE-2935),因此我们开发一个统一查询语句的Restul Service,让用户把查询语句(Hive, Shark和Phoenix等) 都通过restful api提交上来,后台worker节点会以command line的方式把它启起来,然后把结果和中间状态信息返回给他。

Polestar 架构图

最上层是应用层,比如Hive Web(用户在edit box自定义查询语句), 运营工具(DW的报表工具,会生成Query模版查询), ad hoc (其他应用ad hoc查询),所有请求都会经过HAProxy+Keepalived做load balance,HAProxy支持多种balance algorithm,默认是leastconn,我们这边使用source,也就是根据client的IP和server权重进行hash。接下来请求就会被转发到某一台worker节点。每一个worker节点都是独立部署,安装有Hive, Shark的客户端,根据用户指定的执行引擎起不同的process处理,并且抓取stdout和stderr

Restful API:

@Path("/query")
public class PolestarController {
    private IQueryService queryService = DefaultQueryService.getInstance();  

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getQueryId() {
        return queryService.getQueryID();
    }  

    @GET
    @Path("/status/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public QueryStatus getQueryStatus(@PathParam("id") String id) {
        return queryService.getStatusInfo(id);
    }  

    @GET
    @Path("/download/{filename}")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response get(@PathParam("filename") String filename) {
        return Response.ok(queryService.getDataFile(filename)).build();
    }  

    @GET
    @Path("/cancel/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Boolean cancelQuery(@PathParam("id") String id) {
        return queryService.cancel(id);
    }  

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response postQuery(Query query) {
        QueryResult result = queryService.postQuery(query);
        return Response.status(Status.CREATED).entity(result).build();
    }
}

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/extra/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索查询
, hive
, return
, response
, advanced rest client
, 语句
, public
, hive查询报错
, hive查询卡死
web+hive
hive restful、shark hive、restful webservice、webservice和restful、restful service,以便于您获取更多的相关知识。

时间: 2024-12-03 07:19:57

通用查询引擎Restful service设计(目前支持hive,shark)的相关文章

主流开源SQL引擎总结,不断改进的Hive始终遥遥领先

本文涵盖了6个开源领导者:Hive.Impala.Spark SQL.Drill.HAWQ 以及Presto,还加上Calcite.Kylin.Phoenix.Tajo 和Trafodion.以及2个商业化选择Oracle Big Data SQL 和IBM Big SQL,IBM 尚未将后者更名为"Watson SQL". (有读者问:Druid 呢?我的回答是:检查后,我同意Druid 属于这一类别.) 使用SQL 引擎一词是有点随意的.例如Hive 不是一个引擎,它的框架使用Ma

使用RestSharp 库消费Restful Service

现在互联网上的服务接口都是Restful的,SOAP的Service已经不是主流..NET/Mono下如何消费Restful Service呢,再也没有了方便的Visual Studio的方便生产代理的工具了,你还在用HttpWebRequest 自己封装吗?Restful Service还有授权问题,自己写出来的代码是不是很不优雅?通常Restful Service返回的数据格式是XML或者Json,还要设置服务的输入参数等等,使用起来很复杂.本文向你推荐一个开源的库RestSharp轻松消费

会话失效-restful api设计,禁用cookie,如何实现会话管理

问题描述 restful api设计,禁用cookie,如何实现会话管理 我在设计restful api时,使用了session来进行会话管理,即登陆时返回一个令牌给客户端,而服务器端保存该令牌在session中,每次客户端使用令牌获取api访问权限,但是现在遇到一个问题,使用session需要用到cookie,但是如果不开启cookie,那会话管理就失效了(必须通过jsessionid来获取对应的session),本来我知道可以用URL重写来做,但是restful似乎无法支持URL重写吧,我的

RESTful API设计给开发人员带来怎样的未来?

业界正在逐渐承认RESTful API优于面向服务架构.但是这对于架构师和开发人员而言到底意味着什么?Tom Nolle分享了他的想法. 在模块化应用世界里,最为持久的争论莫过于面向服务架构和表述性状态转移之争了.本文探讨这样的争论带来了什么及其背后的原因. SOA已经被定性为连接组件和工作流的严格的且重量级的方案,REST则赢得了更多的赞誉.两者的特征都是简化,但是要学习RESTful API设计,架构师和开发人员必须理解SOA和REST之间的差异,学习REST和云以及微服务一起的演进,并且了

开源的库RestSharp轻松消费Restful Service

现在互联网上的服务接口都是Restful的,SOAP的Service已经不是主流..NET/Mono下如何消费Restful Service呢,再也没有了方便的Visual Studio的方便生产代理的工具了,你还在用HttpWebRequest 自己封装吗?Restful Service还有授权问题,自己写出来的代码是不是很不优雅?通常Restful Service返回的数据格式是XML或者Json,还要设置服务的输入参数等等,使用起来很复杂.本文向你推荐一个开源的库RestSharp轻松消费

一个比较通用的分页控件,完整的设计时支持和比较流行的分页模式(提供源码下载)

这是我写的一个分页控件,功能如下: 1.支持设计时支持和两种分页模式,其中综合分页模式的效果如下: 普通分页模式的效果如下: 2.完善的设计时支持,包括自动套用格式和设计时面板设置: 使用方法: 在aspx页面中:复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Cyclone.Custom

为ASP.NET控件添加设计时支持

asp.net|控件|设计 简介 Microsoft ASP.NET 为开发人员提供了一种适用于 Web 开发的.功能最为强大的新工具:服务器控件.服务器控件使开发人员能够在短时间内开发出响应速度快而且功能强大的 Web 应用程序,所需的时间与在典型的 ASP 中创建类似应用程序的时间差不多. ASP.NET 服务器控件之所以能够提供生产效率,关键原因之一在于它为 Microsoft Visual Studio .NET 开发环境中的服务器控件提供了丰富的设计时支持.开发人员可以将服务器控件从

asp.net控件设计时支持(4)

一.单区域编辑 1.介绍 在内置控件中,典型的则是Panel控件,如下图 其在设计时提供了一个编辑区域,可方便的编辑控件内部文本,并提供了一个标题属性,此设计时呈现效果并非呈现以后的效果.另外除Panel控件外,MultiView控件也提供相似的设计时支持.下面我们看一下类图 ContainerControlDesigner 提供单个带框区域来表示控件,注意是单个,你只需要关注以上两个属性和一个方法既可,最终的封装实现还是调用GetDesignTimeHtml 方法的,以下为属性简单说明 Fra

wpf控件设计时支持(2)

这篇介绍在wpf设计时集合项属性添加项的定义和自定义控件右键菜单的方法 集合项属性设计时支持 1.为集合属性设计器识别具体项类型 wpf设计器允许定义集合项的类型,如新发布的WPF的DataGrid控件,其中的Columns包括一下几种类型,Columns集合属性是以下几个类型的抽象类集合.要在设计器识别以下类型,就必须用到wpf设计时的扩展功能 实现这个功能很简单,只需要给该集合属性附上NewItemTypesAttribute元数据就好了.如下代码 NewItemTypesAttribute