内容简介
这是一本Hadoop实用手册,主要针对实际问题给出相应的解决方案。《Hadoop实战手册》特色是以实践结合理论分析,手把手教读者如何操作,并且对每个操作都做详细的解释,对一些重要的知识点也做了必要的拓展。全书共包括3个部分,第一部分为基础篇,主要介绍Hadoop数据导入导出、HDFS的概述、Pig与Hive的使用、ETL和简单的数据处理,还介绍了MapReduce的调试方式;第二部分为数据分析高级篇,主要介绍高级聚合、大数据分析等技巧;第三部分为系统管理篇,主要介绍Hadoop的部署的各种模式、添加新节点、退役节点、快速恢复、MapReduce调优等。
《Hadoop实战手册》适合各个层次的Hadoop技术人员阅读。通过阅读《Hadoop实战手册》,Hadoop初学者可以使用Hadoop来进行数据处理,Hadoop工程师或者数据挖掘工程师可以解决复杂的业务分析,Hadoop系统管理员可以更好地进行日常运维。《Hadoop实战手册》也可作为一本Hadoop技术手册,针对要解决的相关问题,在工作中随时查阅。
作者简介
Jonathan R.Owens:软件工程师,拥有Java和C++技术背景,最近主要从事Hadoop及相关分布式处理技术工作。目前就职于comScore公司,为核心数据处理团队成员。comScore是一家知名的从事数字测量与分析的公司,公司使用Hadoop及其他定制的分布式系统对数据进行聚合、分析和管理,每天处理超过400亿单的交易。 Jon Lentz:comScore核心数据处理团队软件工程师。他更倾向于使用Pig脚本来解决问题。在加入comScore之前,他主要开发优化供应链和分配固定收益证券的软件。 Brian Femiano:本科毕业于计算机科学专业,并且从事相关专业软件开发工作6年,最近两年主要利用Hadoop构建高级分析与大数据存储。他拥有商业领域的相关经验,以及丰富的政府合作经验。他目前就职于Potomac Fusion公司,这家公司主要从事可扩展算法的开发,并致力于学习并改进政府领域中最先进和最复杂的数据集。他通过教授课程和会议培训在公司内部普及Hadoop和云计算相关的技术。
内页插图
目录
目 录
第1章 Hadoop分布式文件系统——导入和导出数据 1
1.1 介绍 1
1.2 使用Hadoop shell命令导入和导出数据到HDFS 2
1.3 使用distcp实现集群间数据复制 7
1.4 使用Sqoop从MySQL数据库导入数据到HDFS 9
1.5 使用Sqoop从HDFS导出数据到MySQL 12
1.6 配置Sqoop以支持SQL Server 15
1.7 从HDFS导出数据到MongoDB 17
1.8 从MongoDB导入数据到HDFS 20
1.9 使用Pig从HDFS导出数据到MongoDB 23
1.10 在Greenplum外部表中使用HDFS 24
1.11 利用Flume加载数据到HDFS中 26
第2章 HDFS 28
2.1 介绍 28
2.2 读写HDFS数据 29
2.3 使用LZO压缩数据 31
2.4 读写序列化文件数据 34
2.5 使用Avro序列化数据 37
2.6 使用Thrift序列化数据 41
2.7 使用Protocol Buffers序列化数据 44
2.8 设置HDFS备份因子 48
2.9 设置HDFS块大小 49
第3章 抽取和转换数据 51
3.1 介绍 51
3.2 使用MapReduce将Apache日志转换为TSV格式 52
3.3 使用Apache Pig过滤网络服务器日志中的爬虫访问量 54
3.4 使用Apache Pig根据时间戳对网络服务器日志数据排序 57
3.5 使用Apache Pig对网络服务器日志进行会话分析 59
3.6 通过Python扩展Apache Pig的功能 61
3.7 使用MapReduce及二次排序计算页面访问量 62
3.8 使用Hive和Python清洗、转换地理事件数据 67
3.9 使用Python和Hadoop Streaming执行时间序列分析 71
3.10 在MapReduce中利用MultipleOutputs输出多个文件 75
3.11 创建用户自定义的Hadoop Writable及InputFormat读取地理事件数据 78
第4章 使用Hive、Pig和MapReduce处理常见的任务 85
4.1 介绍 85
4.2 使用Hive将HDFS中的网络日志数据映射为外部表 86
4.3 使用Hive动态地为网络日志查询结果创建Hive表 87
4.4 利用Hive字符串UDF拼接网络日志数据的各个字段 89
4.5 使用Hive截取网络日志的IP字段并确定其对应的国家 92
4.6 使用MapReduce对新闻档案数据生成n-gram 94
4.7 通过MapReduce使用分布式缓存查找新闻档案数据中包含关键词的行 98
4.8 使用Pig加载一个表并执行包含GROUP BY的SELECT操作 102
第5章 高级连接操作 104
5.1 介绍 104
5.2 使用MapReduce对数据进行连接 104
5.3 使用Apache Pig对数据进行复制连接 108
5.4 使用Apache Pig对有序数据进行归并连接 110
5.5 使用Apache Pig对倾斜数据进行倾斜连接 111
5.6 在Apache Hive中通过map端连接对地理事件进行分析 113
5.7 在Apache Hive通过优化的全外连接分析地理事件数据 115
5.8 使用外部键值存储(Redis)连接数据 118
第6章 大数据分析 123
6.1 介绍 123
6.2 使用MapReduce和Combiner统计网络日志数据集中的独立IP数 124
6.3 运用Hive日期UDF对地理事件数据集中的时间日期进行转换与排序 129
6.4 使用Hive创建基于地理事件数据的每月死亡报告 131
6.5 实现Hive用户自定义UDF用于确认地理事件数据的来源可靠性 133
6.6 使用Hive的map/reduce操作以及Python标记最长的无暴力发生的时间区间 136
6.7 使用Pig计算Audioscrobbler数据集中艺术家之间的余弦相似度 141
6.8 使用Pig以及datafu剔除Audioscrobbler数据集中的离群值 145
第7章 高级大数据分析 147
7.1 介绍 147
7.2 使用Apache Giraph计算PageRank 147
7.3 使用Apache Giraph计算单源最短路径 150
7.4 使用Apache Giraph执行分布式宽度优先搜索 158
7.5 使用Apache Mahout计算协同过滤 165
7.6 使用Apache Mahout进行聚类 168
7.7 使用Apache Mahout进行情感分类 171
第8章 调试 174
8.1 介绍 174
8.2 在MapReduce中使用Counters监测异常记录 174
8.3 使用MRUnit开发和测试MapReduce 177
8.4 本地模式下开发和测试MapReduce 179
8.5 运行MapReduce作业跳过异常记录 182
8.6 在流计算作业中使用Counters 184
8.7 更改任务状态显示调试信息 185
8.8 使用illustrate调试Pig作业 187
第9章 系统管理 189
9.1 介绍 189
9.2 在伪分布模式下启动Hadoop 189
9.3 在分布式模式下启动Hadoop 192
9.4 添加一个新节点 195
9.5 节点安全退役 197
9.6 NameNode故障恢复 198
9.7 使用Ganglia监控集群 199
9.8 MapReduce作业参数调优 201
第10章 使用Apache Accumulo进行持久化 204
10.1 介绍 204
10.2 在Accumulo中设计行键存储地理事件 205
10.3 使用MapReduce批量导入地理事件数据到Accumulo 213
10.4 设置自定义字段约束Accumulo中的地理事件数据 220
10.5 使用正则过滤器限制查询结果 225
10.6 使用SumCombiner计算同一个键的不同版本的死亡数总和 228
10.7 使用Accumulo实行单元级安全的扫描 232
10.8 使用MapReduce聚集Accumulo中的消息源 237
前言/序言
Hadoop实战手册——解锁大数据价值的钥匙 在信息爆炸的时代,数据以前所未有的速度生成、积累和传播。从社交媒体的互动到物联网设备的传感器数据,再到商业交易的每一次点击,海量数据已成为企业决策、科学研究和技术创新的核心驱动力。然而,如何有效地收集、存储、处理和分析这些规模庞大、类型多样的数据,成为了摆在我们面前的巨大挑战。传统的数据处理技术在面对PB甚至EB级别的数据时,显得力不从心。正是为了应对这一挑战,Hadoop应运而生,并迅速发展成为大数据领域的事实标准。 《Hadoop实战手册》正是为帮助您深入理解并熟练掌握Hadoop这一强大的分布式计算框架而精心编写的。本书并非简单地罗列Hadoop的各个组件,而是致力于为您提供一套系统、实用且深入的实践指南,让您能够真正地驾驭Hadoop,挖掘海量数据背后的宝藏。 本书内容概览: 本书从Hadoop的基础概念入手,逐步深入到核心组件的原理与实践,再到上层生态系统的应用,旨在构建一个全面、完整的Hadoop知识体系。 第一部分:Hadoop基础与核心组件 大数据时代的挑战与Hadoop的崛起: 我们将首先探讨当前大数据面临的痛点,分析传统技术方案的局限性,并阐述Hadoop如何凭借其分布式存储和计算的特性,成为解决这些挑战的理想方案。您将理解Hadoop的分布式哲学,以及它如何通过“数据即代码”的理念,颠覆传统数据处理模式。 Hadoop分布式文件系统 (HDFS) 详解: HDFS是Hadoop生态系统的基石,负责海量数据的分布式存储。本章将深入剖析HDFS的架构,包括NameNode、DataNode、Secondary NameNode的角色与协作机制,以及块(Block)的存储方式、副本策略、故障恢复机制等。您将学习到如何进行HDFS的安装配置,掌握命令行工具和API的使用,了解HDFS的写操作、读操作、文件元数据管理以及性能优化技巧。我们将详细讲解HDFS的容错机制,确保数据在节点故障时依然安全可靠。 Yet Another Resource Negotiator (YARN) 剖析: YARN是Hadoop 2.x引入的资源管理和作业调度框架,它将Hadoop的资源管理和计算框架进行了解耦,极大地提升了Hadoop集群的灵活性和效率。本章将详细讲解YARN的架构,包括ResourceManager、NodeManager、ApplicationMaster和Container等核心组件的功能。您将学习到YARN的工作流程,理解资源申请、分配、监控的整个过程。此外,我们还将探讨YARN的多种调度器,如FIFO、Capacity Scheduler和Fair Scheduler,以及如何根据实际需求进行配置和优化。 MapReduce编程模型: MapReduce是Hadoop的核心计算引擎,它是一种简单而强大的分布式编程模型,能够高效地处理大规模数据集。本章将从理论层面深入讲解MapReduce的设计理念,包括Map阶段、Shuffle阶段和Reduce阶段的工作原理。您将学习到如何使用Java API编写MapReduce程序,理解InputFormat、OutputFormat、Mapper、Reducer、Combiner、Partitioner等关键接口。通过丰富的代码示例,您将掌握如何处理各种数据类型,进行数据过滤、转换、聚合等常见操作,并学习MapReduce作业的提交、监控与调优。 第二部分:Hadoop生态系统深入探索 Hive:大数据上的SQL接口: Hive是一个构建在Hadoop之上的数据仓库工具,它提供了一种类似于SQL的查询语言——HiveQL,使得熟悉SQL的用户能够轻松地在Hadoop集群上进行数据分析。本章将介绍Hive的架构,包括Metastore、HiveServer2、HiveQL解析器等。您将学习到如何创建和管理Hive表,理解HiveQL与MapReduce的转换过程,并掌握各种HiveQL语句的编写,包括数据查询、插入、删除、更新等。我们将重点讲解Hive的数据存储格式(如TextFile, SequenceFile, ORC, Parquet)和压缩格式,以及Hive的优化技巧,如分区表、分桶表、索引、谓词下推和查询优化器。 HBase:分布式NoSQL数据库: HBase是一个开源的、分布式的、非关系型(NoSQL)数据库,它运行在HDFS之上,提供了对大数据集实时、随机读写的能力。本章将深入讲解HBase的架构,包括HMaster、RegionServer、ZooKeeper、HDFS在HBase中的作用。您将学习到HBase的数据模型(行键、列族、列限定符、时间戳),掌握HBase的CRUD操作,了解HBase的协处理器(Coprocessor)用于实现更底层的逻辑。我们还将探讨HBase的读写流程、数据存储(HFile)、Compaction、WAL(Write-Ahead Log)等核心机制,以及如何进行HBase集群的部署、运维和性能调优。 ZooKeeper:分布式协调服务: ZooKeeper是Hadoop集群中不可或缺的分布式协调服务。它为分布式应用提供了一致性、高可用性的协调机制,例如分布式锁、配置管理、服务发现等。本章将讲解ZooKeeper的架构,包括Client、Server、Ensemble、ZNode等概念。您将学习到ZooKeeper的基本操作,如创建、读取、更新、删除ZNode,以及Watcher机制。我们将重点介绍ZooKeeper在Hadoop、HBase、Kafka等组件中的应用,以及如何利用ZooKeeper构建可靠的分布式系统。 Spark:新一代大数据处理引擎: Apache Spark是一个快速、通用的大数据处理引擎,它提供了比MapReduce更快的执行速度和更丰富的API,支持批处理、流处理、机器学习和图计算。本章将深入讲解Spark的核心概念,包括RDD(Resilient Distributed Dataset)、Spark SQL、Spark Streaming、MLlib和GraphX。您将学习到Spark的执行模型,理解Stage、Task、DAG等概念。我们将重点介绍Spark的API使用,包括Scala、Java和Python,并通过实际案例演示如何在Spark上进行复杂的数据处理和分析。本书还会重点讲解Spark的调优技巧,包括内存管理、Shuffle优化、数据序列化等。 第三部分:Hadoop集群的部署、管理与应用 Hadoop集群部署与配置: 本章将提供详细的Hadoop集群部署指南,涵盖单机模式、伪分布式模式和完全分布式模式的搭建步骤。您将学习到如何使用Cloudera Manager、Apache Ambari等集群管理工具,或者手动配置Hadoop的各个核心组件。我们将详细讲解NameNode、ResourceManager、HBase Master、Hive Metastore等服务的启动和管理,以及HDFS、YARN、HBase、Hive等服务的配置参数优化。 Hadoop集群监控与维护: 一个稳定可靠的大数据平台离不开持续的监控和精细的维护。本章将介绍Hadoop集群的常用监控工具,如Ganglia、Nagios,以及Hadoop Web UI提供的监控指标。您将学习如何识别和诊断集群中的常见问题,如性能瓶颈、节点故障、磁盘空间不足等,并掌握相应的处理方法。我们还将探讨Hadoop集群的升级、备份与恢复策略。 Hadoop生态系统的其他重要组件: 除了上述核心组件,Hadoop生态系统还包括许多其他强大的工具。本章将简要介绍这些组件,如: Sqoop: 用于在Hadoop与关系型数据库之间导入导出数据。 Flume: 用于采集、聚合和传输大量的日志数据。 Kafka: 分布式发布-订阅消息系统,是实时数据流处理的关键组件。 Oozie: 用于编排和调度Hadoop作业的工作流调度器。 Mahout/Spark MLlib: 用于大数据机器学习的算法库。 Elasticsearch/Solr: 分布式搜索和分析引擎,常与Hadoop结合使用。 您将了解这些工具的功能和应用场景,以及它们如何与其他Hadoop组件协同工作,构建更强大的数据解决方案。 实际案例分析与应用场景: 为了帮助您将所学知识融会贯通,《Hadoop实战手册》的最后部分将通过多个贴近实际的案例,展示Hadoop在不同行业和场景下的应用。我们将涵盖: 电商数据分析: 用户行为分析、商品推荐系统、欺诈检测。 金融行业大数据: 风险评估、反洗钱、客户画像。 物联网(IoT)数据处理: 传感器数据分析、设备状态监控、预测性维护。 社交媒体分析: 舆情监控、用户情感分析、话题发现。 日志分析与监控: 应用性能监控、安全审计、异常检测。 通过这些案例,您将能够清晰地看到Hadoop如何解决实际业务问题,并获得构建类似解决方案的灵感和指导。 本书特点: 理论与实践并重: 本书不仅深入讲解Hadoop各组件的原理,更强调动手实践。每个核心概念都配有详细的代码示例和操作步骤,让您能够边学边练。 由浅入深,循序渐进: 从Hadoop的基础知识开始,逐步引入复杂的概念和高级特性,确保不同基础的读者都能轻松入门并不断深入。 贴近实战,案例丰富: 引入大量实际应用场景和行业案例,帮助您理解Hadoop的价值,并为您的项目提供借鉴。 权威性与前沿性: 紧跟Hadoop技术的发展趋势,涵盖了Spark等新兴技术,为您提供最具价值的学习内容。 图文并茂,易于理解: 大量使用图示和表格,清晰地展示Hadoop的架构和工作流程,降低理解难度。 适合读者: 对大数据技术感兴趣的开发者、数据工程师、架构师。 希望掌握Hadoop分布式计算框架,提升数据处理能力的IT从业人员。 需要搭建、管理和维护Hadoop集群的系统管理员。 希望利用大数据分析驱动业务增长的企业决策者和产品经理。 在校学生和科研人员,希望深入了解大数据技术的研究者。 《Hadoop实战手册》将是您踏入大数据世界、解锁数据价值的得力助手。无论您是初学者还是有一定经验的从业者,本书都将为您提供坚实的基础、实用的技能和广阔的视野。让我们一起,用Hadoop驾驭数据的洪流,创造无限可能!