Spark与Storm注意:Apache Apex已然横空出世

诞生于2015年6月的Apache Apex可谓横空出世,其同样源自DataTorrent及其令人印象深刻的RTS平台,其中包含一套核心处理引擎,仪表板、诊断与监控工具套件外加专门面向数据科学家用户的图形流编程系统dtAssemble。 2016-04-27 11:01:11 SparkStormApache Apex 云计算正在改变整个ICT世界 云计算已经发展成为一种公共计算服务,一种关键信息基础设施。云计算正在改变整个ICT产业,将被和正在被云计算改变的,还包括创新创业、采购、机器学习、自动驾驶和VR等。当然最重要的,是改变了我们的思维模式和习惯。 2016-04-26 14:13:02 云计算ICT 盘点56个最实用的大数据可视化分析工具 数据可视化技术在现今是一个新兴领域,有越来越多的发展、研究等数据可视化分析,在诸如美国这些国家不断被需求。企业获取数据可视化功能主要通过编程和非编程两类工具实现。 2016-04-26 14:04:29 大数据可视化 网络直播被严查,机器如何帮助鉴别小黄图? 虽然,大多数直播企业会选择人工审核的方式对直播内容进行实时监管,但是在过去的一年多里, “直播造人门”、“直播脱衣门”等事件仍然频繁发生。网络直播行业的内容监管不能只依赖人工,可以采用机器识别结合人工审核的新型审核模式。 2016-04-26 11:00:18 网络直播机器学习视频审核 如何基于数据快速构建用户模型(Persona)? 但在现实中,一般只有很少的成熟公司,产品经理、交互设计师或用户研究人员才会花时间构建用户模型,我们将尝试提出一种基于用户行为数据的快速构建用户模型的方法。

诞生于2015年6月的Apache Apex可谓横空出世,其同样源自DataTorrent及其令人印象深刻的RTS平台,其中包含一套核心处理引擎,仪表板、诊断与监控工具套件外加专门面向数据科学家用户的图形流编程系统dtAssemble。

作为新的开源数据流分析方案,Apex脱胎于DataTorrent的RTS平台,能够带来出色的速度表现并简化编程要求。

[[165748]]

说起数据流分析任务,我们首先想到的自然是Spark。尽管Spark已经凭借着2.0版本将非结构化与结构化两类数据的分析能力融为一体,但Storm的1.0版本解决了自身难于使用的问题。

诞生于2015年6月的Apache Apex可谓横空出世,其同样源自DataTorrent及其令人印象深刻的RTS平台,其中包含一套核心处理引擎,仪表板、诊断与监控工具套件外加专门面向数据科学家用户的图形流编程系统dtAssemble。

作为RTS平台的核心处理引擎,Apex可以说是DataTorrent献给Apache的又一份大礼。Apex的设计目标在于运行大家的现有Hadoop生态系统,并利用YARN实现按需规模伸缩且通过HDFS实现容错能力。尽管其并不像RTS平台那样功能全面,但Apex已经足以提供大家希望数据处理平台所能实现的多数主要功能。

Apex应用示例

下面我们来看一套基本Apex流程示例,其中将涉及多项核心概念。在本示例中,我们将读取Kafka中的日志条目,对日志记录类型进行计数并将其写入控制台当中。相关代码片段将实际列出,大家也可以点击此处获取GitHub上的完整应用。

Apex的核心概念在于operator,其属于Java类,负责实现输入信息接收与输出信息生成。(如果大家熟悉Storm,那么其作用基本类似于bolt与spout。)另外,每个operator还会定义一组用于数据输入或输出的端口。该方法的实际作用在于读取来自InputPort的输入信息,或者通过OutportPort向下游发送数据。

通过operator的数据流将进行建模,即将数据流拆分为基于时间的数据窗口——但与Spark的microbathcing不同,Apex中的输入数据处理无需等待窗口结束即可开始进行。

Spark与Storm注意:Apache Apex已然横空出世

DataTorrent

在以下示例中,我们需要3个operator,它们各自对应三种Apex所支持的operator类型中的一种:输入operator负责由Kafka读取信息条目,通用operator负责对日志类型进行计数,而输出opeartor则将其写入控制台。对于***种与第三种,我们可以直接使用Apex的Malhar库,但在第二种中我们需要使用定制化业务逻辑以对查看到的不同日志类型进行计数。

下面来看我们的LogCounterOperator代码内容:

public class LogCounterOperator extends BaseOperator {

private HashMap counter;

public transient DefaultInputPort input = new DefaultInputPort() {

@Override

public void process(String text) {

String type = text.substring(0, text.indexOf(' '));

Integer currentCounter = counter.getOrDefault(type, 0);

counter.put(type, currentCounter+1);

}

};

public transient DefaultOutputPort> output = new DefaultOutputPort<>();

@Override

public void endWindow() {

output.emit(counter);

}

@Override

public void setup(OperatorContext context){

counter = new HashMap();

}

}

这里我们使用简单的HashMap进行日志类型计数,同时定义2个端口以通过该operator实现数据流处理:其一负责输入,其二负责输出。在输入过程中,不兼容operator将引发编译时失败。需要注意的是,虽然我在这里只定义了1个输入端口与1个输出端口,但大家也可根据需要定义多个端口。

通用opeartor的生命周期非常简单。Apex会首先调用 setup()以进行任何必要的初始化操作;在以上示例中, setup()负责完成HashMap的创建工作。其随后调用beginWindow()以声明新的输入处理窗口/批量任务正在开始,接着在整个过程中对各数据条目调用。如果当前窗口的剩余时间归零,Apex则会调用endWindow()。我们不需要任何针对单一窗口的逻辑,因此将BaseOperator中的beginWindow()定义留空即可。然而,在每个窗口的末尾,我们都需要发送当前计数结果,从而将HashMap通过输出端口进行发送。

与此同时,经过重写的process()方法负责处理我们的业务逻辑,即从日志行中提取***个词并更新计数器。***,我们调用teardown()方法,从而保证Apex流程得到必要的清理——本示例其实并不需要清理,但出于演示的考虑,我们将清理HashMap。

现在我们的operator已经创建完成,接下来需要构建流程本身。如果大家熟悉Storm拓扑结构,那么应该能够轻松理解以下代码:

public void populateDAG(DAG dag, Configuration conf) {

KafkaSinglePortStringInputOperator kafkaInput = dag.addOperator("KafkaInput", new KafkaSinglePortStringInputOperator());

kafkaInput.setIdempotentStorageManager(new IdempotentStorageManager.FSIdempotentStorageManager());

LogCounterOperator logCounter = dag.addOperator("LogCounterOperator", new LogCounterOperator());

ConsoleOutputOperator console = dag.addOperator("Console", new ConsoleOutputOperator());

dag.addStream("LogLines", kafkaInput.outputPort, logCounter.input);

dag.addStream("Console", logCounter.output, console.input);

}

我们首先定义DAG(即operator)节点。之后,我们定义图形边界(在Apex词汇中称其为‘stream’)。这些stream负责将某一operator的输出端口接入另一opeartor的输入端口。在这里,我们将Kafka接入LogCounterOperator,并将输出端口接入ConsoleOutputOperator。工作完成!如果我们编译并运行该应用,则能够在标准输出结果中看到HashMap:

{INFO=1}

{ERROR=1, INFO=1}

{ERROR=1, INFO=2}

{ERROR=1, INFO=2, DEBUG=1}

…

Malhar: 丰富的实用组件

Operator的***优势在于其体积小巧且经过明确定义,因此能够轻松实现构建与测试。其接合方式类似于乐高积木——惟一的区别在于乐高积木是现成的,但operator需要我们自行创建。

Malhar就像是一个巨大的乐高积木桶,其中旋转有大量标准的2 x 4基本件供大家使用。无论是读取Splunk,在FTP站点上合并文本文件信息还是将结果存储在HBase当中,Malhar都能帮助我们实现。

有了Malhar提供的丰富operator组件,Apex就变得***吸引力,这意味着我们只需要设计业务逻辑即可。有时候Malhar operator的说明文档比较粗糙,但该库中的一切都配备有测试机制,因此我们可以轻松查看不同组件间的协作效果。

Apex还提供其它一些出色的设计成果。除了常见的指标与报告方案外,dtCli应用允许我们以动态方式变更运行时中的已提交应用。大家是否希望向HDFS当中添加一些负责写入日志条目的operator,但又不希望影响到应用的整体运行?Apex能够轻松完成这项任务。

开源数据流处理引擎已经相当丰富,但要在其中脱颖而出则绝非易事。随着Malhar库提供的庞大opeartor选项以及Apex自身所具备的出色容错能力、低延迟以及可扩展性,Apex已经成为一款速度出色且可用于生产环境的理想框架。

在这里,我建议DataTorrent为Apache Beam开发一套Apex运行器,从而帮助开发者们更轻松地将自己的应用从现有框架中移植出来。当然,Apex目前已经相当优秀,足以成为值得大家认真考量的数据流处理引擎。

原文链接:Look out, Spark and Storm, here comes Apache Apex

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月6日 02:43
下一篇 2023年5月6日 02:44

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信