Azkaban —— Hadoop 批处理调度器
Azkaban是个简单的批处理调度器,用来构建和运行Hadoop作业或其他脱机过程。
特性:
- 兼容所有版本的 Hadoop
- 基于 Web 的易用 UI
- 简单的 Web 和 HTTP 工作流上传
- 项目工作空间
- 工作流调度
- 模块化和插件化
- 支持认证和授权
- 可跟踪用户行为
- 失败和成功时的邮件提醒
- SLA 警告和自动终止
- 失败作业的重试
Githug 地址:https://github.com/azkaban/azkaban
ParSeq —— 来自 Linkedin 的 Java 异步框架
ParSeq 是一个简化 Java 编写异步处理代码的框架,优点:
- 异步操作的并行处理
- 顺序执行非堵塞计算
- 通过任务组合实现代码的重用
- 简单的错误传播和恢复
- 执行跟踪和可视化
Github 地址:https://github.com/linkedin/parseq
Pinot —— LinkedIn 开源 OLAP 存储和分析系统
Pinot 是一个实时分布式的 OLAP 数据存储和分析系统。LinkedIn 使用它实现低延迟可伸缩的实时分析。Pinot 从离线数据源(包括 Hadoop 和各类文件)和在线数据源(如 Kafka)中攫取数据进行分析。Pinot 被设计是可以进行水平扩展的。
Pinot 特别适合这样的数据分析场景:分析模型固定,数据只追加以及低延迟,以及分析结果可查询。
关键特性:
- 面向列的数据库,提供多种压缩模式,如运行长度、固定比特长度
- 可插入式的索引技术,包括可排序索引、Bitmap 索引和反向索引
- 可根据查询和段元数据对查询和执行进行优化
- 近乎实时的从 Kafka 获取数据,以及批量从 Hadoop 获取数据
- 类 SQL 的语言支持查询、聚合、过滤、分组、排序和去重
- 支持多值字段
- 水平伸缩以及容错
Pinot 非常使用用来查询时许数据以及大维度的数组。
Pinot 的组件架构:
Pinot 核心概念:
Github 地址:https://github.com/linkedin/pinot
WhereHows —— LinkedIn大数据发现和管理工具
WhereHows 是 LinkedIn 公司一个用于大数据发现和管理的工具,集成了所有主要的数据处理系统,可以进行分类收集和元数据操作。方便内部员工发现公司内部的数据,跟踪数据集的移动和查看各种内部工具和服务的动向。
WhereHows 可以解决很多公司面临的大数据内部分享的问题,提供一个平台让员工进行企业有价值的数据发现和进行一些更深度的分享。当前 LinkedIn 的 WhereHows 存储的数据: 50,000 数据集,14,000 评论和 3500 万作业执行。
login page
dataset page
dataset detail page
lineage page
Github 地址:https://github.com/linkedin/WhereHows
PalDB —— LinkedIn 的嵌入式只读 KV 存储系统
PalDB 是 LinkedIn 开源的可嵌入只读 Key-Value 存储系统。
PalDB 是一个可嵌入,持续 Key-Value 存储,拥有非常快的性能和合适的存储大小。PalDB 存储是单个二进制文件,只能编写一次,可以直接在应用中使用。
PalDB 的 JAR 包只有 110K,只有单个依赖 (snappy, which isn't mandatory),可以跟一些配置参数一起使用。
因为 PalDB 是只读的存储系统,只关注数据,相比其他嵌入式 key-value 系统来说非常简单,拥有较高的吞吐量。
当前的基准测试基于 3.1Ghz Macbook Pro:
PalDB,LevelDB 和 RocksDB 吞吐量比较(越高越好)
PalDB 和一个 Java HashSet 内存使用比较(越低越好)
Github 地址:https://github.com/linkedin/PalDB
Cubert——高性能计算引擎
Cubert是一个用于复杂大数据分析的高性能计算引擎。这是为分析师和数据科学家编写的一个框架,提供“手动编写Java程序的所有效率优势,并提供了一个简单的、类似脚本的用户接口,用于解决各种统计、分析和图论问题”。其目标是,做上述所有工作而又不暴露底层细节。
Cubert围绕着实现更好的数据处理算法需求而设计。当性能是一个辨别因素时,Cubert可以提供帮助,正如LinkedIn工程师所声称的那样,即使从磁盘置换出数十TB大小的数据,其性能也可以超出其它引擎5到60倍。
Cubert完全用Java开发,并提供一种脚本语言。它是针对报表领域里经常出现的复杂连接和聚合而设计的。Cubert使用MeshJoin算法处理大时间窗口下的大数据集,CPU和内存利用率显著提升。CUBE是Cubert定义的一个新操作符,可以计算累加和非累加分析维度。非累加维度是计算密集型的,如计算一个时间窗口内不同的用户数,但CUBE能加快这些运算,而且还可以计算准确的百分等级,如中位数统计,动态上卷内部维度以及在单个任务中计算多个度量值。
Cubert最适合于重复的报表工作流程,它利用部分结果缓存和增量处理技术来提高速度。最后,一种新的稀疏矩阵乘法算法可以用于大型图的分析计算。
Naarad——系统性能分析工具
Naarad 是高度可配置的系统分析工具,通过解析和生成时间序列数据用于可视化的展示。可对应用和服务进行性能分析。可收集如下数据:
- JVM 垃圾收集 (GC),System/Network (SAR),MySQL (Innotop),Jmeter (JTL/XML) logs,VMStat,ZoneInfo,MemInfo
- CSV 格式数据输入
Naarad 强大之处在于其可配置性,特性:
- 可配置的输入数据格式
- 日志解析
- 支持 CSV 格式
- 混合图表展示
- Html 报表
- 支持分级
- 支持 Diff
Github 地址:https://github.com/linkedin/naarad
Databus——分布式数据同步系统
LinkedIn最近发布了一套源无关的分布式数据同步系统Databus。简单说,就是把交易数据同步到各个不同的应用中。一个大的特色是这系统采用pull模式从log中取得数据,以达到对生产系统最小影响。
JTune——LinkedIn 的 Java CMS 高精度优化
JTune 可以在无需重新启动的情况下,帮助你调整和解决运行的 JVM (Java 6 - Java 8) 的问题。目前,它还不能与 G1 垃圾回收器一同工作,被检测出时还会报错。
调整基于两个指标:进行垃圾回收(GC)的累积时间,以及垃圾回收(GC)的标准差。在调用时, JTune 在给定 pid 中捕捉 jstat 的输出,以及样本时间内的 GC 日志数据。
Github 地址:https://github.com/linkedin/JTune
URL-Detector——基于Java的开源URL嗅探器
这是一个可以检测并规范化文本中的URL地址的Java库。是由 Linkedin 公司 开源的一个URL探测工具:URL-Detector Java 库。
Github 地址:https://github.com/linkedin/URL-Detector
Cleo——预输入搜索
Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。
LinkedIn Typeahead
Github 地址:https://github.com/linkedin/cleo
QARK —— 安卓应用漏洞检查工具
QARK 全称 Quick Android Review Kit。这个工具用来寻找与 Android 应用相关的安全漏洞,包括检查源代码和打包的 APKs。这个工具还可以创建“Proof-of-Concept”可部署的 APKs 或 ADB 命令,能够利用许多它发现的漏洞。不需要 root 测试设备,因为这个工具专注于在其它安全环境下能被利用的漏洞。
Github 地址:https://github.com/linkedin/qark
Venus—— JavaScript 单元测试工具
Venus 是一个 JavaScript (JS)的测试工具,可以简化运行单元测试。当你在 JS 开发一个基于浏览器的项目时,你想创建单元测试并频繁地运行它们。通常,你会用一些库比如 Mocha 或 Jasmine,写一个单元测试,这些库可以让你定义测试用例,并提供 API 来编写判断。
我们通过创建一个工具,可以让你更轻松地与现有的库一起工作。一下是 Venus 的主要好处:
- 在你的测试使用 Simple annotations, 来指定你要使用的测试库,你要测试的文件,其它文件依赖,以及测试工具模板
- 通过使用 PhantomJS 运行命令行,直接快速运行你的基于浏览器的测试
- 在多浏览器的命令行中同时运行你的测试(本地运行或远程)
- 集成持续集成工具(Selenium Grid + Travis CI)
Github 地址:https://github.com/linkedin/venus.js
Gobblin——Hadoop 通用数据摄取框架
Gobblin 是 Hadoop 通用数据摄取框架,可以从各种数据源中提取,转换和加载海量数据。比如:数据库,rest APIs,filers,等等。Gobblin 处理日常规划任务需要所有数据摄取 ETLs,包括作业/任务规划,任务分配,错误处理,状态管理,数据质量检测,数据发布等等。
Gobblin 通过同样的执行框架从不同数据源摄取数据,在同一个地方管理所有不同数据源的元数据。同时结合了其他特性,比如自动伸缩,容错,数据质量保证,可扩展和处理数据模型改革等等。Gobblin 变得更容易使用,是个高效的数据摄取框架。
Github 地址:https://github.com/linkedin/gobblin
Espresso NoSQL——分布式NoSQL数据库
Espresso 是一个来自 LinkedIn 的分布式 NoSQL 数据库,其具有高性能、高扩展性、支持事务、容错能力等重要特征。在LinkedIn,Espresso有着强大的应用规模,它运行在十几个集群中,并且已有将近30个应用在使用Espresso,如Member Profile、InMail、LinkedIn的手机客户端等。在高峰期,它能够每秒处理数百万的访问记录。Espresso由LinkedIn的分布式数据系统团队基于高性能的数据抓取系统Databus、R2D2、通用的集群管理框架Apache Helix等开源技术开发,用来解决关系型数据库(如MySQL、Oracle等)不能满足当前线上并发业务的性能要求的问题以及关系型数据库固有的一些局限性,如扩展性差、容错处理能力差、成本高等。
Espresso具有一个分层的数据模型,其结构为数据库(Database)->表(Table)>集合 (Collection)->文档(Document)。Espresso使用JSON数据格式定义数据库Schema和表Schema,使用数据序列化的系统Apache Avro定义文档Schema。 Espresso的表是同一类型文档的容器,使用指定Key所确定的文档就是一个集合,一个指定的Key唯一确定一个文档,一个文档Schema对应一个 Avro的Schema。Espresso提供了简单、易用的读/写操作的REST风格API和基于Last-Modified 和 ETag的条件操作API,其中的写操作API还具有事务性。
Espresso的整个架构如下图所示:
ambry——多媒体对象存储数据库
Ambry是LinkedIn开源的多媒体对象存储数据库,支持存储数万亿小不可改变的对象(50K-100K)以及数十亿的大对象。它是专门用来存储和服务网络公司的媒体对象的。
然而,它也可以用作一个通用的存储系统来存储DB备份,搜索索引或业务报告。该系统具有以下特性:
- 高可用和可扩展性水平
- 低延迟和高吞吐量
- 同时优化小型和大型对象
- 成本效益
- 使用方便
Github 地址:https://github.com/linkedin/ambry