SlideShare una empresa de Scribd logo
1 de 25
FeatHub: 流批一体的实时特征工程平台
林东
阿里巴巴高级技术专家
Apache Flink/Kafka committer
01 为什么需要FeatHub
02 FeatHub架构和概念
03 FeatHub API展示
01 为什么需要FeatHub
目标场景
需要Python环境的
数据科学家
生成实时特征 需要开源方案
支持多云部署
实时特征工程的痛点
开发难度高 部署难度高 监控难度高 分享难度高
特征穿越
需要手动翻译
性能压力大
特征分布变化 开发工作重复
point-in-time correct语
义
时间 用户ID 最近2分钟点击数
5:00 1 5
6:00 1 10
7:00 1 6
时间 用户ID Label
5:02 1 1
6:03 1 0
6:10 1 1
7:05 1 0
时间 用户ID 最近2分钟点击数 Label
5:02 1 6 1
6:03 1 6 0
6:10 1 6 1
7:05 1 6 0
错误的join
多版本特征
样本数据
训练数据
point-in-time correct语
义
时间 用户ID 最近2分钟点击数
5:00 1 5
6:00 1 10
7:00 1 6
时间 用户ID Label
5:02 1 1
6:03 1 0
6:10 1 1
7:05 1 0
时间 用户ID 最近2分钟点击数 Label
5:02 1 5 1
6:03 1 10 0
6:10 1 10 1
7:05 1 6 0
正确的join
多版本特征
样本数据
训练数据
Feature Store的核心场景
特征开发 特征部署 特征监控 特征分享
Feature Store的核心场景
特征开发 特征部署 特征监控 特征分享
SDK 执行引擎 特征储存 指标 报警 注册 搜索
Feature Store的核心场景
特征开发 特征部署 特征监控 特征分享
SDK 执行引擎 特征储存 指标 报警 注册 搜索
简单易用
point-in-time correct
语义
高吞吐
实时特征
离线储存
在线储存
数值分布变化
实时监控
简单易用
Python SDK 简单易用
快速生产部署
快速开发实验
高性能实时特征
代码开源
处理引擎可扩展
为什么需要FeatHub
02 FeatHub架构和概念
架构
架构 (续)
核心概念
TableDecscriptor TableDecscriptor TableDecscriptor
Transform Transform
TableDecscriptor
FeatureTable
保存在储存上的
物理特征表
FeatureView
从FeatureTable计算得到的
逻辑特征表
DerivedFeatureView SlidingFeatureView OnDemandFeatureView
Transform
Expression Join
OverWindow SlidingWindow
PythonUDF
核心概念 (续)
FlinkProcessor
LocalProcessor SparkProcessor
Processor
Source Sink
Table Table
KafkaSource
FIleSystem
Source
HiveSource KafkaSink
FileSystemSink RedisSink
HiveSink
03 FeatHub API展示
特征计算功能
f_price = Feature(
name="price",
dtype=types.Float32,
transform=JoinTransform(
table_name="price_updates",
feature_name="price"
),
keys=["item_id"],
)
f_total_payment_last_two_minutes = Feature(
name="total_payment_last_two_minutes",
dtype=types.Float32,
transform=SlidingWindowTransform(
expr="item_count * price",
agg_func="SUM",
window_size=timedelta(minutes=2),
step_size=timedelta(minutes=1),
group_by_keys=["user_id"]
)
)
f_total_payment_last_two_minutes = Feature(
name="total_payment_last_two_minutes",
dtype=types.Float32,
transform=OverWindowTransform(
expr="item_count * price",
agg_func="SUM",
window_size=timedelta(minutes=2),
group_by_keys=["user_id"]
)
)
特征拼接 Over窗口聚合 滑动窗口聚合
f_trip_time_duration = Feature(
name="f_trip_time_duration",
dtype=types.Int32, FeatHub性能优化
transform=
"UNIX_TIMESTAMP(taxi_dropoff_datetime) -
UNIX_TIMESTAMP(taxi_pickup_datetime)",
)
内置函数调用
f_lower_case_name = Feature(
name="lower_case_name",
dtype=types.String,
transform=PythonUdfTransform(lambda row: row["name"].lower()),
)
Python UDF调用
样例场景
Purchase Events
- user_id (PK)
- item_id
- item_count
- timestamp
Item Price Events
- item_id (PK)
- price
- timestamp
拼接
- user_id (PK)
- item_id
- item_count
- price
- timestamp
聚合
- user_id (PK)
- item_id
- item_count
- price
- total_payment_last_two_minutes
- timestamp
生成机器学习训练数据集
样例代码
client = FeathubClient(
config={
"processor": {
"processor_type": "flink",
"flink": {
"rest.address": "localhost",
"rest.port":" 8081"
},
},
...
}
)
f_total_payment_last_two_minutes = Feature(
name="total_payment_last_two_minutes",
dtype=types.Float32,
transform=OverWindowTransform(
expr="item_count * price",
agg_func="SUM",
window_size=timedelta(minutes=2),
group_by_keys=["user_id"],
),
)
purchase_events_with_features =
DerivedFeatureView(
name="purchase_events_with_features",
source=purchase_events_source,
features=[
"item_price_events.price",
f_total_payment_last_two_minutes,
],
keep_source_fields=True,
)
purchase_events_source = FileSystemSource(
name="purchase_events",
path="/tmp/data/purchase_events.json",
data_format="json",
schema=purchase_events_schema,
timestamp_field="timestamp",
timestamp_format="%Y-%m-%d %H:%M:%S",
)
item_price_events_source = FileSystemSource(
name="item_price_events",
path="/tmp/data/item_price_events.json",
data_format="json",
schema=item_price_events_schema,
keys=["item_id"],
timestamp_field="timestamp",
timestamp_format="%Y-%m-%d %H:%M:%S",
)
创建FeatHub
Client
创建Source 创建FeatureView
样例代码 (续)
result_table = client.get_features(
features=purchase_events_with_features
)
result_table_df = result_table.to_pandas()
print(result_table_df)
hdfs_sink = FileSystemSink(
path="/tmp/data/output.json",
data_format="CSV"
)
获取特征到本地Pandas
DF
创建Sink 输出特征到离线储存HDFS
result_table.execute_insert(
sink=hdfs_sink,
allow_overwrite=True
)
FeatHub性能优化
• 滑动窗口聚合的特征仅在特征数值变化时输出数据,减少网络带宽使用
• 滑动窗口聚合的特征在窗口为空的时候输出数据,无需下游周期性扫描数据来移除过期数据
• 提供高性能内置UDAF (e.g. VALUE_COUNTS),减少稀疏特征的网络带宽使用量
• E.g. 最近一分钟每个用户点击每种产品分类的数量
• 滑动窗口聚合的特征共用状态,减少计算量和内存使用 (尚未完成)
• E.g. 同时计算最近1分钟/5分钟/10分钟/30分钟内的用户点击数
• …
FeatHub未来工作
• 完善LocalProcessor和FlinkProcessor的功能和性能
• 支持常用的离线/在线储存 (e.g. HDFS, Redis)
• 支持对接Notebook
• 提供可视化UI来访问特征元数据 (e.g. 特征定义,特征血缘)
• 支持特征质量监控和报警
• 支持Spark作为处理引擎
• 支持特征授权,鉴权,审计等企业级功能
• …
欢迎加入FeatHub社区
FeatHub代码库:https://github.com/alibaba/feathub
FeatHub代码样例:https://github.com/flink-extended/feathub-
examples
THANK YOU
谢 谢 观 看

Más contenido relacionado

La actualidad más candente

Hadoop REST API Security with Apache Knox Gateway
Hadoop REST API Security with Apache Knox GatewayHadoop REST API Security with Apache Knox Gateway
Hadoop REST API Security with Apache Knox Gateway
DataWorks Summit
 

La actualidad más candente (20)

Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
KubeConRecap_nakamura.pdf
KubeConRecap_nakamura.pdfKubeConRecap_nakamura.pdf
KubeConRecap_nakamura.pdf
 
Alfresco 5.2 REST API
Alfresco 5.2 REST APIAlfresco 5.2 REST API
Alfresco 5.2 REST API
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Introducing ELK
Introducing ELKIntroducing ELK
Introducing ELK
 
Obsのプラグイン作ってみた
Obsのプラグイン作ってみたObsのプラグイン作ってみた
Obsのプラグイン作ってみた
 
API Gateway - ヘッダー/クエリー変換、認証・認可機能詳細
API Gateway - ヘッダー/クエリー変換、認証・認可機能詳細API Gateway - ヘッダー/クエリー変換、認証・認可機能詳細
API Gateway - ヘッダー/クエリー変換、認証・認可機能詳細
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
 
Hadoop REST API Security with Apache Knox Gateway
Hadoop REST API Security with Apache Knox GatewayHadoop REST API Security with Apache Knox Gateway
Hadoop REST API Security with Apache Knox Gateway
 
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
 
Amazon GameLift FlexMatch
Amazon GameLift FlexMatchAmazon GameLift FlexMatch
Amazon GameLift FlexMatch
 
FeatHub_DataFun_2023.pptx
FeatHub_DataFun_2023.pptxFeatHub_DataFun_2023.pptx
FeatHub_DataFun_2023.pptx
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
 
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
 
Amebaにおけるログ解析基盤Patriotの活用事例
Amebaにおけるログ解析基盤Patriotの活用事例Amebaにおけるログ解析基盤Patriotの活用事例
Amebaにおけるログ解析基盤Patriotの活用事例
 

Similar a FeatHub_FFA_2022

Phalcon the fastest php framework 阿土伯
Phalcon   the fastest php framework 阿土伯Phalcon   the fastest php framework 阿土伯
Phalcon the fastest php framework 阿土伯
Hash Lin
 
GaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfGaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdf
Leon Gao(高磊)
 

Similar a FeatHub_FFA_2022 (20)

FeatHub_GAIDC_2022.pptx
FeatHub_GAIDC_2022.pptxFeatHub_GAIDC_2022.pptx
FeatHub_GAIDC_2022.pptx
 
Scaling Offline Database Usage On GCP @ Dcard
Scaling Offline Database Usage On GCP @ DcardScaling Offline Database Usage On GCP @ Dcard
Scaling Offline Database Usage On GCP @ Dcard
 
Python在移动社交平台中的应用
Python在移动社交平台中的应用Python在移动社交平台中的应用
Python在移动社交平台中的应用
 
Phalcon the fastest php framework 阿土伯
Phalcon   the fastest php framework 阿土伯Phalcon   the fastest php framework 阿土伯
Phalcon the fastest php framework 阿土伯
 
Phalcon phpconftw2012
Phalcon phpconftw2012Phalcon phpconftw2012
Phalcon phpconftw2012
 
基于 lucene 的站内搜索
基于 lucene 的站内搜索基于 lucene 的站内搜索
基于 lucene 的站内搜索
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
JCConf 2015 TW 高效率資料爬蟲組合包
JCConf 2015 TW 高效率資料爬蟲組合包JCConf 2015 TW 高效率資料爬蟲組合包
JCConf 2015 TW 高效率資料爬蟲組合包
 
Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Streaming architecture zx_dec2015
Streaming architecture zx_dec2015
 
HiveSQL如何平迁到FlinkSQL
HiveSQL如何平迁到FlinkSQLHiveSQL如何平迁到FlinkSQL
HiveSQL如何平迁到FlinkSQL
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Kamigo reviews 20191127
Kamigo reviews 20191127Kamigo reviews 20191127
Kamigo reviews 20191127
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
 
GaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdfGaoLei\'s Summer Intern Report.pdf
GaoLei\'s Summer Intern Report.pdf
 
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
 
Intro to Dialogflow Chatbot Development
Intro to Dialogflow Chatbot DevelopmentIntro to Dialogflow Chatbot Development
Intro to Dialogflow Chatbot Development
 
LikeCoin SDK 及 API 分享
LikeCoin SDK 及 API 分享LikeCoin SDK 及 API 分享
LikeCoin SDK 及 API 分享
 
Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)
 
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
 
Python与抓包
Python与抓包Python与抓包
Python与抓包
 

FeatHub_FFA_2022

Notas del editor

  1. 开发难度高:需要较大的工作量来避免特征穿越问题 部署难度高:数据科学家需要工程师支持完成特征的高性能在线部署 监控难度高:需要较大的工作量来发现和解决特征质量问题 分享难度高:缺乏元数据中心来方便开发者注册/搜索/复用特征定义和特征数据
  2. 特征开发:提供简单易用的SDK来定义特征,避免特征穿越问题,提升开发效率 特征部署:将特征定义自动翻译成高性能分布式数据处理作业 (e.g. Flink, Spark),减少额外的开发工作 特征监控:提供丰富的metric以及报警,来及时发现,定位以及解决特征质量问题,提升机器学习推理效果 特征分享:提供SDK以及UI来方便开发者注册,搜索和读取特征。鼓励合作分享,减少重复的开发工作
  3. 特征开发:提供简单易用的SDK来定义特征,避免特征穿越问题,提升开发效率 特征部署:将特征定义自动翻译成高性能分布式数据处理作业 (e.g. Flink, Spark),减少额外的开发工作 特征监控:提供丰富的metric以及报警,来及时发现,定位以及解决特征质量问题,提升机器学习推理效果 特征分享:提供SDK以及UI来方便开发者注册,搜索和读取特征。鼓励合作分享,减少重复的开发工作
  4. 容易使用的特征开发SDK 支持丰富的数据源和数据储存 定义具有point-in-time correctness的丰富的特征计算逻辑 特征部署/计算/储存 输出特征到离线存储 (e.g. HDFS) 用于离线训练 输出特征到在线存储 (e.g. Redis) 用于在线推理,支持基于时间的覆盖规则 提供高吞吐,低延迟的实时特征计算 特征质量监控 监控特征作业延迟,稳定性 etc. 监控特征数值分布变化,异常数值比例 etc. 特征元数据中心 支持特征注册,搜索和读取
  5. SDK简单易用:基于Python的SDK,可以插入Python/Java/C++ UDF, 贴近数据科学家的开发习惯 支持快速实验:数据科学家可以在单机运行实验,无需依赖远程分布式集群 支持快速部署:数据科学家无需改代码就能完成从实验到生产的切换 支持实时特征:支持基于Flink的原生实时特征计算,实现流批一体 处理引擎可扩展: 处理引擎框架能被扩展来支持Spark, 公司内部自研的引擎 etc. 开源且支持本地化部署:支持多云,不绑定任何云服务
  6. TableDescriptor – 声明式的table定义,代表一组特征 FeatureTable – 代表具有物理位置的table (e.g. KafkaSource, FileSystemSink) FeatureView – 代表对某个table应用Transform逻辑所得到的table DerivedFeatureView – 支持单行计算,Over窗口聚合,以及table join SlidingFeatureView – 支持单行计算和滑动窗口聚合 OnDemandFeatureView – 支持单行计算和table join。用于特征在线计算 Transformation – 声明式的特征计算逻辑 ExpressionTransform – 表达单行的计算逻辑 (e.g. x + y * z) JoinTransform – 表达多个table之间的特征拼接 OverWindowTransform – 表达基于Over窗口聚合的计算逻辑 SlidingWindowTransform – 表达基于滑动窗口聚合的计算逻辑 PythonUDFTransform – 支持用户自定义的Python UDF …
  7. Processor – 可插拔的计算引擎,用于特征ETL LocalProcessor – 使用单机上的CPU来执行特征ETL,方便单机开发调试,无需依赖分布式集群 FlinkProcessor – 使用分布式Flink集群来执行特征ETL,提供生产所需的高并发,稳定性 etc. … Feature Registry – 特征元数据中心,用于特征注册,搜索和读取 LocalRegistry – 使用单机上的内存来储存特征元数据,方便单机开发调试 … FeatureService - 特征在线服务,用于计算/读取/拼接在线特征 LocalFeatureService – 使用单机上的CPU来计算在线特征,方便单机开发调试 …