欢迎光临
免费的PDF电子书下载网站

Hadoop大数据挖掘从入门到进阶实战(视频教学版) PDF下载

编辑推荐

博客园资深博主、极客学院特邀讲师分享多年的Hadoop使用经验

全面涵盖了Hadoop从基础部署到集群管理,再到底层设计等重点内容

深度剖析Kafka开源监控工具Kafka Eagle的设计和架构思想

提供了近200分钟配套教学视频,手把手带领读者高效学习

详解51个实例和10个综合案例,带领读者通过实际动手提高编程水平

书中的所有实例和案例均来源于作者多年的工作经验积累和技术分享

给出了大量的“避坑”技巧,让读者在实际开发中少走弯路

用浅显易懂的语言进行讲解,读者阅读时不会有云山雾罩的感觉

本书内容速览:

集群及开发环境搭建

快速构建一个Hadoop项目并线上运行

Hadoop套件实战

Hive编程——使用SQL提交MapReduce任务到Hadoop集群

游戏玩家的用户行为分析——特征提取

Hadoop平台管理与维护

Hadoop异常处理解决方案

初识Hadoop核心源码

Hadoop通信机制和内部协议

Hadoop分布式文件系统剖析

ELK实战案例——游戏应用实时日志分析平台

Kafka实战案例——实时处理游戏用户数据

Hadoop拓展——Kafka剖析

本书10大实战案例

快速构建一个Hadoop项目并线上运行

Sqoop数据传输工具实战案例

Flume日志收集工具实战案例

HBase分布式数据库实战案例

Zeppelin数据集分析工具实战案例

Drill低延时SQL查询引擎实战案例

Spark实时流数据计算实战案例

特征提取实战案例:游戏玩家的用户行为分析

ELK实战案例:游戏应用实时日志分析平台

Kafka实战案例:实时处理游戏用户数据

 ;

内容简介

本书采用“理论 实战”的形式编写,全面介绍了Hadoop大数据挖掘的相关知识。本书秉承循序渐进、易于理解、学以致用和便于查询的讲授理念,讲解时结合了大量实例和作者多年积累的一线开发经验。本书作者拥有丰富的视频制作与在线教学经验,曾经与极客学院合作开设过在线视频教学课程。为了帮助读者高效、直观地学习本书内容,作者特意为本书录制了配套教学视频,这些教学视频和本书配套源代码文件读者都可以免费获取。

本书共分为13章,涵盖的主要内容有:集群及开发环境搭建;快速构建一个Hadoop项目并线上运行;Hadoop套件实战;Hive编程——使用SQL提交MapReduce任务到Hadoop集群;游戏玩家的用户行为分析——特征提取;Hadoop平台管理与维护;Hadoop异常处理解决方案;初识Hadoop核心源码;Hadoop通信机制和内部协议;Hadoop分布式文件系统剖析;ELK实战案例——游戏应用实时日志分析平台;Kafka实战案例——实时处理游戏用户数据;Hadoop拓展——Kafka剖析。

本书通俗易懂,案例丰富,实用性强,不但适合初学者系统学习Hadoop的各种基础语法和开发技巧,而且也适合有开发经验的程序员进阶提高。另外,本书还适合社会培训机构和相关院校作为教材或者教学参考书。

作者简介

邓杰 ; 博客园资深博主,资深大数据全栈开发者,极客学院大数据讲师,开源爱好者。善于开发大数据监控系统辅助日常工作,提升工作效率。主导开发了大数据自助类平台系统。开发并在GitHub上发布了Kafka系统监控管理工具Kafka Eagle,深受业内开发者的赞誉。作为极客学院特邀讲师,制作了多个技术视频,讲授Hadoop和Kafka等相关技术课程,广受学员好评。

Hadoop大数据挖掘从入门到进阶实战(视频教学版) PDF下载

目录


 
前言
第1章  ;集群及开发环境搭建 1
1.1  ;环境准备 1
1.1.1  ;基础软件下载 1
1.1.2  ;准备Linux操作系统 2
1.2  ;安装Hadoop 4
1.2.1  ;基础环境配置 4
1.2.2  ;Zookeeper部署 7
1.2.3  ;Hadoop部署 9
1.2.4  ;效果验证 21
1.2.5  ;集群架构详解 24
1.3  ;Hadoop版Hello World 25
1.3.1  ;Hadoop Shell介绍 25
1.3.2  ;WordCount初体验 27
1.4  ;开发环境 28
1.4.1  ;搭建本地开发环境 28
1.4.2  ;运行及调试预览 31
1.5  ;小结 34
第2章  ;实战:快速构建一个Hadoop项目并线上运行 35
2.1  ;构建一个简单的项目工程 35
2.1.1  ;构建Java Project结构工程 35
2.1.2  ;构建Maven结构工程 36
2.2  ;操作分布式文件系统(HDFS) 39
2.2.1  ;基本的应用接口操作 39
2.2.2  ;在高可用平台上的使用方法 42
2.3  ;利用IDE提交MapReduce作业 43
2.3.1  ;在单点上的操作 43
2.3.2  ;在高可用平台上的操作 46
2.4  ;编译应用程序并打包 51
2.4.1  ;编译Java Project工程并打包 51
2.4.2  ;编译Maven工程并打包 55
2.5  ;部署与调度 58
2.5.1  ;部署应用 58
2.5.2  ;调度任务 59
2.6  ;小结 60
第3章  ;Hadoop套件实战 61
3.1  ;Sqoop——数据传输工具 61
3.1.1  ;背景概述 61
3.1.2  ;安装及基本使用 62
3.1.3  ;实战:在关系型数据库与分布式文件系统之间传输数据 64
3.2  ;Flume——日志收集工具 66
3.2.1  ;背景概述 67
3.2.2  ;安装与基本使用 67
3.2.3  ;实战:收集系统日志并上传到分布式文件系统(HDFS)上 72
3.3  ;HBase——分布式数据库 74
3.3.1  ;背景概述 74
3.3.2  ;存储架构介绍 75
3.3.3  ;安装与基本使用 75
3.3.4  ;实战:对HBase业务表进行增、删、改、查操作 79
3.4  ;Zeppelin——数据集分析工具 85
3.4.1  ;背景概述 85
3.4.2  ;安装与基本使用 85
3.4.3  ;实战:使用解释器操作不同的数据处理引擎 88
3.5  ;Drill——低延时SQL查询引擎 92
3.5.1  ;背景概述 93
3.5.2  ;安装与基本使用 93
3.5.3  ;实战:对分布式文件系统(HDFS)使用SQL进行查询 95
3.5.4  ;实战:使用SQL查询HBase数据库 99
3.5.5  ;实战:对数据仓库(Hive)使用类实时统计、查询操作 101
3.6  ;Spark——实时流数据计算 104
3.6.1  ;背景概述 104
3.6.2  ;安装部署及使用 105
3.6.3  ;实战:对接Kafka消息数据,消费、计算及落地 108
3.7  ;小结 114
第4章  ;Hive编程——使用SQL提交MapReduce任务到Hadoop集群 115
4.1  ;环境准备与Hive初识 115
4.1.1  ;背景介绍 115
4.1.2  ;基础环境准备 116
4.1.3  ;Hive结构初识 116
4.1.4  ;Hive与关系型数据库(RDBMS) 118
4.2  ;安装与配置Hive 118
4.2.1  ;Hive集群基础架构 119
4.2.2  ;利用HAProxy实现Hive Server负载均衡 120
4.2.3  ;安装分布式Hive集群 123
4.3  ;可编程方式 126
4.3.1  ;数据类型 126
4.3.2  ;存储格式 128
4.3.3  ;基础命令 129
4.3.4  ;Java编程语言操作数据仓库(Hive) 131
4.3.5  ;实践Hive Streaming 134
4.4  ;运维和监控 138
4.4.1  ;基础命令 138
4.4.2  ;监控工具Hive Cube 140
4.5  ;小结 143
第5章  ;游戏玩家的用户行为分析——特征提取 144
5.1  ;项目应用概述 144
5.1.1  ;场景介绍 144
5.1.2  ;平台架构与数据采集 145
5.1.3  ;准备系统环境和软件 147
5.2  ;分析与设计 148
5.2.1  ;整体分析 148
5.2.2  ;指标与数据源分析 149
5.2.3  ;整体设计 151
5.3  ;技术选型 153
5.3.1  ;套件选取简述 154
5.3.2  ;套件使用简述 154
5.4  ;编码实践 157
5.4.1  ;实现代码 157
5.4.2  ;统计结果处理 163
5.4.3  应用调度 169
5.5  小结 174
第6章  Hadoop平台管理与维护 175
6.1  Hadoop分布式文件系统(HDFS) 175
6.1.1  HDFS特性 175
6.1.2  基础命令详解 176
6.1.3  解读NameNode Standby 179
6.2  Hadoop平台监控 182
6.2.1  Hadoop日志 183
6.2.2  常用分布式监控工具 187
6.3  平台维护 196
6.3.1  安全模式 196
6.3.2  节点管理 198
6.3.3  HDFS快照 200
6.4  小结 203
第7章  Hadoop异常处理解决方案 204
7.1  定位异常 204
7.1.1  跟踪日志 204
7.1.2  分析异常信息 208
7.1.3  阅读开发业务代码 209
7.2  解决问题的方式 210
7.2.1  搜索关键字 211
7.2.2  查看Hadoop JIRA 212
7.2.3  阅读相关源码 213
7.3  实战案例分析 216
7.3.1  案例分析1:启动HBase失败 216
7.3.2  案例分析2:HBase表查询失败 219
7.3.3  案例分析3:Spark的临时数据不自动清理 222
7.4  小结 223
第8章  初识Hadoop核心源码 224
8.1  基础准备与源码编译 224
8.1.1  准备环境 224
8.1.2  加载源码 228
8.1.3  编译源码 230
8.2  初识Hadoop 2 233
8.2.1  Hadoop的起源 233
8.2.2  Hadoop 2源码结构图 234
8.2.3  Hadoop模块包 235
8.3  MapReduce框架剖析 236
8.3.1  第一代MapReduce框架 236
8.3.2  第二代MapReduce框架 238
8.3.3  两代MapReduce框架的区别 239
8.3.4  第二代MapReduce框架的重构思路 240
8.4  序列化 241
8.4.1  序列化的由来 242
8.4.2  Hadoop序列化 243
8.4.3  Writable实现类 245
8.5  小结 247
第9章  Hadoop通信机制和内部协议 248
9.1  Hadoop RPC概述 248
9.1.1  通信模型 248
9.1.2  Hadoop RPC特点 250
9.2  Hadoop RPC的分析与使用 251
9.2.1  基础结构 251
9.2.2  使用示例 257
9.2.3  其他开源RPC框架 264
9.3  通信协议 266
9.3.1  MapReduce通信协议 266
9.3.2  RPC协议的实现 273
9.4  小结 277
第10章  Hadoop分布式文件系统剖析 278
10.1  HDFS介绍 278
10.1.1  HDFS概述 278
10.1.2  其他分布式文件系统 282
10.2  HDFS架构剖析 283
10.2.1  设计特点 283
10.2.2  命令空间和节点 285
10.2.3  数据备份剖析 289
10.3  数据迁移实战 292
10.3.1  HDFS跨集群迁移 292
10.3.2  HBase集群跨集群数据迁移 297
10.4  小结 301
第11章  ELK实战案例——游戏应用实时日志分析平台 302
11.1  Logstash——实时日志采集、分析和传输 302
11.1.1  Logstash介绍 302
11.1.2  Logstash安装 306
11.1.3  实战操作 308
11.2  Elasticsearch——分布式存储及搜索引擎 309
11.2.1  应用场景 309
11.2.2  基本概念 310
11.2.3  集群部署 312
11.2.4  实战操作 317
11.3  Kibana——可视化管理系统 323
11.3.1  Kibana特性 324
11.3.2  Kibana安装 324
11.3.3  实战操作 328
11.4  实时日志分析平台案例 331
11.4.1  案例概述 331
11.4.2  平台体系架构与剖析 332
11.4.3  实战操作 334
11.5  小结 339
第12章  Kafka实战案例——实时处理游戏用户数据 340
12.1  应用概述 340
12.1.1  Kafka回顾 340
12.1.2  项目简述 347
12.1.3  Kafka工程准备 348
12.2  项目的分析与设计 349
12.2.1  项目背景和价值概述 349
12.2.2  生产模块 350
12.2.3  消费模块 352
12.2.4  体系架构 352
12.3  项目的编码实践 354
12.3.1  生产模块 354
12.3.2  消费模块 356
12.3.3  数据持久化 362
12.3.4  应用调度 364
12.4  小结 369
第13章  Hadoop拓展——Kafka剖析 370
13.1  Kafka开发与维护 370
13.1.1  接口 370
13.1.2  新旧API编写 372
13.1.3  Kafka常用命令 380
13.2  运维监控 383
13.2.1  监控指标 384
13.2.2  Kafka开源监控工具——Kafka Eagle 384
13.3  Kafka源码分析 391
13.3.1  源码工程环境构建 391
13.3.2  分布式选举算法剖析 394
13.3.3  Kafka Offset解读 398
13.3.4  存储机制和副本 398
13.4  小结 402
第1章  集群及开发环境搭建 1

媒体评论

本书不仅全面介绍了Hadoop的语法和开发技巧,而且还剖析了作者开发的Kafka开源监控工具Kafka Eagle的设计和架构思想,给读者提供了一个从入门到进阶的渐进式学习路径,是一本值得反复阅读的佳作。

——微众银行数据科学与智能应用部  钟晧明(博士)

本书是作者多年Hadoop项目开发的经验总结。对于想要学习Hadoop大数据挖掘技术的读者而言,本书是一本很好的自学教程。作者用简单明了的语言,由浅入深地介绍了书中的每个知识点,并结合大量实例分析问题,可以帮助读者很好地掌握Hadoop技术的重要知识点和开发技巧。

——小米科技大数据&云技术SRE负责人  刘亚运

前沿

大数据时代,数据的存储与挖掘至关重要。企业在追求高可靠性、高扩展性及高容错性的大数据处理平台的同时还希望能够降低成本,而Hadoop为实现这些需求提供了解决方案。

Hadoop在分布式计算与存储上具有先天优势。它作为Apache软件基金会的顶级开源项目,其版本迭代持续至今,而且已经拥有一个非常活跃的社区和全球众多开发者,并且成为了当前非常流行的大数据处理平台。很多公司,特别是互联网公司,都纷纷开始使用或者已经使用Hadoop来做海量数据存储与数据挖掘。

Hadoop简单易学,其学习曲线平缓且学习周期短。它的操作命令和Linux命令非常相似。一个熟悉Linux的开发者只需要短短的一周时间,就可以学会Hadoop开发,完成一个高可用集群的部署和高可用应用程序的编写。

面对Hadoop的普及和学习热潮,笔者愿意分享自己多年的开发经验,带领读者比较轻松地掌握Hadoop数据挖掘的相关知识。这便是笔者编写本书的原因。本书使用通俗易懂的语言进行讲解,从基础部署到集群的管理,再到底层设计等内容均有涉及。通过阅读本书,读者可以较为轻松地掌握Hadoop大数据挖掘与分析的相关技术。

本书特色

1.提供专业的配套教学视频,高效、直观

笔者曾接受过极客学院的专业视频制作指导,并在极客学院录制过多期Hadoop和Kafka实战教学视频课程,得到了众多学习者的青睐及好评。为了便于读者更加高效、直观地学习本书内容,笔者特意为本书实战部分的内容录制了配套教学视频,读者可以在教学视频的辅助下学习,从而更加轻松地掌握Hadoop。

2.分享大量来自一线的开发经验,贴近实际开发

本书给出的代码讲解和实例大多数来自于笔者多年的教学积累和技术分享,几乎都是得到了学习者一致好评的干货。另外,笔者还是一名开源爱好者,编写了业内著名的Kafka Eagle监控系统。本书第13章介绍了该系统的使用,以帮助读者掌握如何监控大数据集群的相关知识。

3.分享多个来自一线的实例,有很强的实用性

本书精心挑选了多个实用性很强的例子,如Hadoop套件实战、Hive编程、Hadoop平台管理与维护、ELK实战和Kafka实战等。读者不但可以从这些例子中学习和理解Hadoop及其套件的相关知识点,而且还可以将这些例子应用于实际开发中。

4.讲解通俗易懂,力争触类旁通,举一反三

本书用通俗易懂的语言讲解,避免“云山雾罩”,让读者不知所云。书中在讲解一些常用知识点时将Hadoop命令与Linux命令进行了对比,便于熟悉Linux命令的读者能够迅速掌握Hadoop的操作命令。

本书内容

第1章  集群及开发环境搭建

本章介绍的主要内容包括:环境准备;安装Hadoop;演示Hadoop版Hello World示例程序,以及搭建Hadoop开发环境。

第2章  实战:快速构建一个Hadoop项目并线上运行

本章首先介绍了快速构建项目工程的方法,如Maven和Java Project;然后介绍了分布式文件系统的操作命令,以及利用IDE提交MapReduce作业的相关知识;最后介绍了编译应用程序并打包,以及部署与调度等内容。

第3章  Hadoop套件实战

本章介绍了Hadoop生态圈中常见的大数据套件的背景知识和使用方法,涵盖Sqoop、Flume、HBase、Zeppelin、Drill及Spark等套件。

第4章  Hive编程——使用SQL提交MapReduce任务到Hadoop集群

本章主要介绍了Hive数据仓库的相关内容:Hive底层设计组成;安装和配置Hive;基于Hive应用接口进行编程;开源监控工具Hive Cube。

第5章  游戏玩家的用户行为分析——特征提取

本章首先对Hadoop的基础知识进行了梳理;然后介绍了项目的背景和平台架构;接着对项目进行了整体分析与指标设计,并进行了技术选型;最后对分析的指标进行了编码实践。

第6章  Hadoop平台管理与维护

本章介绍了Hadoop平台管理与维护的重要方法。本章首先介绍了Hadoop分布式文件系统的特性,然后介绍了HDFS的基础命令,并对NameNode进行了解读。另外,本章对Hadoop平台维护时的常规操作,如节点管理、HDFS快照和安全模式等内容也进行了讲解。

第7章  Hadoop异常处理解决方案

本章介绍了Hadoop异常处理解决方案的几个知识点。主要内容包括:跟踪日志;分析异常信息;利用搜索引擎检索关键字;查看Hadoop JIRA;阅读Hadoop源代码。

本章最后以实战案例的形式分析了几种异常情况:启动HBase集群失败;HBase表查询失败;Spark的临时数据不自动清理等。

第8章  初识Hadoop核心源码

本章首先介绍了Hadoop源码基础环境准备及源代码编译;接着介绍了Hadoop的起源和两代MapReduce框架间的差异;最后介绍了Hadoop的序列化机制。

第9章  Hadoop通信机制和内部协议

本章首先介绍了Hadoop通信模型和Hadoop RPC的特点;然后通过编码实践介绍了Hadoop RPC的使用,同时还介绍了与之类似的开源RPC框架;最后介绍了MapReduce的通信协议和RPC协议的实现过程。

第10章  Hadoop分布式文件系统剖析

本章主要介绍了Hadoop分布式文件系统的设计特点、命令空间和节点、数据备份策略等内容,最后以实战的形式演示了跨平台数据迁移的过程。

第11章  ELK实战案例——游戏应用实时日志分析平台

本章介绍了常用的ELK套件:Logstash——实时日志采集、分析和传输;Elasticsearch——分布式存储及搜索引擎;Kibana——可视化管理系统。

第12章  Kafka实战案例——实时处理游戏用户数据

本章首先介绍了Kafka项目的背景,以及Kafka集群和Storm集群的安装过程;然后对项目案例进行了分析与指标设计,并利用笔者多年的大数据开发经验设计项目体系架构;最后演示了各个模块的编码实现,如生产模块、消费模块、数据持久化实现及应用调度实现等。

第13章  Hadoop拓展——Kafka剖析

本章主要介绍了Kafka的基本特性与结构,以及笔者设计并开发的开源Kafka监控工具Kafka Eagle。本章关键知识点包括:Kafka开发与维护;开源监控工具Kafka Eagle的使用;Kafka源代码分析,如分布式选举算法剖析、Kafka Offset解读、Kafka存储机制和副本剖析等。

本书配套学习资源

本书提供了配套教学视频和实例源代码文件等超值资源。请在机械工业出版社华章公司的网站www.hzbook.com上搜索到本书页面,然后在“资料下载”模块下载这些学习资源。

本书读者对象

?    Hadoop初学者;

?    Hadoop进阶人员;

?    后端程序初学者;

?    前端转后端的开发人员;

?    熟悉Linux和Java而需要学习Hadoop的编程爱好者;

?    想用Hadoop快速编写海量数据处理程序的开发者;

?    相关培训机构的学员和高等院校的学生。

……

免费在线读

第2章  实战:快速构建一个Hadoop
项目并线上运行
本章将从Hadoop项目工程的创建、Hadoop应用程序的开发和使用、打包与部署、任务调度等方面来进行介绍。读者通过学习本章内容,可以进行简单的项目实战演练,以巩固前面章节学习的基础知识,同时为学习后面的Hadoop完整实战项目奠定基础。
本章将介绍Hadoop项目工程的创建,以及Hadoop应用程序的开发、使用、打包与部署及任务调度等方面的内容。
2.1  构建一个简单的项目工程
本节将通过构建一个简单的项目工程,围绕对实现分布式文件系统(HDFS)的操作展开讲述,让读者能够轻松完成实际操作。
?提示:以统计单词出现频率为背景,对分布式文件系统(HDFS)上存放的业务数据进行统计,通过编写MapReduce算法来实现统计相同单词出现的次数。
关于项目工程的构建,这里介绍两种项目工程,它们分别是普通的Java项目工程和Maven项目工程,在构建一个Hadoop项目时,读者可以选择自己熟悉的方式来创建。
2.1.1  构建Java Project结构工程
下面创建一个基于Java Project(普通的Java项目)的Hadoop项目,具体操作步骤如下。
(1)打开IDE(代码编辑器),弹出可视化界面后,依次选择File|New|Java Project命令,如图2-1所示。
(2)IDE(代码编辑器)会弹出New Java Project对话框,如图2-2所示,选择默认的Use default location复选框,并填写项目名game-x-j,选择本地的JRE环境为JavaSE-1.8,最后单击Finish按钮。
 
图2-1  IDE(代码编辑器)选择项
 
图2-2  填写Java项目工程信息
2.1.2  构建Maven结构工程
下面介绍另一种方式——通过Maven来创建Hadoop项目工程,这种方式和Java Project创建项目工程不同,需要填写groupId、artifactId和version等项目信息。
?提示:Maven项目工程是一种对象模型(POM),可以通过描述信息来管理项目的构建、报告和文档。推荐读者在学习的过程当中使用Maven结构来创建项目。
1.IDE(代码编辑器)选择项
打开IDE(代码编辑器),弹出可视化界面后,依次选择File|New|Other命令,如图2-3所示。
 
图2-3  IDE(代码编辑器)选择项
2.项目类型选择
完成上述操作后,IDE(代码编辑器)会弹出一个对话框,如图2-4所示,在其中找到Maven目录并单击展开,然后选择Maven Project子目录,之后单击Next按钮。
 
图2-4  选择Maven Project项目
 
3.项目工程属性选择
在New Maven Project对话框中选中Create a simple project复选框并单击Next按钮,如图2-5所示。
 
图2-5  设置Maven项目工程属性
4. 项目信息填写
在Artifact工作区间,填写Group Id、Artifact Id和Version 3个属性值即可,最后单击Finish按钮,完成基于Maven结构的Hadoop项目工程的创建操作,如图2-6所示。
 
图2-6  填写Maven项目工程信息
?提示:本书的Hadoop项目名为game-x,这里通过后缀m来表示该项目工程为Maven工程。其中,Group Id是项目组织唯一标识,对应Java包结构;Artifact Id是项目唯一标识,对应项目名;Version用于项目工程版本控制。
2.2  操作分布式文件系统(HDFS)
在1.3.1节中,介绍了如何使用Hadoop命令来操作分布式文件系统(HDFS),而在实际项目中,开发应用程序都是通过编程语言调用Hadoop应用接口(API)来完成相应的功能。本节将介绍通过Java编程语言开发Hadoop应用接口(API),实现对分布式文件系统(HDFS)的基本操作(上传、读取、下载等),读者通过学习本节内容来掌握Hadoop应用接口(API)的用法。
Hadoop本身是用Java编程语言实现的,在选择编程语言开发Hadoop应用程序方面,推荐使用Java编程语言,这样既能很方便地调用Hadoop提供的应用接口(API),又能保证开发完成的应用程序能够稳定地运行在Hadoop集群上。
本书演示的编程语言都是基于Java来完成的,本节内容将介绍如何使用Java编程语言来快速、简便地操作分布式文件系统(HDFS),以及在高可用平台下运行和部署应用程序。
2.2.1  基本的应用接口操作
本节读者将学习如何使用Java编程语言来操作分布式文件系统(HDFS),其知识点包含增加、读取、下载、删除等。
使用Java编程语言来实现操作分布式文件系统(HDFS)时,推荐各个函数的命名规则和Hadoop Shell命令保持一致,这样能做到见名知意,一目了然。
?提示:基本的应用接口操作有put(上传)、cat(读取)、get(下载)、rmr(删除)、ls(查看目录)、mkdir(创建目录)等。
1.上传(put)
通过使用Java编程语言,调用Hadoop应用接口(API),将本地文件上传到分布式文件系统(HDFS)中。具体实现见代码2-1。
代码2-1  上传(get)
 
/** 上传操作,将本地文本文件上传到分布式文件系统(HDFS)指定目录下。*/
public static void put(String remotePath, String localPath) throws 
IOException {
FileSystem fs = FileSystem.get(conf);// 创建一个分布式文件系统对象
Path src = new Path(localPath);// 得到操作本地文件的路径对象
Path dst = new Path(remotePath);// 得到操作分布式文件系统(HDFS)文件的路径对象
fs.copyFromLocalFile(src, dst);// 上传本地文件到目标位置
fs.close();// 关闭分布式文件操作对象
}
2.读取(cat)
通过使用Java编程语言,调用Hadoop应用接口(API),读取分布式文件系统(HDFS)上的指定文件,具体实现见代码2-2。
代码2-2  读取(cat)
 
/** 读取操作,将分布式文件系统(HDFS)中的文件读取出来。*/
public static void cat(String remotePath) throws IOException {
FileSystem fs = FileSystem.get(conf);   // 创建一个分布式文件系统对象
Path path = new Path(remotePath);       // 得到操作分布式文件系统(HDFS)文件的路径对象
if (fs.exists(path)) {                         // 判断目标位置是否存在
FSDataInputStream is = fs.open(path);  // 打开分布式文件操作对象
FileStatus status = fs.getFileStatus(path);  // 获取文件状态
byte[] buffer = new byte[Integer.parseInt(String.valueOf 
(status.getLen()))];
is.readFully(0, buffer);            // 读取文件流到buffer中
is.close();                          // 关闭流
fs.close();                              // 关闭文件操作对象
System.out.println(buffer.toString());// 打印文件流中的数据
}
}
3.下载(get)
通过使用Java编程语言,调用Hadoop应用接口(API),下载分布式文件系统(HDFS)上指定的文件,具体实现见代码2-3。
代码2-3  下载(get)
 
/** 下载操作,将分布式文件系统(HDFS)中的文件下载到本地。*/
public static void get(String remotePath, String localPath) throws IOException {
FileSystem fs = FileSystem.get(conf);// 创建一个分布式文件系统对象
Path src = new Path(remotePath);// 得到操作分布式文件系统(HDFS)文件的路径对象
Path dst = new Path(localPath);// 得到操作本地文件的路径对象
fs.copyToLocalFile(src, dst);// 下载分布式文件系统中的文件到本地
fs.close();// 关闭文件操作对象
}
4.删除(rmr)
通过使用Java编程语言,调用Hadoop应用接口(API),删除分布式文件系统(HDFS)上指定的文件,具体实现见代码2-4。
代码2-4  删除(rmr)
 
/** 删除操作,删除分布式文件系统(HDFS)中的文件。*/
public static void rmr(String remotePath) throws IOException {
FileSystem fs = FileSystem.get(conf);  // 创建一个分布式文件系统对象
Path path = new Path(remotePath);       // 得到操作分布式文件系统(HDFS)文件的路径对象
fs.delete(path, true);                    // 执行删除操作
fs.close();                                 // 关闭文件对象
}
5.查看目录(ls)
通过使用Java编程语言,调用Hadoop应用接口(API),查看分布式文件系统(HDFS)上的目录列表,具体实现见代码2-5。
代码2-5  目录列表(ls)
 
/** 目录列表操作,展示分布式文件系统(HDFS)的目录结构。*/
public static void ls(String remotePath) throws IOException {
FileSystem fs = FileSystem.get(conf);   // 创建一个分布式文件系统对象
Path path = new Path(remotePath);        // 得到操作分布式文件系统(HDFS)文件的路径对象
FileStatus[] status = fs.listStatus(path); // 得到文件状态数组
Path[] listPaths = FileUtil.stat2Paths(status);
for (Path p : listPaths) {
System.out.println(p);               // 循环打印目录结构
}
fs.close();      //关闭文件对象
}
6.创建目录(mkdir)
通过使用Java编程语言,调用Hadoop应用接口(API),实现在分布式文件系统(HDFS)上创建目录,具体实现见代码2-6。
代码2-6  创建目录(mkdir)
 
/** 创建目录,在分布式文件系统(HDFS)中创建目录。*/
public static void mkdir(String remotePath) throws IOException {
FileSystem fs = FileSystem.get(conf);// 创建一个分布式文件系统对象
Path path = new Path(remotePath);// 得到操作分布式文件系统(HDFS)文件的路径对象
fs.create(path);// 执行创建操作
fs.close();// 关闭文件对象
}
通过阅读上述Hadoop应用接口(API)的实现细节,其中编写的代码并不复杂,读者在编程开发时可以很容易地掌握。
?注意:上述代码功能最后会整合在一个名叫HDFSUtil的工具类中。源代码结构的命名规则,以不同的包名来区分。例如org.smartloli.game.x.m.book._2_2,其中,org.smartloli.game.x.m表示本书的项目名,book._2_2表示本书的2.2节演示内容。
2.2.2  在高可用平台上的使用方法
在开发应用程序时,需要保证所编写的应用程序能够适应集群环境的变化。在一个高可用(HA)平台环境下,当nna(Hadoop集群中NameNode Active节点的简称)节点由于网络异常或者人为误操作,导致该节点的状态由Active变成Standby时,应用程序要能够探测带有Active角色的服务节点,自动去连接Active节点,即故障自动转移。
?注意:在Hadoop集群节点上操作Hadoop相关进程时,需要特别小心,如若将nna节点和nns节点上的主要进程(如DFSZKFailoverController、NameNode、ResourceManager)删除,会导致集群HDFS和YARN不可用。
要完成故障转移这类操作,在Hadoop应用接口(API)中提供了一个类让开发者去实现,该类的完整路径为org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailover ProxyProvider,读者可以通过配置dfs.client.failover.proxy.provider.cluster1属性来实现,具体实现见代码2-7。
代码2-7  高可用环境执行
 
private static Configuration conf = null; // 创建配置属性值对象
static {
conf = new Configuration();
// 指定HDFS的逻辑名称,是NameNode的URI
conf.set("fs.defaultFS", "hdfs://cluster1");
// 指定HDFS的nameservice为cluster1
conf.set("dfs.nameservices", "cluster1");
// HDFS下面有两个NameNode,分别是nna节点和nns节点
conf.set("dfs.ha.namenodes.cluster1", "nna,nns");
// nna节点下的RPC通信地址
conf.set("dfs.namenode.rpc-address.cluster1.nna", "10.211.55.26:9000");
// nns节点下的RPC通信地址
conf.set("dfs.namenode.rpc-address.cluster1.nns", "10.211.55.27:9000"); 
// 实现故障自动转移方式
conf.set("dfs.client.failover.proxy.provider.cluster1","org.apache.hadoop.hdfs.server.
namenode.ha.ConfiguredFailoverProxyProvider"); 
}

 


项目并线上运行

Hadoop大数据挖掘从入门到进阶实战(视频教学版) pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:Hadoop大数据挖掘从入门到进阶实战(视频教学版)