写点什么

开源 Querybook:Pinterest 的大数据协作枢纽

  • 2021-04-29
  • 本文字数:2458 字

    阅读完需:约 8 分钟

开源Querybook:Pinterest的大数据协作枢纽

针对日益远程化世界的高效大数据解决方案

 

Pinterest 拥有超过 3000 亿的 Pins,而这一数字背后是一个不断增长的独特数据集,通过数据映射无数人的兴趣、想法和意图。作为一家数据驱动的公司,Pinterest 使用数据洞察和分析技术来做出产品决策和评估,为超过 4.5 亿的月活用户改善 Pinner 的体验。为了持续做出这些改进,尤其是在今天这个日益远程化的世界中,与过去相比,团队更需要进行查询、创建分析并彼此高效协作。今天我们正在使用 Querybook,这是我们实现更高效、更协作的大数据访问的解决方案,我们还在向社区开源这一项目。

 

无论在 Pinterest 上发起任何分析,一个常见起点是可以在 SparkSQL、Hive、Presto 集群或任何 Sqlalchemy 兼容引擎上执行的即席查询。我们构建了 Querybook 来为此类分析提供一个响应快速且简单的 WebUI,以便数据科学家、产品经理和工程师发现正确的数据、构建他们的查询并分享他们的成果。在本文中,我们将讨论构建 Querybook 的动机,其特性、架构以及我们将项目开源的工作。

旅程

创建 Querybook 的提议始于 2017 年,它一开始是一个内部项目。在那时,我们使用的是一个供应商提供的 Web 应用程序作为查询 UI。用户经常抱怨该工具的 UI、速度和稳定性、缺乏可视化、难以分享等缺陷。不久之后,我们意识到人们非常需要一个更好的查询界面。

 

在确定技术细节时,我们开始采访数据科学家和工程师,咨询他们的工作流程的细节。不久,我们意识到大多数人是在官方工具之外组织他们的查询,很多人使用 Evernote 之类的应用。虽然 Jupyter 有自己的笔记本用户体验,但它需要使用 Python/R,而且它缺乏表元数据集成的问题劝退了很多用户。基于这一发现,我们的团队决定 Querybook 的查询界面将是一个文档,用户可以在该文档中通过搭配元数据和一个简单的笔记应用,一站式完成查询构建和编写分析任务。

 

Querybook 于 2018 年 3 月在内部发布,成为了 Pinterest 上查询大数据的官方解决方案。如今,Querybook 平均有 500DAU 和 7k 的每日查询运行。它的内部用户评级为 8.1/10,是 Pinterest 内部评级最高的工具之一。

特性亮点

图 1 Querybook 的 Doc UI

 

用户首次访问时,他们会很快注意到其独特的 DataDoc 界面。这是用户进行查询和分析的主要位置。每个 DataDoc 均由一系列单元格组成,这些单元格可以是以下三种类型之一:文本、查询或图表。

 

  • 文本单元格带有内置的富文本支持,以供用户记下他们的想法或见解。

  • 查询单元格用于组成和执行查询。

  • 图表单元格用于根据执行结果创建可视化效果。类似 Google Docs,授予用户访问 DataDoc 的权限后,他们可以共同实时协作。

 

通过直观的图表 UI,用户可以轻松地将 DataDoc 变成一个展示内容的仪表板。你可以选择多种可视化选项,例如时间序列、饼图、散点图等。然后你可以将可视化连接到 DataDoc 任意查询的结果上,并按需对它们做排序和聚合预处理。要自动更新这些图表,你可以使用计划选项并选择所需的时间安排。计划程序可以通知用户成功或失败的结果。结合 Jinja 提供的模板选项,创建实时更新 DataDoc 的速度非常快。

 

计划任务和可视化特性并不是要取代 Airflow 或 Superset 之类的工具,而是为用户提供了一种简单快速的方法来对其查询进行实验和迭代。Pinterest 工程师通常将 Querybook 用作撰写查询的第一步,之后再创建生产级工作流和仪表板。

 

最后一点也很重要,Querybook 带有一套自动查询分析系统。它可以对每个执行的查询进行分析,以提取元数据(例如引用的表和查询运行器)。Querybook 使用这些信息自动更新其数据模式和搜索排名,并显示表的常用用户和查询示例。查询越多,表的文档化程度就越高。

架构工程

图 2 Querybook 的架构概述

 

为了了解 Querybook 的工作机制,我们来过一遍编写和执行查询的过程。

 

  1. 第一步是创建一个 DataDoc 并将查询写入一个单元格中。当用户键入内容时,用户的查询将通过 Socket.IO 流式传输到服务器。

  2. 然后,服务器将这些增量推送给所有通过 Redis 读取该 DataDoc 的用户。同时,服务器会将更新的 DataDoc 保存在数据库中,并为 worker 创建一个异步作业以更新 ElasticSearch 中的 DataDoc 内容,待以后搜索。

  3. 编写完查询后,用户可以单击运行按钮来执行查询,然后服务器将在数据库中创建一条记录,并将一个查询作业插入到 Redis 任务队列中。上述 worker 接受任务并将查询发送到查询引擎(Presto、Hive、SparkSQL 或任何与 Sqlalchemy 兼容的引擎)。在查询运行时,worker 通过 Socket.IO 将实时更新推送到 UI。

  4. 执行完成后,worker 加载查询结果并将其分批上传到一个可配置的存储服务(例如 S3)中。最后,浏览器将收到查询完成通知,并向服务器发出一个请求以加载查询结果,显示给用户。

 

简短起见,本节仅关注 Querybook 的一个用户流,但已经涵盖了其所使用的所有基础架构。Querybook 允许用户自定义其中的一些部分。例如,你可以选择将执行结果上传到 S3、Google Cloud Storage 或本地文件。另外,MySQL 也可以与任何与 Sqlalchemy 兼容的数据库(例如 Postgres)互换。

开源之路

在注意到 Querybook 在内部取得的成功之后,我们决定将其开源。我们遇到的一个挑战是如何在保留一些特定于 Pinterest 的集成的同时让它适合通用场景。为此,我们决定通过一套插件系统来做一个两层的组织,并添加一个 Admin UI(管理界面)。

 

借助 Admin UI,其他公司可以通过单个友好的界面来配置 Querybook 的查询引擎、表元数据提取和访问权限。以前,这些配置是在配置文件中完成的,需要更改代码并部署才能生效。有了这个新的 UI,管理员无需更改代码或配置文件即可进行实时 Querybook 更改。

图 3 Admin UI

 

插件系统使用 Python 的 importlib 将 Querybook 与 Pinterest 的内部系统集成在一起。开发人员可以使用插件系统配置认证、自定义查询引擎并实现对内部站点的导出器。插件系统提供的自定义行为让 Querybook 可以针对用户在 Pinterest 上的工作流程做出优化,同时确保开源项目适合大众使用。

 

你可以在 Querybook.org 上查看 Querybook 的更多特性及文档,也可以通过 querybook@pinterest.com 与我们联系。

 

原文链接:https://medium.com/pinterest-engineering/open-sourcing-querybook-pinterests-collaborative-big-data-hub-ba2605558883

2021-04-29 14:193144

评论

发布
暂无评论
发现更多内容

Karmada多云多集群生产实践专场圆满落幕|CNDC南京站

科技热闻

最全数据分类分级标准汇编,有必要了解一下!

极盾科技

2.1如何设计可扩展架构

程序员小张

「架构实战营」

基于人眼视觉模型,实现码率、质量、成本的最优均衡

阿里云CloudImagine

云计算 阿里云

对于Getaverse,灵魂绑定和去中心化身份是什么?

Geek_Web3

Web3 Daily 去中心化信任 #区块链# did

iQOO11 国内安卓首发背景音过滤,人声更突显,通话更隐私

极客天地

十亿国民新宠:皮皮App线上派对新社交

联营汇聚

7天搞定一门新技术!5个含金量很高的短篇课程推荐

博文视点Broadview

软件测试丨Git分支管理实操,搞定在线合并和本地合并

测试人

GitHub 软件测试 自动化测试 测试开发

数据库运维 | 携程分布式图数据库NebulaGraph运维治理实践

NebulaGraph

图数据库 数据库运维

时间复杂度和空间复杂度

C++后台开发

数据结构 算法 网络编程 linux开发 C++开发

代码质量与安全 | 如何应对网络安全威胁,保障软件安全?

龙智—DevSecOps解决方案

软件安全 安全软件开发生命周期 网络安全威胁

Databend 索引结构说明

Databend

空间音频技术与生态发展高峰论坛成功举办,业界首个Audio Vivid创作工具花瓣三维声亮相

HarmonyOS SDK

HMS Core

模型精度再被提升,统一跨任务小样本学习算法 UPT 给出解法!

阿里云大数据AI技术

人工智能 自然语言处理 机器学习 模型 12 月 PK 榜

《2022年数据库大调查》正式启动,共同助力国产数据库发展

墨天轮

数据库 oracle TiDB 问卷调查 国产数据库

架构实战营 2-4 架构质量提升随堂练习

西山薄凉

「架构实战营」

4000道Java面试真题合集,助你搞定面试官

钟奕礼

Java 程序员 java编程

版本控制 | 如何将UnrealGameSync与Perforce Helix Core结合使用

龙智—DevSecOps解决方案

虚拟引擎 UnrealGameSync

中台+低代码 企业数字化转型新范式

力软低代码开发平台

【附视频】在线研讨会回顾|龙智引入自动化测试工具,帮助企业优化DevSecOps工具链,提升QA效率

龙智—DevSecOps解决方案

自动化测试

华为侯金龙:能源流与信息流融合,共建绿色低碳城市

极客天地

校招Java岗学到什么程度,才能找到所谓的好工作呢?

Java永远的神

Java 程序员 面试 程序人生 秋招

Elasticsearch Head插件使用小结

京东科技开发者

elasticsearch 索引 chorme 数据库· 数据查询

通过 NFTScan 实时监控钱包地址和 NFT 合约地址

NFT Research

区块链 数据分析 NFT

数字化转型的十大优势

优秀

数字化转型 数字化升级

用户面对面 | 对话某新能源汽车行业工程师:如何落地Atlassian工具?

龙智—DevSecOps解决方案

喜报 | 秒云获评2022(第二届)“金信通”金融科技创新应用优秀案例

MIAOYUN

金融科技 解决方案 信创

时序数据库破局开放探讨

YMatrix 超融合数据库

物联网 时序数据库 超融合数据库 数据库架构选型 YMatrix

GitHub上标星65k+超火的《Java大厂面试》,分享整理的PDF版本

钟奕礼

Java 程序员 java面试 java编程

开源Querybook:Pinterest的大数据协作枢纽_语言 & 开发_Pinterest Engineering_InfoQ精选文章