Apache Flink的挑战与机遇

在这篇博客文章中,我们讨论了Apache Flink以及其生态系统在面临许多挑战的同时,在机器学习领域可能会发生一些令人惊喜的事情的可能性。

此博客为英文版本的翻译。您可以在此处查看原始版本。部分内容使用机器翻译。如果有错误的地方,请指正,感激不尽。

作者Jian Feng

在讨论Apache Flink的生态系统之前,首先让我们了解一下什么是生态系统。在IT领域,生态系统是由共同的核心组件衍生而来的组件社区,通过直接或间接地利用这些核心组件并与其一起使用,可以达到更大或更特殊类型的任务。接下来,Flink的生态系统指的是围绕Flink作为核心组件的生态系统。

在大数据生态系统中,Flink是一个只处理计算方面的计算组件,并且不涉及任何自有的存储系统。但是,在许多实际应用场景中,您可能会意识到仅靠Flink无法满足要求。例如,需要考虑从哪里读取数据,将Flink处理的数据保存在哪里,如何消费数据,以及如何使用Flink来实现特殊任务在竖直业务领域等。为了实现这些任务,不仅需要考虑下游和上游两个方面,还需要一个强大的生态系统来提供更高级的抽象。

Flink生态系统的现状

了解什么是生态系统后,我们来谈谈Flink生态系统的现状。总体来看,Flink生态系统仍处于初期阶段。目前,Flink的生态系统主要支持上游和下游的各种连接器以及几种类型的集群。

Flink目前可以列举出一整天支持的连接器。但是,如果要举出一些,它们包括Kafka、Cassandra、Elasticsearch、Kinesis、RabbitMQ、JDBC和HDFS。另外,Flink几乎支持所有主要的数据源。就集群而言,目前Flink支持Standalone和YARN。从这个生态系统的现状来看,Flink主要用于流数据计算。在其他场景(如机器学习和交互式分析)中使用Flink可能会变得相对复杂,这些场景中的用户体验仍有很大的改进空间。然而,毫无疑问,尽管面临这些挑战,Flink生态系统仍有很多机会。

Flink生态系统的挑战与机会

Flink在主要扮演着用于批处理和流处理的大数据计算平台的角色,但除此之外,它也具备着巨大的潜力。在我的观点中,为了充分发挥Flink的潜力,我们需要一个更加强大和稳健的生态系统。为了更好地理解Flink,我们可以从两个不同的扩展维度来评估生态系统。

1、在水平方向上的扩展。在水平方向上的扩展方面,生态系统需要构建更完整的端到端解决方案,以适应已经存在的资源。例如,这个解决方案可能包括连接上游和下游的不同数据源的各种连接器,与下游机器学习框架集成,以及与下游BI工具集成,简化Flink作业的提交和维护工具,以及提供更交互式的分析体验的笔记本等。

2、在垂直方向上的扩展。从扩展到其他领域的意义上看,更抽象的Flink生态系统需要满足超出最初预期的计算要求。例如,垂直方向的生态系统包括批和流计算、带有更高级计算抽象化层的表格API、复杂事件处理引擎CEP、Flink ML带有更高级计算框架的机器学习,以及适应各种集群框架等。

下图是假设Flink生态系统在水平和垂直方向上进行扩展的示意图。

image.png

Flink和Hive的整合

Apache Hive是近10年前開發的頂級Apache項目。最初,這個項目在MapReduce之上封裝了SQL語句。用戶只需編寫熟悉的簡單SQL語句,而無需編寫複雜的MapReduce作業。用戶提交的SQL語句將被轉換為一個或多個MapReduce作業。在項目持續演進的過程中,Hive的計算引擎成為了可插拔的。目前,Hive支持三個計算引擎:MR、Tez和Spark。Apache Hive已成為Hadoop生態系統中的數據倉庫行業標準。許多企業多年來一直在Hive上運營數據倉庫系統。

由于Flink是一个集成批处理和流处理的计算框架,理所当然需要与Hive进行集成。例如,如果要使用Flink执行ETL并构建实时数据仓库,那么在实时数据查询时需要使用Hive的SQL。

为了实现与Hive更好的集成和支持,Flink社区已经创建了FLINK-10556。其主要功能如下。

    • FlinkがHiveのメタデータにアクセスできるようにします。

 

    • FlinkがHiveのテーブルデータにアクセスできるようにします。

 

    • FlinkはHiveのデータ型と互換性があります。

 

    • FlinkでHive UDFを使用できます。

 

    FlinkでHive SQLを使用できます(DMLやDDLを含む)。

Flink社区正在采取渐进式的步骤来实现上述功能。如果您想预先尝试这些功能,建议您尝试由阿里巴巴云开发的开源Blink项目。Blink项目将Flink和Hive连接在元数据层和数据层上。用户可以直接使用Flink SQL查询Hive内的数据,或者无缝切换Hive和Flink。为了连接元数据,Blink重新构建了Flink Catalog的实现,并添加了两个Catalog:基于内存的FlinkInMemoryCatalog和连接Hive MetaStore的HiveCatalog。使用HiveCatalog,Flink作业可以从Hive读取元数据。为了连接数据,Blink实现了HiveTableSource,使得Flink作业可以直接从Hive的普通表和分区表中读取数据。因此,通过使用Blink,用户可以使用Flink的SQL加载现有的Hive元数据和数据进行数据处理。阿里巴巴将进一步改善Flink和Hive的兼容性,包括支持Hive特定的查询、数据类型和Hive UDF等。这些改进将逐步贡献给Flink社区。

支持Flink上的交互式分析。

批量处理也是Flink的常见应用场景之一。交互式分析占据了批量处理的大部分,并且对于数据分析师和数据科学家来说尤为重要。

对于交互式分析项目和工具,Flink本身需要进一步增强以改善性能要求。以FLINK-11199为例考虑。目前无法在同一Flink应用程序中多个作业之间共享数据。每个作业的有向无环图(DAG)仍然是分离的。FLINK-11199旨在解决这个问题,并更友好地支持交互式分析。

此外,为了使数据分析师和数据科学家能够更有效地使用Flink,需要一个交互式分析平台。Apache Zeppelin在这方面做出了很多贡献。Apache Zeppelin提供了交互式开发环境,并支持多种编程语言,如Scala、Python、SQL等。此外,Zeppelin还支持高度的可扩展性,并支持许多大数据引擎,如Spark、Hive、Pig等。阿里巴巴为了实现在Zeppelin中对Flink的更好支持已经付出了很大努力。用户可以在Zeppelin中直接编写Flink代码(Scala或SQL语言)。此外,用户还可以直接在Zeppelin中提交作业并查看作业结果,而不是在本地进行打包,然后执行bin/flink脚本手动提交作业。作业结果可以以文本形式显示,也可以进行可视化。对于SQL结果,可视化尤为重要。Zeppelin主要提供以下对Flink的支持。

    • 3つのrunモード ローカル、リモート、ヤーン

 

    • Scala、バッチSQL、ストリームSQL

 

    • 静的・動的テーブルの可視化

 

    • ジョブURLとの自動関連付け

 

    • ジョブキャンセル

 

    • フリンクのSavepointの求人情報

 

    • コントロールの作成など、ZeppelinContextの高度な機能

 

    3つのチュートリアルノート ストリーミングETL、Flinkバッチチュートリアル、Flinkストリームチュートリアル

这些改变中的一些已经在Flink中实现,一些已经在Zeppelin中实现。在这些改变被贡献给Flink社区和Zeppelin社区之前,您可以使用这个Zeppelin Docker镜像来测试和使用这些功能。有关Zeppelin Docker镜像的下载和安装详细信息,请参考Blink文档中的示例。为了让用户更方便地尝试这些功能,这个版本的Zeppelin添加了三个内置的Flink教程。其中一个示例展示了Streaming ETL的例子,另外两个示例展示了Flink Batch和Flink Stream的例子。

# 在Flink中支持机器学习。

image.png

作为大数据生态系统中最重要的计算引擎组件,Flink目前主要用于传统数据计算和处理领域,即传统商业智能(即BI)(例如实时数据仓库和实时统计报告)。然而,21世纪是人工智能(AI)时代。许多不同行业的公司已经选择使用AI技术来彻底改变业务方式。在这种整个商界变革的浪潮中,可以说Flink是一个不可或缺的大数据计算引擎。虽然Flink并非专为机器学习而开发,但在Flink生态系统中,机器学习扮演着不可或缺的角色。未来,我们期望Flink将提供三个重要功能来支持机器学习。

    • 機械学習のためのパイプラインの構築

 

    • 従来の機械学習アルゴリズムをサポート

 

    • 他のディープラーニングフレームワークとの統合を可能にする

 

    機械学習のパイプラインを見ていると、機械学習は単純にトレーニングと予測の2つの主要なフェーズに煮詰めることができると簡単に思い込むことができます。しかし、トレーニングと予測は機械学習のごく一部に過ぎません。トレーニングの前に、機械学習モデルのためにデータを準備するプロセスでは、データのクリーニング、データの変換、正規化などの作業が不可欠です。そして、訓練後には、モデルの評価も重要なステップです。予測段階でも同じことが言えます。複雑な機械学習システムでは、個々のステップを適切に組み合わせることが、ロバストでスケーラブルな機械学習モデルを生成するための鍵となります。多くの点で、FLINK-11095はこの目標を実現するためにコミュニティが現在取り組んでいるものであり、Flinkはこれらのすべてのステップを通して機械学習モデルを構築する上で重要な役割を果たしています。

目前,Flink的flink-ml模块已经实现了一些传统的机器学习算法,但还需要进一步改进。

Flink社区积极支持深度学习。阿里巴巴提供了TensorFlow on Flink项目,使用户能够在Flink的作业中运行TensorFlow,使用Flink进行数据处理,并将处理后的数据发送到TensorFlow的Python进程中进行深度学习训练。关于编程语言,Flink社区正在致力于Python的支持。目前,Flink仅支持Java和Scala的API,这两种语言都是基于JVM的。因此,目前Flink适用于大数据处理,但对于数据分析和机器学习则不太适用。通常,数据分析和机器学习领域的人更偏爱使用Python或R等高级语言,而Flink社区也计划在不久的将来支持这些语言。Flink首先支持Python是因为随着近年来人工智能和深度学习的发展,Python迅速发展。目前,TensorFlow、Pytorch、Keras等流行的深度学习库都提供Python的API。如果Flink支持Python,用户将能够使用同一种语言连接所有机器学习的流程,从而使开发大幅改善。

Flink任务的提交和维护

在开发环境中,Flink的作业通常是通过shell命令bin/flink run来提交的。然而,如果在生产环境中使用,这种作业提交方式实际上可能引起许多问题。例如,作业状态的跟踪和管理、失败作业的重试、启动多个Flink作业、更改和发送作业参数等可能会变得困难。当然,这些问题可以通过手动干预来解决,但手动干预不仅耗时,而且在生产场景中非常危险。理想情况下,应该自动化所有可以自动化的操作。不幸的是,目前Flink生态系统中没有合适的工具。阿里巴巴已经为内部开发了适当的工具,并在生产环境中使用了很长时间,证明了其作为提交和维护Flink作业的稳定可靠工具。目前,阿里巴巴计划删除一些其内部依赖的组件,并在该项目的源代码上进行开源。该项目将在2019年上半年开源。

总结一下,目前Flink的生态系统存在许多问题,但同时也有许多开发的潜力。Apache Flink的社区非常积极,一直在努力构建更强大的Flink生态系统,以充分发挥Flink的潜力。

你有什么想法吗?你感到灵感了吗?加入社区,一起构建更好的Flink生态系统吧。

這篇部落格是從英文版翻譯而來,原文可以在這裡確認。我們部分使用機器翻譯,如果有任何錯誤,請幫我們指正,謝謝。

广告
将在 10 秒后关闭
bannerAds