作者:简锋
引言
在谈生态之前,我们来聊聊什么是生态。生态是指在某个特定领域,以某个组件为核心衍生出来其他多个组件,这些组件可以间接或者直接用到这个核心组件,然后辅助这个核心组件共同完成一个更大或者更特殊的任务。F 生态圈就是指以F 为核心的生态圈,F 属于大数据生态里的计算环节,只做计算,不做存储。但是在实际工作当中,你会发现往往单独用F 是不够的。比如你的数据是从哪里读出来,F 计算完之后数据又将存到哪里,又怎么消费这些数据。如何利用F 来完成某个垂直领域的特殊任务等等。这些涉及到上下游,或者更高抽象的任务都需要一个强大的生态圈来完成。
F 生态的现状
在讲清楚了什么是生态之后,我们来聊聊目前F 生态的现状。整体而言F 生态还处于相对初级的阶段。F 生态目前主要侧重于各种上下游的connector和对各种集群的支持。
截至目前F 支持的connector有:Kafka,Cassandra,Elasticsearch,Kinesis,RabbitMQ,JDBC,HDFS等等,基本支持所有主流数据源。在集群支持方面,目前F 支持Standalone和YARN。基于目前生态的状况,F 仍然主要应用于流数据的计算。如果要用F 要做其他一些场景(机器学习,交互式分析)就会比较复杂,用户体验上还有很大的提升空间。这也正是F 生态所面临的挑战和机遇。
F 生态的挑战和机遇
F 致力于作为一个批流统一的大数据计算平台,还有很多潜力没有发挥出来,要完全发挥出它的潜力,就需要一个强大的生态系统。总的来说我们可以从2个维度来看这个生态系统:
横向维度。 横向维度的生态主要是为构建一个端到端的解决方案。比如连接上下游数据源的各种connector,与下游机器学习框架的整合,与下游BI工具的整合,方便提交和运维F Job的工具,提供更好交互式分析体验的Notebook。
纵向维度。纵向维度是指更加抽象化F 的计算引擎以适应各种计算场景。比如批流计算的统一,更高计算抽象层Table API,复杂事件处理引擎(CEP),更高机器学习计算框架(F ML),对各种集群框架的适配等等。
下图是对整个F 生态在横向和纵向2个维度的描述。
接下来我会对几个主要的生态点进行逐个阐述
F 对Hive的集成和支持
Apache Hive是一个有将近10年历史的Apache顶级项目。项目最初在MapReduce引擎的基础上封装了SQL,用户不再需要写复杂的MapReduce Job,而只需写简单熟悉的SQL语句,用户的SQL会被翻译成一个或多个MapReduce Job。随着项目的不断演进,Hive的计算引擎发展成可以插拔式,比如,现在Hive就支持MR, Tez, Spark 3种计算引擎。Apache Hive现在已经成为Hadoop生态圈中事实上数据仓库的标准,很多公司的数据仓库系统已经在Hive上运转了很多年。
F 作为一个批流统一的计算框架,与Hive的集成就变得很自然了。比如通过F 来做实时ETL,构建实时数据仓库,然后用Hive SQL做实时数据的查询。
F 社区已经创建了 F -10556 来对Hive更好的集成和支持。主要实现的功能有以下几点:
允许F 访问Hive的元数据
允许F 访问Hive的表数据
F 兼容Hive的数据类型
F 可以使用Hive UDF
可以在F 里使用Hive SQL(包括DML和DDL)
F 社区正在逐渐实现以上功能。如果你想提前体验以上功能,可以试用阿里巴巴开源的 。开源的 已经在元数据( data)和数据层将F 和Hive对接和打通, 用户可以直接用F SQL去查询Hive的数据,真正能够做到在Hive引擎和F 引擎之间的自由切换。为了打通元数据, 重构了F catalog的实现,并且增加了两种catalog,一个是基于内存存储的F InMemoryCatalog,另外一个是能够桥接Hive Store的HiveCatalog。有了这个HiveCatalog,F 作业就能读取Hive的 Data。为了打通数据, 实现了HiveTableSource,使得F job可以直接读取Hive中普通表和分区表的数据。因此,通过这个版本,用户可以使用F SQL读取已有的Hive 和data,做数据处理。未来阿里巴巴将在F 上继续加大对Hive兼容性的支持,包括支持Hive特有的query,data type,和Hive UDF等等,这些改进都会陆续回馈到F 社区。
F 对交互式分析的支持
批处理是流处理之外另一个更大的应用场景。而交互式分析又是批处理的一个大类,特别对于数据分析师和数据科学家,交互式分析尤为重要。
对于交互式分析,F 本身需要做进一步的改进,以提高F 在交互式分析方面的性能要求。比如 F -11199,现在在同一个F App中的多个Job之间是没法共享数据的,每个Job的DAG是独立的,F -11199 就是要解决这个问题,从而对交互式分析提供更友好的支持。
此外,我们需要提供一个交互式分析的平台让数据分析师/数据科学家更高效得使用F 。在这方面Apache Zeppelin已经做了很多工作。 Apache Zeppelin也是Apache的顶级项目,Zeppelin提供一个交互式开发环境,支持Scala,Python,SQL等多种语言,此外Zeppelin天然具有极强的可扩展性,支持多种大数据引擎,比如Spark,Hive,Pig等等。阿里巴巴做了大量的工作让Zeppelin能够更好的支持F 。用户可以直接在Zeppelin里面写F 代码(Scala或者SQL),而不用在本地打包,然后用bin/f 脚本来手动提交Job,在Zeppelin里你可以直接提交Job,然后看到Job的结果,Job结果既可以是文本形式,也可以是可视化出来,特别对于SQL的结果,可视化尤为显得重要。下面这些是Zeppelin对F 支持的一些要点:
支持3种运行模式:Local, Remote和Yarn
支持运行Scala,Batch Sql和Stream Sql
支持可视化静态table和动态table
自动关联Job URL
支持Cancel Job
支持F job的savepoint
支持ZeppelinContext的高级功能,比如创建控件
提供3个tutorial notes: Streaming ETL, F Batch Tutorial, F Stream Tutorial
这些改动有些是在F 上的,有些是在Zeppelin上的。在这些改动全部推回F 和Zeppelin社区之前,大家可以使用这个Zeppelin Docker Image ( 开源文档里的examples中有具体如何下载安装的细节)来测试和使用这些功能。为了方便用户试用,我们在这一版zeppelin中提供3个built-in的F tutorial的例子: 一个是做Streaming ETL的例子, 另外两个分别是做F Batch, F Stream的基础样例。具体如何使用,可以参考以下2个链接
F 对机器学习的支持
F 作为一个大数据架构中最重要的计算引擎组件,目前主要的应用场景还是在做传统的数据计算和处理,也就是传统的BI(比如实时数据仓库,实时统计报表等等)。而21世纪将是一个AI爆发的世纪,越来越多的企业和行业开始启用AI技术来重新革命自己的行业。F 作为一个大数据计算引擎在这一革命中不可或缺。虽然F 并不是为机器学习而生的,但是在机器学习中也将扮演不可或缺的角色。未来F 在机器学习领域主要有3件大事可以做
机器学习Pipeline的构建
传统机器学习算法的支持
与其他深度学习框架的整合
机器学习主要分2个阶段:Training和Predication。但Training和Predication只是做机器学习的一小部分,在Training之前要做数据的清洗,转换以及Normalization等等,Training之后要做Model的Evaluation。Predication阶段也是如此。对于一个复杂的机器学习系统,如何将每个步骤很好的整合起来对于一个系统的健壮性和可扩展性显得尤为重要。F -11095 就是社区为此正在做的努力。
目前F 有个f -ml的模块实现了一些传统的机器学习方法,但是仍然需要进一步的改进。
对于深度学习的支持,F 社区也在这个领域也在积极努力。阿里巴巴内部有TensorFlow on F 的项目,用户可以在F Job中运行Tensorflow,F 做数据处理,然后将处理完之后的数据发送给Tensorflow的Python进程做深度学习训练。在语言层面,F 正在做对Python的支持。目前F 只支持Java和Scala的API。这2种语言都是基于JVM的语言,比较适合做系统的大数据工程师,而不适合做数据分析的Data Analyst和做机器学习的Data Scientist。做数据分析和机器学习的人一般会比较喜欢用Python和R等这类更高级的语言。目前F 社区也在这方面努力,首先F 会支持Python, 社区已经在这块开始讨论,因为Python在近几年发展的特别快,这主要得益于AI和Deep Learning的发展。目前流行的Deep Learning的library都提供Python的API,比如TensorFlow,Pytorch,Keras等等。通过对Python语言的支持,用户可以用一种语言将整个机器学习的Pipeline串接起来,从而提高开发的效率。
F Job的提交和运维
在开发环境里,一般是通过执行shell 命令 bin/f run 来提交F Job。但在真正生产环境里面,这种方式就会有很多问题。比如如何跟踪管理Job的状态,在Job失败的情况下如何重试,如何并发启动多个F Job,如何方便修改提交Job的参数等等。这些问题虽然可以通过人工干预来解决,但在生产环境里人工干预是最危险的,能自动化的操作我们都要将其自动化。在F 生态圈里目前的确缺少这样一个工具。阿里巴巴内部已经有了这样一个工具,而且在生产环境里稳定运行了很长时间,已经被实践证明是一个可靠稳定的提交和运维F Job的工具。目前阿里巴巴正在准备开源这个项目,剥离一些阿里巴巴内部依赖的组件,预计2019年上半年会开源。
总的来说,F 生态目前问题很多,机会也很多。Apache F 社区在不断努力去构建一个更加强大的F 生态来发挥其强大的计算引擎能力,希望有志参与其中的人可以积极参与,让我们一起努力来构建一个健康强大的F 生态圈。
更多资讯请访问 Apache F 中文社区网站
继续阅读与本文标签相同的文章
-
springboot数据库主从方案
2026-05-18栏目: 教程
-
如何查找前置补丁-Windows安装补丁提示需要安装前置补丁
2026-05-18栏目: 教程
-
月活用户达7.55亿,阿里淘系如何在后流量时代引爆用户增长? | 9月17号栖夜读
2026-05-18栏目: 教程
-
B树和B+树索引原理
2026-05-18栏目: 教程
-
汇编(八)[bx] 、Loop指令
2026-05-18栏目: 教程
