您好,欢迎来到聚文网。 登录 免费注册
大数据系统构建

大数据系统构建

基于Lambda架构的系统构建
  • 装帧: 平装
  • 出版社: 机械工业出版社
  • 作者: (美)南森·马茨(Nathan Marz),(美)詹姆斯·沃伦(James Warren) 著;马延辉,向磊,魏东琦 译
  • 出版日期: 2017-01-01
  • 商品条码: 9787111552949
  • 版次: 1
  • 开本: 16开
  • 页数: 282
  • 出版年份: 2017
定价:¥79 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
本书将教你充分利用集群硬件优势的架构,以及专门设计用来捕获和分析网络规模数据的新工具,来创建这些系统。其中描述了一个可扩展的、易于理解大数据系统的方法,可以由小团队构建并运行;并利用一个实际示例,基于大数据系统的理论在实践中实现它们来指导读者。本书共18章。靠前章介绍了数据系统的原理,并对Lambda架构进行了概述;第2章到第9章集中阐述了Lambda架构的批处理层;靠前0章和靠前1章讲述服务层的内容;靠前2章到17章讲述速度层的内容;靠前8章再次巩固Lambda架构的相关知识,并进行查漏补缺。
作者简介
南森·马茨,Cascalog和Storm的创始人。在2011年Twitter收购社交媒体数据分析公司BackType前,他是BackType首席工程师。在Twitter,他建立了流计算团队,提供和开发共享基础设施,为整个公司的关键实时应用提供支持。他目前是Stealth startup的创始人。
詹姆斯·沃伦,Storm8的分析架构师,精通大数据处理、机器学习和科学计算。
马延辉,资历Hadoop技术专家,对Hadoop生态系统相关技术有着深刻的理解,在Hadoop开发和运维方面积累了丰富的经验。曾就职于阿里、Answers.com、暴风等互联网公司,从事Hadoop相关的研发和运维工作,对大数据技术的企业级落地、研发、运维和管理有着深刻的理解和丰富的实战经验。开源HBase监控工具Ella作者。现在致力于大数据技术在传统行业的落地和大数据技术的普及和推广。
向磊,前暴风影音数据平台架构师,目前在某垂直电商平台担任技术总监,惠普中国Hadoop相关课程讲师。开源项目EasyHadoop、phpHiveAdmin作者,对Hadoop及其周边生态系统的底层运维及开发、集群自动化运维、网络架构设计、集群安全、性能优化、嵌入式编程方面有较深入了解。
魏东琦,博士,长期从事软件研发工作,现就职于中国地质调查局西安地质调查中心,参加、承担过多项科研项目。现致力于地质行业与大数据技术融合的相关研究工作。
目录
译者序
前言
关于本书
致谢
第1章大数据的新范式
1.1本书是如何组织的
1.2扩展传统数据库
1.2.1用队列扩展
1.2.2通过数据库分片进行扩展
1.2.3开始处理容错问题
1.2.4损坏问题
1.2.5到底是哪里出错了
1.2.6大数据技术是如何起到帮助作用的
1.3NoSQL不是万能的
1.4基本原理
1.5大数据系统应有的属性
1.5.1鲁棒性和容错性
1.5.2低延迟读取和更新
1.5.3可扩展性
1.5.4通用性
1.5.5延展性
1.5.6即席查询
1.5.7最少维护
1.5.8可调试性
1.6全增量架构的问题
1.6.1操作复杂性
1.6.2实现最终一致性的极端复杂性
1.6.3缺乏容忍人为错误
1.6.4全增量架构解决方案与Lambda架构解决方案
1.7Lambda架构
1.7.1批处理层
1.7.2服务层
1.7.3批处理层和服务层满足几乎所有属性
1.7.4速度层
1.8技术上的最新趋势
1.8.1CPU并不是越来越快
1.8.2弹性云
1.8.3大数据充满活力的开源生态系统
1.9示例应用:SuperWebAnalytics
1.10总结
第一部分批处理层
第2章大数据的数据模型
2.1数据的属性
2.1.1数据是原始的
2.1.2数据是不可变的
2.1.3数据是永远真实的
2.2基于事实的数据表示模型
2.2.1事实的示例及属性
2.2.2基于事实的模型的优势
2.3图模式
2.3.1图模式的元素
2.3.2可实施模式的必要性
2.4SuperWebAnalytics的完整数据模型
2.5总结
第3章大数据的数据模型:示例
3.1为什么使用序列化框架
3.2ApaCheThriR
3.2.1节点
3.2.2边
3.2.3属性
3.2.4把一切组合成数据对象
3.2.5模式演变
3.3序列化框架的局限性
3.4总结
第4章批处理层的数据存储
4.1主数据集的存储需求
4.2为批处理层选择存储方案
4.2.1使用键/值存储主数据集
4.2.2分布式文件系统
4.3分布式文件系统是如何工作的
4.4使用分布式文件系统存储主数据集
4.5垂直分区
4.6分布式文件系统的底层性质
4.7在分布式文件系统上存储SuperWebAnalytics的主数据集
4.8总结
第5章批处理层的数据存储:示例
5.1使用HDFS
5.1.1小文件问题
5.1.2转向更高层次的抽象
5.2使用Pail在批处理层存储数据
5.2.1Pail基本操作
5.2.2序列化对象到Pail中
5.2.3使用Pail进行批处理操作
5.2.4使用Pail进行垂直分区
5.2.5Pail文件格式与压缩
5.2.6Pail优点的总结
5.3存储SuperWebAnalytics的主数据集
5.3.1Thrift对象的结构化Pail
5.3.2SuperWebAnalytics的基础Pail
5.3.3用于垂直分区数据集的分片Pail
5.4总结
第6章批处理层
6.1启发性示例
6.1.1给定时间范围内的页面浏览量
6.1.2性别推理
6.1.3影响力分数
6.2批处理层上的计算
6.3重新计算算法与增量算法
6.3.1性能
6.3.2容忍人为错误
6.3.3算法的通用性
6.3.4选择算法的风格
6.4批处理层中的可扩展性
6.5MapReduce:一种大数据计算的范式
6.5.1可扩展性
6.5.2容错性
6.5.3MapReduce的通用性
6.6MapReduce的底层特性
6.6.1多步计算很怪异
6.6.2手动实现连接非常复杂
6.6.3逻辑和物理执行紧密耦合
6.7管道图——一种关于批处理计算的高级思维方式
6.7.1管道图的概念
6.7.2通过MapReduce执行管道图~1叭
6.7.3合并聚合器
6.7.4管道图示例
6.8总结
第7章批处理层:示例
7.1一个例证
7.2数据处理工具的常见陷阱
7.2.1自定义语言
7.2.2不良的可组合抽象
7.3JCascalog介绍
7.3.1JCascalog的数据模型
7.3.2JCascalog查询的结构
7.3.3查询多个数据集
7.3.4分组和聚合器
7.3.5对一个查询示例进行单步调试
7.3.6自定义谓词操作
7.4组合
7.4.1合并子查询
7.4.2动态创建子查询
7.4.3谓词宏
7.4.4动态创建谓词宏
7.5总结
第8章批处理层示例:架构和算法
8.1SuperWebAnalytics批处理层的设计
8.1.1所支持的查询
8.1.2批处理视图
8.2工作流概述
8.3获取新数据
8.4URL规范化
8.5用户标识符规范化
8.6页面浏览去重
8.7计算批处理视图
8.7.1给定时间范围内的页面浏览量
8.7.2给定时间范围内的独立访客
8.7.3跳出率分析
8.8总结
第9章批处理层示例:实现
9.1出发点
9.2准备工作流
9.3获取新数据
9.4URL规范化
9.5用户标识符规范化
9.6页面浏览去重
9.7计算批处理视图
9.7.1给定时间范围内的页面浏览量
9.7.2给定时间范围内的独立访客
9.7.3跳出率分析
9.8总结
第二部分服务层
第10章服务层概述
10.1服务层的性能指标
10.2规范化/非规范化问题的服务层解决方案
10.3服务层数据库的需求
10.4设计SuperWebAnalytics的服务层
10.4.1给定时间范围内的页面浏览量
10.4.2给定时间范围内的独立访客
10.4.3跳出率分析
10.5对比全增量的解决方案
10.5.1给定时间范围内的独立访客的全增量方案
10.5.2与Lambda架构解决方案的比较
10.6总结
第11章服务层:示例
11.1ElephantDB的基本概念
11.1.1ElephantDB中的视图创建
11.1.2ElephantDB中的视图服务
11.1.3使用ElephaIltDB
11.2创建SuperWebAnalytics的服务层
11.2.1给定时间范围内的页面浏览量
11.2.2给定时间范围内的独立访客数量
11.2.3跳出率分析
11.3总结
第三部分速度层
第12章实时视图
12.1计算实时视图
12.2存储实时视图
12.2.1最终一致性
12.2.2速度层中存储的状态总量
12.3增量计算的挑战
12.3.1CAP原理的有效性
12.3.2CAP原理和增量算法之间复杂的相互作用
12.4异步更新与同步更新
12.5过期实时视图
12.6总结
……
第13章实时视图:示例
第14章队列和流处理
第15章队列和流处理:示例
第16章微批量流处理
第17章微批量流处理:示例
第18章深入Lambda架构
摘要
当第一次进入大数据的世界时,我仿佛置身于软件开发的美国西部荒原。许多人放弃了关系型数据库,转而选择带有高度受限模型的NoSQL数据库,主要是因为其使用体验良好、熟悉度较高且这种数据库可以扩展到成千上万台机器上。NoSQL数据库的数量巨大,堪称铺天盖地,这些数据库中很多都只有细微的差别。一个名为“Hadoop”的新项目开始崭露头角,它宣称具备基于海量数据进行数据深度分析的能力。但弄清楚如何使用这些新工具很令人困惑。
    当时,我正试图处理所在公司面临的扩展性问题。系统架构非常复杂——该Web系统包含共享关系型数据库、队列、工作节点、主节点和从节点。数据损坏渗透至数据库,为了处理这些损坏,我们使用了应用程序中的特殊代码,但从节点的操作总是落后于其他节点。我决定探索其他大数据技术,看看是否有比我们的数据架构更好的设计。
    早期的软件工程职业生涯的经历,深刻影响了我对“系统该如何架构”的观点。我的一位同事花了几个星期将来自互联网的数据收集到一个共享文件系统。他在等待收集足够的数据,以便能在其上进行数据分析。有一天,在做一些日常维护时,我不小心删除了他的所有数据,导致他的项目延期了好几周。
    我知道自己犯了一个大错,但作为一个软件工程师新手,我并不知道这会导致什么样的后果。我会不会因为粗心被解雇呢?我发了一封电子邮件向团队诚挚地道歉——让我惊喜的是,大家对此都表示非常同情。我永远不会忘记那个时刻——一个同事来到我的办公桌旁,拍着我的背说:“恭喜你!你现在是一个专业的软件工程师了!”
    他玩笑式的表述道出了软件开发中不言而喻的“真理”——我们不知道如何创造完美的软件。软件可能有bug而且会被部署到生产中。如果应用程序可以写入数据库中,那么bug也可能写入数据库中。当着手重新设计我们的数据架构时,这样的经历深深地影响了我。我知道,新架构不但必须是可扩展的、对机器故障是可容错的,并且要易于推断故障原因——但对人为错误也可容错。
    重构那套系统的经验,促使我走上了一条“在数据库和数据管理方面怀疑一切我认为是正确的”道路。我想出了一个基于不可变数据和批量计算的架构,令我很惊讶的是,与仅仅基于增量计算的系统相比,新系统要简单得多。一切都变得更容易,包括操作、不断发展的系统以支持新的功能、从人为错误中恢复和性能优化等方面。该方法很通用,似乎可以用于任何数据系统。
    但有些事情困扰着我。当观察其他行业时,我发现几乎没有人使用类似的技术。相反,在使用基于增量更新数据库的庞大集群架构中,令人生畏的复杂性是为人所接受的。这些架构的许多复杂性已经通过我所开发的方法完全避免或大大缓减了。
    在接下来的几年中,我扩展了该方法,并使之正式成为我戏称的Lambda架构。在初创公司BackType工作时,我们的5人团队构建了一个社会化媒体分析产品,该产品支持在超过100TB的数据上进行多样化实时分析。我们的小团队还负责拥有数百台机器的集群的管理部署、运营和系统监控。当我们向别人展示自己的产品时,他们对这个团队只有5个人感到非常惊讶。他们经常会问“这么几个人做了这么多事情?怎么可能!?”我的回答很简单:“不是我们在做什么,而是我们没有做什么。”通过使用Lambda架构,我们避免了困扰传统架构的复杂性。通过避免这些复杂性,我们大大提高了工作效率。
    大数据运动只是放大了已经存在了几十年的数据架构的复杂性。主要基于增量更新的大型数据库架构将遭受这些复杂性的折磨,从而导致错误、繁重的操作,并阻碍了生产力。
    尽管SQL和NoSQL数据库通常被描述成对立或相互对偶的关系,但从最基本的方面来说,它们实际上是一样的。它们都鼓励使用这种相同的架构——该架构具有不可避免的复杂性。
    复杂性是一个邪恶的野兽,无论你承认与否,它都会“咬”你。
    为了传播Lambda架构以及它如何避免传统架构的复杂性等知识,我写了本书。它是我开始从事大数据工作时就希望有的。我希望你把这本书作为一个旅程——挑战你以为自己已经知道的关于数据系统的知识,并发现从事大数据工作也可以优雅、简单和有趣。
    Nathan Marz

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网