Uber Athenax项目核心技术点剖析

本文剖析一下Uber Athenax项目的核心技术点。

overview

以下这段介绍摘自项目官方文档

AthenaX是一个流式分析平台,它可以让用户运行SQL来进行大规模可扩展的流式分析。由Uber开源,具备扩展到上百台节点处理日均千亿级别的实时事件。

架构图如下:

技术说明

  • 构建在Apache Calcite以及Apache Flink之上;
  • 采用YARN集群来管理Job
  • LevelDB作为持久化存储

Features

  • Streaming SQL
    • Filtering, projecting and combining streams
    • Aggregation on group windows over both processing and event time
    • User-defined functions (UDF), User-defined aggregation function (UDAF), and User-defined table functions (UDTF) (coming soon)
  • Efficient executions through optimizations and code generations
  • Mechanisms to automatically fail over across multiple data centers
  • Auto scaling for AthenaX jobs

核心技术点

athenax-backend

项目的后端服务实现,提供了一个运行时实例。其主要启动步骤分为两步:

  • 启动一个web server,用来接收restful的各种服务请求;

这里的web server,事实上一个Glashfish(Java EE应用服务器的实现)中的grizzly(基于Java NIO实现的服务器)所提供的一个轻量级的http server,它也具备处理动态请求(web container,Servlet)的能力。

web server接收用户的RESTful API请求,这些API可以分成三类:

(1)Cluster: 集群相关的信息;
(2)Instance: Job运行时相关的信息;
(3)Job: 作业本身的信息;

RESTful API这块,AthenaX使用了当前比较流行的swagger这一API开发框架来提供部分代码(实体类/服务接口类)的生成。

  • 启动了一个Server的Context(上下文),它封装了一些核心对象,是服务的具体提供者:
    • job store:一个机遇LevelDB的job元数据存储机制;
    • job manager:注意这与Flink的JobManager没有关系,这是AthenaX封装出来的一个对象,用于对SQL Job进行管理;
    • instance manager:一个instance manager管理着部署在YARN集群上所有正在被执行的job;
    • watch dog:提供了对job的状态、心跳的检测,以适时进行failover;

athenax-vm-compiler

三个component:

  • planer:计划器,该模块的入口,它会顺序调用parser、validator、executor,最终得到一个称之为作业编译结果的JobCompilationResult对象;
  • parser:编译器,这里主要是针对其对SQL的扩展提供相应的解析实现,主要是对Calcite api的实现,最终得到SqlNode集合SqlNodeList
  • executor:真正完成所谓的”编译“工作,这里编译之所以加引号,其实只是借助于Flink的API得到对应的JobGraph

这里,值得一提的是其”编译“的实现机制。AthenaX最终是要将其SQL Job提交给Flink运行时去执行,而对Flink而言JobGraph是其唯一识别的Job描述的对象,所以它最关键的一点就是需要得到其job的JobGraph。那么它是如何做到这一点的?

JobGraph的生成

它(JobCompiler)通过mock出一个利用Flink的Table&SQL API编写的Table&SQL 程序模板 :

StreamExecutionEnvironment execEnv = StreamExecutionEnvironment.createLocalEnvironment();
StreamTableEnvironment env = StreamTableEnvironment.getTableEnvironment(execEnv);
execEnv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
CompilationResult res = new CompilationResult();

try {
    JobDescriptor job = getJobConf(System.in);
    res.jobGraph(new JobCompiler(env, job).getJobGraph());
} catch (Throwable e) {
    res.remoteThrowable(e);
}

核心在于上面的getJobGraph方法

JobDescriptor是其Job业务相关的信息,然后为其 动态设置 非固定部分:

  • input catalog:table source
  • udf: user defined table/scalar/agg function
  • sql: business sql
  • output catalog: sink
  JobGraph getJobGraph() throws IOException {
    StreamExecutionEnvironment exeEnv = env.execEnv();
    exeEnv.setParallelism(job.parallelism());
    this
        .registerUdfs()
        .registerInputCatalogs();
    Table table = env.sql(job.sql());
    for (String t : job.outputs().listTables()) {
      table.writeToSink(getOutputTable(job.outputs().getTable(t)));
    }
    StreamGraph streamGraph = exeEnv.getStreamGraph();
    return streamGraph.getJobGraph();
  }

其中调用env.sql()这个方法说明它本质没能真正脱离Flink Table&SQL

设置完成之后,通过调用StreamExecutionEnvironment#getStreamGraph就可以自动获得JobGraph对象,因此JobGraph的生成还是由Flink 自己提供的,而AthenaX只需要拼凑触发该对象的生成。

生成后会通过flink的yarn client实现,将JobGraph提交给YARN集群,并启动Flink运行时执行Job。

而具体的触发机制,这里AthenX采用了运行时执行构造命令行执行JobCompiler的方法,然后利用套接字+标准输出重定向的方式,来模拟UNIX PIPELINE,事实上个人认为没必要这么绕弯路,直接调用就行了。

解析器的代码生成

值得一提的是,parser涉及到具体的语法,这一块为了体现灵活性。AthenaX将解析器的实现类跟SQL语法绑定在一起通过fmpp(文本模板预处理器)的形式进行代码生成。

fmpp是一个支持freemark语法的文本预处理器。

athenax-vm-api

这个模块就是Athenax提供给用户的去实现的一些API接口,它们是:

  • function:各种函数的rich化(open/close方法对)扩展;
  • catalog:table / source、sink的映射;
  • sink provider:sink的扩展接口;

athennax-vm-connectors

开放给用户去扩展的连接器,目前只提供了kafka这一个连接器的实现。

总结

AthenaX代码量不大且不复杂,但是它提供了一个对Flink进行扩展以利用其运行时的一种机制。

原文发布时间为:2017-11-19

本文作者:vinoYang

本文来自合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

时间: 2024-12-03 07:46:32

Uber Athenax项目核心技术点剖析的相关文章

工信部:百余物联网扶持项目核心技术存短板

硅谷网讯 6月17日晚间,工业和信息化部在其官网公布了2014年物联网发展专项资金拟支持项目名单,共计101个企业项目. 其中也有来自于浪潮软件.华工科技.理工监测.风帆股份.四创电子.皇氏乳业.榕基软件.易联众等20多家上市公司的项目入围. 据记者了解,"物联网发展专项资金"由财政部.工信部共同设立,自2011年以来累计安排物联网专项资金15亿元,陆续支持了500多个研发项目.以此简单计算,平均一个项目300万人民币. 工信部在6月13日曾公布了<工业和信息化部2014年物联网

Jquery+JSon+php 实现代码无刷新分页

js代码 var displayCount; var getDataUrl; var bookTableId; var currentIndex; var pageCount; var linkClass; var fields; function InitPageBar(dc, gdu, btId,pc,lc) { displayCount = dc; getDataUrl = gdu; bookTableId = btId; currentIndex = 1; pageCount = pc;

动态菜单栏

问题描述 我想自己写个C/S地框架.想创建1个动态地菜单栏,请问动态地菜单栏怎么弄啊,有没有相关地资料啊 解决方案 解决方案二:具体的我不描述了,个人有个人的做法,代码上大同小异关键还是思路问题可以参考<C#软件项目开发全程剖析>第3章addin树设计或者黄忠成滴<framework设计与应用>有关plug-in插件模块的部分设计解决方案三:怎么个动态法?从数据库里按关系读取吗?例子很多,Down一个看看啦,

每次危机都会催生新巨头,这次也不例外

文章讲的是每次危机都会催生新巨头,这次也不例外,在过去的20年里,每次大规模寒冬过后,互联网领域都会出现新的巨头.如果这次的股市巨震演变为新的危机,什么样的项目更可能赢得有限的资本争夺战?新的巨头可能会出现在哪些领域?哪些机构会成为新的金主? 尽管昨天部分收复失地,但在最近一周中,全球主要的互联网巨头的市值仍然出现了将近10%甚至更多的回调,去年才创下全球最大IPO规模的阿里巴巴,一度跌破发行价,相对最高时的股价近乎腰斩,对未来的悲观情绪似乎有重新占据主流之势. 不过对以变化为不变主题的互联网行

汉鼎咨询深度分析-2010年中国中小板IPO未过会企业大起底

汉鼎咨询统计得出,2010年,中小板共申报公司212 家,其中通过168家,被否37 家,撤报及暂缓表决7家,过会率为85%. 被否企业行业情况:212 家上市公司分布于21个行业,其中机械设备.石化塑胶和电子三个行业市公司数量排后前三甲,占上会总数的近50%. 被否企业按权重通过率情况:最高的是生物制药及医药.机械设备.电器及电子行业,均为95%通过,而采掘业和运输仓储及物流的通过率最低,另有40%.充分体现了国家产业政策和行业的高成长性的要求,对于业务和技术的描述以及核心优势的提炼也提出了更

.net 做的web、win软件,有菜单的功能,大家都是怎么去实现的啊?需要在数据库里面为菜单做一个单独的表Menu表吗?

问题描述 C#.net做的web软件,有菜单的功能,需要将菜单的数据放到一个表中有id.父id.标题.打开的页面地址等,这样就可以只用一个方法打开不同页面并传id到每个打开的页面了,从而在页面显示不同的数据.但在win中每个界面都开的不同,也需要这样来做菜单表吗?好像有点多余啊!多一个菜单项,一般也就多一个界面了,打开界面也好像要写死,不怎么需要传id的值.不知大家在这里都是怎么做的啊? 解决方案 解决方案二:该回复于2009-02-16 09:56:47被版主删除解决方案三:晕s,又见广告!解

加大对存储器国产化的投入

全国人大代表冯丹-- "目前我国存储器在进行国产化,但还缺乏知识产权支撑."全国人大代表.华中科技大学计算机学院院长冯丹建议,加大对存储器项目核心技术研发的投入,特别是在基础性设备和科研上的投入,培育国产存储器产业集群,让相关企业可以长远发展. "存储器与信息安全紧密相关,特别是在一些敏感领域,显得尤为重要."冯丹建议,在国内市场上,更多地推广使用国产存储器设备,带动国产存储器产业发展.此外,为培养网络安全人才,冯丹建议,增加有关高校的招生指标. 培育国产存储器产业

下一代广电网民众从“看”电视到“用”电视

不久的将来,中国人只需坐在家中的电视机前,就能足不出户遍访名山大川,问诊名老中医,享受到远程教育.金融.购物.游戏等便捷服务--未来10年间,中国普通民众有望实现从"看电视"到"用电视",乃至"玩电视"的转变. 中国拥有自主知识产权的下一代广播电视网31日在上海正式进入示范建设阶段.专家预测,这一由科技部.国家广电总局和上海市政府共同推进的示范网络,不仅将会给民众日常生活习惯带来变革,同时也将给相关产业及服务业带来巨大商机,拉动中国内需,推动经济

应对信息安全 国产基础软件亟待技术升级

信息时代,互联网已成为人们日常生活中不可分割的一部分,但随之而来的黑客.木马等网络安全隐患也成为用户的心头大患.在正在召开的两会上,十一届全国人大代表.中创软件董事长兼总裁景新海 提出:"作为一个大国,如果只有应用软件,没有基础软件, 那么在信息安全方面就不可能做到自主.可控,国家的信息化和信息安全将成为无根之木,无法得到可靠的保障."景新海的提议值得我们思考:国产软件企业该怎样加强技术创新?如何推动社会各界加强对国产中间件等基础软件的重视?信息安全隐患拷问技术中国信息产业经历了二十多