pinot, 实时分布式OLAP数据存储

分享于 

9分钟阅读

GitHub

  繁體 雙語
A realtime distributed OLAP datastore
  • 源代码名称:pinot
  • 源代码网址:http://www.github.com/linkedin/pinot
  • pinot源代码文档
  • pinot源代码下载
  • Git URL:
    git://www.github.com/linkedin/pinot.git
    Git Clone代码到本地:
    git clone http://www.github.com/linkedin/pinot
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/linkedin/pinot
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    介绍

    Build Statuscodecov.ioJoin the chat at https://gitter.im/linkedin/pinotlicense

    with是一个实时分布式OLAP数据存储,用于在LinkedIn提供可以伸缩的实时分析,以低延迟。 它可以从离线数据源( 例如Hadoop和平面文件) 和在线来源( 如 Kafka ) 中摄取数据。 Pinot被设计成水平缩放。

    这三个on介绍介绍了Pinot以及如何在LinkedIn上使用。

    ( 而不是) 是什么?

    to非常适合于不可以变追加数据的分析用例,只需要在被取消的事件之间进行低延迟。

    关键特性

    • 具有各种压缩方案的数据库,如运行长度。固定位长度
    • 可以插入索引技术。排序索引。位图索引。倒索引
    • 基于查询和分段元数据优化查询/执行计划的能力。
    • 从 Kafka 接近实时摄入和从Hadoop批量摄入
    • SQL语言,支持子对象选择,聚合,过滤,GROUP BY,ORDER BY,不同的查询,对事实数据的不同查询。
    • 支持多值字段
    • 水平可以扩展和容错

    由于我们为实现这些目标而做出的设计选择,Pinot中存在某些限制:

    • Pinot不能替代数据库 例如,它不能作为真值存储的源,不能变异数据
    • 不能替代搜索引擎 例如 全文搜索,不支持相关性
    • 查询不能跨多个表进行 span。

    Pinot能很好地查询时间序列数据,具有许多维度和指标。 示例- 在分析时装( 上周,谁查看了这个概要,每个广告系列点击了多少个广告) 中查询( 配置文件视图,广告系列性能,等等 )。

    术语

    在我们开始快速开始之前,让我们先看看术语。

    • 表:表是指有关相关数据的Collection的逻辑抽象。 它由列和行( 文稿) 组成。 表架构定义列名及其元数据。
    • 段:逻辑表分为多个物理单元,称为段。

    Pinot拥有以下角色/组件:

    • Pinot控制器:管理集群中的节点。 职责:
      • 处理表和段上的所有创建。更新。Delete 操作。
      • 计算Pinot服务器表及其分段的分配。
    • Pinot服务器:承载一个或者多个物理段。 职责:-
      • 指定预先创建的段时,下载并加载它。 如果分配了 Kafka 主题,开始使用 Kafka 中的一组分区。
      • 执行查询并返回Pinot的响应。
    • Pinot: 接受来自客户机的查询并将它的路由到多个服务器( 基于路由策略)。 所有响应都合并并发送回客户端。

    Pinot利用 Apache Helix 集群管理。

    有关Pinot设计和体系结构的更多信息,请参见这里。

    快速启动

    你可以手动构建葡萄球菌,也可以使用 Docker 来运行葡萄酒。

    1: 构建并安装 Pinot ( 如果安装了 Docker,则可以选择)

    
    git clone https://github.com/linkedin/pinot.git
    
    
    cd pinot
    
    
    mvn install package -DskipTests
    
    
    cd pinot-distribution/target/pinot-0.016-pkg
    
    
    chmod +x bin/*.sh
    
    
    
    

    运行

    我们将从 1878到 2013装入棒球统计,并对它的运行查询。 这里数据集中有 100000个记录和 15列( 架构 )。

    执行bin文件夹中执行以下操作的quick-start-offline.sh 脚本:

    • 将CSV格式的棒球数据转换为Pinot段。
    • 启动Pinot组件,Zookeeper,控制器,代理,服务器。
    • 上传至 Pinot

    如果你有 Docker,运行 docker run -it -p 9000:9000 linkedin/pinot-quickstart-offline 如果你已经构建了 Pinot,运行 bin/quick-start-offline.sh

    我们应该看到以下输出。

    
    Deployed Zookeeper
    
    
    Deployed controller, broker and server
    
    
    Added baseballStats schema
    
    
    Creating baseballStats table
    
    
    Built index segment for baseballStats
    
    
    Pushing segments to the controller
    
    
    
    

    在这一点上我们可以发布查询。 下面是一些示例查询。 示例查询:

    /*Total number of documents in the table*/selectcount(*) from baseballStats/*Top 5 run scorers of all time*/selectsum(runs) from baseballStats group by playerName top 5/*Top 5 run scorers of the year 2000*/selectsum(runs) from baseballStats where yearID =2000group by playerName top 5/*Top 10 run scorers after 2000*/selectsum(runs) from baseballStats where yearID >=2000group by playerName/*Select playerName,runs,homeRuns for 10 records from the table and order them by yearID*/select playerName, runs, homeRuns from baseballStats order by yearID limit10

    步骤 3: Pinot数据资源管理器

    通过 3和Pinot交互有种方式:简单的网络接口,REST API 和java客户机。 打开浏览器并转到 http://localhost:9000/query/,并运行上面提供的任何查询。 有关更多信息,请参见 Pinot查询语法。

    实时快速启动

    有两种方法将数据摄入到 Pinot - 批量和实时。 以前的棒球统计数据显示 ingestion。 通常,这些批处理作业是定期运行在Hadoop上的( 比如 每个 hour/day/week/month). 数据新鲜。

    让我们看一个例子,在这个例子中。 我们将订阅 meetup.com rsvp订阅并实时索引rsvp事件。 在执行以下操作的bin文件夹中执行 quick-start-realtime.sh 脚本:

    • 启动 Kafka 代理
    • 设置meetup事件侦听器,订阅 meetup.com 流并将它的发布到本地 Kafka 代理
    • 启动动物园管理员,pinot控制器,pinot,pinot服务器。
    • 配置实时源

    如果你有 Docker,运行 docker run -it -p 9000:9000 linkedin/pinot-quickstart-realtime 如果你已经构建了 Pinot,运行 bin/quick-start-realtime.sh

    
    Starting Kafka
    
    
    Created topic"meetupRSVPEvents".
    
    
    Starting controller, server and broker
    
    
    Added schema and table
    
    
    Realtime quick start setup complete
    
    
    Starting meetup data stream and publishing to kafka
    
    
    
    

    http://localhost:9000/query 打开Pinot查询控制台并运行查询。 下面是一些示例查询

    /*Total number of documents in the table*/selectcount(*) from meetupRsvp/*Top 10 cities with the most rsvp*/selectsum(rsvp_count) from meetupRsvp group by group_city top 10/*Show 10 most recent rsvps*/select*from meetupRsvp order by mtime limit10/*Show top 10 rsvp'ed events*/selectsum(rsvp_count) from meetupRsvp group by event_name top 10

    usage用法

    在 LinkedIn,它能够使用 50个以上的应用程序,如谁查看我的配置文件,以及更多的交互级别响应时间。 per ingests每天接近每天十亿,并且每天处理 100万个查询。

    讨论组

    请将问题 Join 或者发布到该组。 https://groups.google.com/forum/#!forum/pinot_users

    文档


    数据  分布式  OLAP  
    相关文章