For 小米在Open Data Catalog AI的实践 (小米我服)

For 小米在Open Data Catalog AI的实践 (小米我服)

小米在Open></div><div><div><div contenteditable=

本文主要介绍在数据驱动和 AI 时代 Open>

1 数据驱动时代的 Open>

在当今以数据为驱动的商业环境中,数据的价值不仅取决于其规模,更在于其质量和可用性。Open>

2 Open>

在人工智能时代,数据成为了创新和决策的核心资源。Open>

1. 数据治理与数据安全:安全可信数据环境的基石

数据治理和数据安全是构建一个安全可信数据环境的基石。Open>

2. 数据的互操作性与数据质量:数据协作的桥梁

Open>

3.>

Open>

3 小米基于 Apache Gravitino 的 AI 数据管理实践

1. 小米 AI 数据管理的痛点

小米公司作为一家领先的科技公司,其业务运营中积累了大量的非结构化数据。然而,这些数据的复杂性给数据管理带来了一系列挑战:

2. Fileset 的技术原理

为了解决上述问题,小米引入了 Gravitino,并与社区一起跟进了 Fileset 的能力构建。Fileset 提供了一个逻辑文件集的抽象,可以托管实际的物理存储如 HDFS、S3、OSS、JuiceFS 等,并且通过 catalog.schema.fileset 三级结构进行标识。

此外,Fileset 提供了在 Java 和 Python 环境下统一的访问协议 gvfs。对于 Java 体系,Fileset 实现了 GravitinoVirtualFileSystem 代理底层真实存储的 Hadoop Filesystem 实现,因此可以无缝对接 Spark、Flink 等常用的大数据计算引擎 。对于 Python 体系则提供了 fsspec 支持以纯 python 的方式进行读写访问。

Fileset 统一了文件存储的权限管理和使用方式,极大降低了用户的接入和使用成本。Fileset 的逻辑目录抽象与底层真实物理存储解耦,对用户屏蔽底层的存储细节,这也给文件存储介质的迁移提供了便利性。如下图所示,用户通过修改 Fileset location 可以实现底层存储介质从 HDFS 切换至 OSS,而不需要修改用户代码。

3. 小米的 AI 数据资产治理实践

通过 Fileset 小米有效的管理了非结构化数据,包括训练数据、模型数据、数据库备份数据、引擎 checkpoint、作业 Jar 包、配置文件等。Fileset 托管非表格数据加深用户对非表格数据的数据资产理念,使非表格数据可识别、可搜索、可统计、可治理。

我们对 Fileset 的子目录进行了约束限制以更好的规范用户的使用和进行生命周期的管理。我们在产品上为用户预设了几种日期格式的子目录规范,用户可以根据自己的需求选择合适的子目录格式并设置生命周期,我们将在后台进行过期数据的清理操作。规范的目录使用不仅帮助我们对 Fileset 进行有效的生命周期管理,更方便对不同目录的分层存储,例如将高频访问数据存放在 HDFS,对于低频访问数据存放在对象标准存储,对于无访问的数据进行归档操作。

相比文件在多个用户共用,使用 Fileset 管理文件可以支持更加细粒度的权限控制。在 Fileset 元数据层面,我们使用 Ranger 管理 Fileset 的读写权限信息,对于实际的数据存储 HDFS,则以 Fileset 的粒度对底层的 HDFS location 进行授权和鉴权。

4. 业务使用案例

非表格数据在小米的算法场景有着广泛的使用,但在业务使用过程中有着较多痛点:

针对这些痛点,我们基于 Fileset 覆盖了特征处理、模型训练、数据分析等算法训练的全流程,提高数据质量和数据流转效率。

1. Spark 特征处理

用户会使用 Spark 或 PySpark 对原始数据进行清洗、转换和特征提取。小米的一个典型场景是通过 Spark 进行数据处理后产出 tfrecord 数据提供给下游 Tensorflow 进行算法训练使用。代码示例如下。

// read a iceberg tabledf = spark.table("iceberg_catalog.database.table") .select('col1', 'col2') .where('date=20240401')// feature processingassembler = VectorAssembler(inputCols=["feature1", "feature2", ...], outputCol="features")df_features = assembler.transform(df)// use spark to write a tfrecord fileset.val outputPath = "gvfs://fileset/fileset_catalog/database/fileset_name/date=20240204/hour=00"df_features.write().format("tfrecord").mode(SaveMode.Overwrite).save(outputPath)
复制代码

2. Tensorflow 算法训练

在算法训练场景,我们适配了 tensorflow 框架支持原生的 gvfs 协议进行读写访问 Fileset,用户代码只需要修改路径即可实现 Fileset 的访问。

// read a tfrecord in tensorflowdata_dir = "gvfs://fileset/fileset_catalog/database/fileset_name/date=20240204/"filenames = tf.data.Dataset.list_files(data_dir.split(','), shuffle=True)data = filenames.apply(tf.contrib.data.parallel_interleave(lambda filename: tf.data.TFRecordDataset(filename),cycle_length=48,block_length=1024,prefetch_input_elements=1024 * 1,buffer_output_elements=1024 * 1,sloppy=True
复制代码

3. 数据分析

在算法开发过程中,经常需要对文件进行预览和简单的查询分析。因此我们支持使用 spark sql 对 parquet、csv 等进行查询分析。

// use spark sql to read a csv file._c0 as col0,split(_c1, ',')[0] as col1 csv.`gvfs://fileset/fileset_catalog/database/fileset_name/date=20230130/config.csv` limit 10
复制代码

对于其他类型的文件,我们也支持了 python gvfs 进行交互式查询分析。

import pandas as pdfrom gravitino import gvfs# pandas + pygvfs to write a filedata = pd.DataFrame({'Name':['test']}, 'ID':[20])storage_options = {'server_uri': server_uri, 'metalake_name': metalake_name}data.to_csv('gvfs://fileset/fileset_catalog/database/fileset_name/date=20240310/test/test.csv', storage_options=storage_options)# list a directoryfs = gvfs.GravitinoVirtualFileSystem(server_uri, metalake_name)print(fs.ls('gvfs://fileset/fileset_catalog/database/fileset_name/date=20240310'))# use pygvfs to read a filewith fs.open(path='gvfs://fileset/fileset_catalog/database/fileset_name/date=20240310/test/test.csv', mode='rd') as file:print(file.read().decode('utf-8'))
复制代码

未来规划

未来小米会在以下方向继续推进对 Gravitino 的整合:

4 总结

小米公司通过 Apache Gravitino(incubating) 及 Fileset 有效管理非表格数据,显著提升了数据管理的效率和数据隐私安全性,并降低企业成本,在实际落地中取得了理想的效果。随着开源社区的快速发展和功能的不断完善,Gravitino 有望成为下一代开放数据目录的事实标准,进一步推动数据管理和 AI 领域的融合与发展。

作者简介

李培殿 ,小米数据湖研发工程师,目前负责数据湖 Iceberg, Paimon 数据湖研发及元数据组件 Gravitino 落地研发相关工作。

今日好文推荐

剥离几百万行代码,复制核心算法去美国?TikTok 最新回应来了

GitHub 删除代码等于“任何人均可永久访问”!微软回应:我们有意为之

中科大保卫处要求硕士以上学历,校方回应:偏技术型;字节跳动“代码抄袭”案在美获受理;私人文档被“投喂”豆包?官方否认 | Q资讯

程序员三个月前就攻破并玩透的 SearchGPT,OpenAI 可算发布了

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。