为了从2亿多个日常事件中收集和分析数据,Evernote(印象笔记)从MySQL数据仓库转向了由Hadoop和ParAccel组成的混合环境。
由于数据洪流已经威胁到了Evernote的分析系统,为了处理这些大数据,Evernote开始在不增加预算的情况,对其分析环境进行现代化升级。作为一家颇受欢迎的个人组织与生产力应用提供商,Evernote已经开始从常规数据仓库迁移至由Hadoop和ParAccel组成、且能够进行大规模并行处理(MPP)分析的现代化数据库。
Evernote一直在收集并分析其用户数据。自2008年以来,已经有3600多万用户创建了自己的 Evernote账户,与此同时这些账户生成了数百太字节的数据。这些数据包括了12亿条“笔记”和20亿个附件。其中的笔记以文本、网页、照片、语音备忘录等多种形式存在的,并且能够被标记、注释、编辑、分类,以及用其他方式进行操作。
为了确定优化Evernote用户体验的方式,该公司每天通过Hadoop和ParAccel混合数据库对2亿多个事件进行分析。此外,Evernote还利用开源的JasperReports服务器社区版生成相关报告和图表。
突破数据容量限制
Evernote最初的数据仓库是以OLTP(联机事务处理)关系型数据库为基础的。这些数据仓库使用的是一个星形模型。这意味着数据是根据查询进行安排,而不是根据处理进行安排的。通常只要MySQL中的数据容量在数太字节以内,这一解决方案都能够很好地进行报告与分析。但是当数据超过了这一限制,只有很少一部分历史数据能够被保留下来,同时数据仓库的查询速度、灵活性与可负担性将难以忍受。
这就是Evernote所遇到的问题。以前,Evernote的数据仓库建立在MySQL之上,庞大的 RAID10阵列与应用的主服务器使用相同的网络。在每天晚上,批处理操作每隔9至18个小时就会将多个操作数据库表单的增加部分与应用服务器被解析的结构化事件日志关联起来。在手动创建和调整之后,再通过电子邮件的形式分发报告。
自2012年年初以来,Evernote的分析团队意识到,他们现有的解决方案已经无法应对这些负载。由于主要的表单超过了400亿行,因此每次访问几天的数据就根本是不可能的事情。报告数据库的速度也非常慢,并且难以维护,尤其是难以进行查询。
因此,Evernote开始着手创建一个分析环境。这个环境要能有效地存储全部的历史数据,生成十多份标准的每日报告,特别是能够方便地管理查询,并且在未来能持续进行扩展。与此同时,Evernote的预算并不宽裕。
Evernote最终选择了由Hadoop和ParAccel组成的混合解决方案。目前,一个10个节点的Hadoop集群能够存储所有的历史数据,以及处理用于分析的数据预处理工作。预算方面,Hadoop是一个他们能够负担得起的解决方案,这要归功于 Hadoop的开源许可证,及其能够使用商业硬件进行扩展的优势。
作为一个MPP分析数据库,ParAccel电子表格能够以超高的速度进行查询。在Evernote公司中,3个节点的ParAccel列式分析数据库能够处理对大量派生表的查询。作为节点的SuperMicro服务器,每个都配备有两个L5630四核处理器、192GB内存、10Gbps网络,以及一个能够与Red Hat Enterprise Linux进行手动配置与设置的RAID5固态硬盘。
最后,与主流开源报告的解决方案一样,JasperReports也一个简单易用的解决方案。为了查询 ParAccel服务器以及生成的多种格式的日报,Evernote的团队选择了Jaspersoft的开源JasperReports服务器。(近期 ParAccel和JasperReports服务器混合环境也得到了亚马逊的支持。亚马逊正使用这两款工具强化其Redshift托管分析环境。)
Evernote每天使用JasperReports服务器生成10多份图表与报告
出于安全原因,这一分析环境被放在了一个独立的网络上,并不与生产应用服务器相连。日常在线数据通过一个单向的网络连接被安全地推送到报告环境中。
部署Hadoop并协同工作
全部的原始数据首先将发送至Hadoop。在这里,数据将被归档并为输入至ParAccel进行日报和分析做好准备。随后,Evernote将使用Cloudera Hadoop进行分发,并使用Puppet进行配置管理。 Hadoop集群包括有6个配置了8个500GB硬盘的数据节点,总计可以存储24TB的原始数据。2个8核处理器和64GB内存在跨集群中运行132个 MapReduce任务,每个任务可拥有超过2GB的内存。
此外,作为冗余,Evernote还在两个服务器上运行了一个单独的Hadoop Job Tracker,在一个客户端节点运行Hive与Hue,这是两个针对Hadoop的关键开源工具。Hadoop集群可通过Hive抽象层被访问,后者提供了一个用于查询的类SQL接口。Hue是一个针对Hadoop的基于Web接口,其中包含了大量的实用应用,例如文件浏览器、工作追踪接口、集群健康监视器,以及一个创建个性化Hadoop应用的环境。
由Hive采集的用户活动数据与来自在线生产数据库的参照表每晚会被加载在ParAccel上。通过Hive所创建的派生表包含有针对常见报告中最佳表述的预切片信息。例如,除了某一时期以来每天、每周和每月的活动用户数量外,国家一览表每天每个国家只有一行。
由于ParAccel数据库和表单会针对快速数据聚合进行调整,因此与单独使用Hive相比,Evernote能够进行多类问题的查询。例如,查看某周内在德国哪个Windows版本的Evernote软件使用最为频繁,只需要3秒钟的时间。
Evernote如今拥有了一个现代化的分析环境,并且这个环境拥有足够的增长空间。由于有了 Hadoop,Evernote的团队拥有了将海量数据运营与日志数据归档的能力。更重要的是,它们可以在两个小时内加载和转换数百万条记录,而以往做这些工作需要花费10个小时或是更长的时间。同时得益于ParAccel,Evernote的团队能够执行更为复杂的用户趋势分析操作,并通过 JasperReports服务器提供最终结果。
由于能够存储所有的历史数据、进行更快速的查询,以及每日自动生成质量报告,Evernote能够从更深的层次观察客户使用其产品的方式,持续提升和优化自己的产品。