![](https://img-blog.csdnimg.cn/20201225141830963.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Hadoop权威指南
Hadoop权威指南
一直不懂
笔记
展开
-
【Hadoop】51-MapReduce找出Top N
public class Item implements Comparable<Item>{ private Long count; private String content; public Item() { } public Item(Long count, String content) { this.count...原创 2019-08-26 23:59:53 · 221 阅读 · 0 评论 -
【Hadoop】50-MapReduce参数优化
1、 资源相关参数//以下参数是在用户自己的mr应用程序中配置就可以生效(1) mapreduce.map.memory.mb: 一个Map Task可使用的资源上限(单位:MB),默认为1024。如果Map Task实际使用的资源量超过该值,则会被强制杀死。(2) mapreduce.reduce.memory.mb: 一个Reduce Task可使用的资源上限(单位:MB),默认为...原创 2018-09-07 00:26:53 · 372 阅读 · 0 评论 -
【Hadoop】49-自定义OutputFormat
1、 需求现有一些原始日志需要做增强解析处理,流程:从原始日志文件中读取数据 根据日志中的一个URL字段到外部知识库中获取信息增强到原始日志 如果成功增强,则输出到增强结果目录;如果增强失败,则抽取原始数据中URL字段输出到待爬清单目录2、 分析程序的关键点是要在一个mapreduce程序中根据数据的不同输出两类结果到不同目录,这类灵活的输出需求可以通过自定义Outputform...原创 2018-09-07 00:20:58 · 353 阅读 · 0 评论 -
【Hadoop】48-自定义inputFormat
1、 需求无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案。2、 分析小文件的优化无非以下几种方式:在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。 在业务处理之前,在HDFS上使用mapreduce程序对小文件进行合并。 在mapreduce处理时,可采用combineInputFor...原创 2018-09-07 00:12:32 · 399 阅读 · 0 评论 -
【Hadoop】47-多job串联
一个稍复杂点的处理逻辑往往需要多个mapreduce程序串联处理,多job的串联可以借助mapreduce框架的JobControl实现。ControlledJob cJob1 = new ControlledJob(job1.getConfiguration());ControlledJob cJob2 = new ControlledJob(job2.getConfiguration(...原创 2018-09-07 00:01:21 · 615 阅读 · 4 评论 -
【Hadoop】46-计数器应用实例
在实际生产代码中,常常需要将数据处理过程中遇到的不合规数据行进行全局计数,类似这种需求可以借助mapreduce框架中提供的全局计数器来实现。示例代码如下:public class MultiOutputs { //通过枚举形式定义自定义计数器 enum MyCounter{MALFORORMED,NORMAL} static cla...原创 2018-09-06 23:57:00 · 251 阅读 · 0 评论 -
【Hadoop】45-找出每一个订单中成交金额最大的一笔交易
1、需求有如下订单数据 订单id 商品id 成交金额 Order_0000001 Pdt_01 222.8 Order_0000001 Pdt_05 25.8 Order_0000002 ...原创 2018-09-06 23:54:03 · 1040 阅读 · 0 评论 -
【Hadoop】44-社交粉丝数据分析
1、需求以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的)A:B,C,D,F,E,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:A,B,C,D,E,O,MG:A,C,D,E,FH:A,C,D,E,OI:A,OJ:B,OK:A,C,DL:D,E,FM:E,F,GO:A,H,I,J...原创 2018-09-05 00:45:28 · 2761 阅读 · 0 评论 -
【Hadoop】43-web日志预处理
1、需求对web访问日志中的各字段识别切分,去除日志中不合法的记录,数据如下:124.42.13.230 - - [18/Sep/2013:06:57:55 +0000] "GET /wp-content/themes/silesia/images/natty-logo.png HTTP/1.1" 200 1438 "http://blog.fens.me/mongodb-replica...原创 2018-09-05 00:28:07 · 387 阅读 · 0 评论 -
【Hadoop】42-MapReduce连接实例
1、map端join算法实现1.1、原理阐述适用于关联表中有小表的情形;可以将小表分发到所有的map节点,这样,map节点就可以在本地对自己所读到的大表数据进行join并输出最终结果,可以大大提高join操作的并发度,加快处理速度。1.2、实现示例先在mapper类中预先定义好小表,进行join。引入实际场景中的解决方案:一次加载数据库或者用distributedcache...原创 2018-09-05 00:21:04 · 221 阅读 · 0 评论 -
【Hadoop】41-流量统计需求
在一个文件内有如下格式数据,其中有两列分别代表上行流量数据和下行流量数据。1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 24681 2001363157995052 13826544...原创 2018-09-04 00:49:02 · 499 阅读 · 0 评论 -
【Hadoop】40-维护
1、日常管理过程1.1、元数据备份如果namenode的永久性元数据丢失或损坏,则整个文件系统无法使用。因此,元数据备份非常关键。可以在系统中分别保存若于份不同时间的备份(例如,1小时前、1天前、1周前或1个月前),以保护元数据。方法一是直接保存这些元数据文件的复本;方法二是整合到namenode上正在使用的文件中。最直接的元数据备份方法是使用dfsadmin命令下载namenode最新...转载 2018-09-01 23:26:20 · 594 阅读 · 0 评论 -
【Hadoop】39-监控
监控是系统管理的重要内容。在本小节中,我们概述Hadoop的监控工具,看看它们如何与外部监控系统相结合。监控的目标在于检测集群在何时未提供所期望的服务。主守护进程是最需要监控的,包括主namenode、辅助namenode和资源管理器。我们可以预期少数datanode和节点管理器会出现故障,特别是在大型集群中。因此,需要为集群预留额外的容量,即使有一小部分节点宕机,也不会影响整个系统的运作。除...转载 2018-09-01 17:11:33 · 345 阅读 · 0 评论 -
【Hadoop】38-管理Hadoop-HDFS
1、永久性数据结构作为管理员,深人了解namenode、辅助namenode和datanode等HDFS组件如何在磁盘上组织永久性数据非常重要。洞悉各文件的用法有助于进行故障诊断和故障检出。1.1、namenode的目录结构运行中的namenode有如下所示的目录结构:如第10章所示,dfs.namenode.name.dir属性描述了一组目录,各个目录存储着镜像内容。该机制使系统...转载 2018-09-01 16:49:15 · 510 阅读 · 0 评论 -
【Hadoop】37-利用基准评测程序测试Hadoop集群
集群是否已被正确建立?这个问题最好通过实验来回答:运行若干作业,并确信获得了预期结果。基准评测程序能获得满意的测试结果,用户可以拿结果数据和其他集群做比较,以检测新集群是否达到预期效果。此外,还可以据此调整集群设置以优化整体性能。这点一般通过监控系统实现(参见11.2节),用户可以监测集群中的资源使用情况。为了获得最佳评测结果,最好不要在运行基准评测程序时还同时运行其他任务。实际上,在集群人役之...转载 2018-08-31 00:19:55 · 423 阅读 · 0 评论 -
【Hadoop】36-安全性
早期版本的Hadoop假定HDFS和MapReduce集群运行在安全环境中,由一组相互合作的用户所操作,因而访问控制措施的目标是防止偶然的数据丢失,而非阻止非授权的数据访问。例如,HDFS中的文件许可模块会阻止用户由于程序漏洞而毁坏整个文件系统,也会阻止运行不小心输人的hadoop fs -rmr /指令,但却无法阻止某个恶意用户假冒root身份来访问或删除集群中的某些数据。从安全角度分析,Ha...转载 2018-08-30 23:58:12 · 965 阅读 · 0 评论 -
【Hadoop】35-Hadoop配置
有多个配置文件适用于Hadoop安装,表10-1列举了最重要的几个文件。这几个重要文件都放在Hadoop分发包的/etc/hadoop目录中。配置目录可以被重新安置在文件系统的其他地方(Hadoop安装路径的外面,以便于升级),只要启动守护进程时使用--config选项(或等价的,使用HADOOP_CONF_DIR环境变量集)说明这个目录在本地文件系统的位置就可以了。Hadoop配置文件 ...转载 2018-08-27 00:26:21 · 1142 阅读 · 0 评论 -
【Hadoop】34-集群的构建和安装
本节介绍如何在Unix操作系统下使用Apache Hadoop分发包安装和配置一个基础的Hadoop集群。同时也介绍一些在安装Hadoop过程中需要仔细思考的背景知识。对于产品安装,大部分用户和操作者应该考虑使用本章开始部分列举的Hadoop集群管理工具。1、安装JavaHadoop在Unix和Windows操作系统上都可以运行,但都需要安装Javao对于产品安装,应该选择一个经过Hado...转载 2018-08-26 22:13:48 · 217 阅读 · 0 评论 -
【Hadoop】33-集群规范
Hadoop运行在商业硬件上。用户可以选择普通硬件供应商生产的标准化的、广泛有效的硬件来构建集群,无需使用特定供应商生产的昂贵、专有的硬件设备。首先澄清两点。第一,商业硬件并不等同于低端硬件。低端机器常常使用便宜的零部件,其故障率远高于更贵一些(但仍是商业级别)的机器。当用户管理几十台、上百台,甚至几千台机器时,选择便宜的零部件并不划算,因为更高的故障率推高了维护成本。第二,也不推荐使用大型的数...转载 2018-08-26 21:13:09 · 503 阅读 · 0 评论 -
【Hadoop】32-构建Hadoop集群
本章介绍如何在一个计算机集群上构建Hadoop系统。尽管在单机上运行HDFS、MapReduce和YARN有助于学习这些系统,但是要想执行一些有价值的工作,必须在多节点系统上运行。有多个选择来获得一个Hadoop集群,从建立一个专属集群,到在租借的硬件设备上运行Hadoop系统,乃至于使用云端作为托管服务提供的Hadoop.被托管的选项数很多,这里就不逐一列举,但是即使你选择自己建立一个Hado...转载 2018-08-26 20:22:02 · 174 阅读 · 0 评论 -
【Hadoop】31-MapReduce库类
Hadoop还为mapper和reducer提供了一个包含了常用函数的库。表9-8简要描述了这些类。如需了解详细用法,可参考相关Java文档。 表9-8.MapReduce库的类 类的名称 描述 ChainMapper,ChainReducer 在一个mapper中运行多个mapper,再运行一个reducer,随后在一个reducer中运行多个mapper。(符号表示:M...转载 2018-08-26 17:10:29 · 173 阅读 · 0 评论 -
【Hadoop】30-边数据分布
“边数据”(side data)是作业所需的额外的只读数据,以辅助处理主数据集。所面临的挑战在于如何使所有map或reduce任务(这些任务散布在集群内部)都能够方便而高效地使用边数据。1、利用JobConf来配置作业Configuration类(或者旧版MapReduceAPI的JobConf类)的各种setter方法能够方便地配置作业的任一键·值对。如果仅需向任务传递少量元数据则非常有...转载 2018-08-26 01:04:16 · 497 阅读 · 0 评论 -
【Hadoop】29-连接
MapReduce能够执行大型数据集间的“连接”(join)操作,但是,自己从头写相关代码来执行连接的确非常棘手。除了写MapReduce程序,还可以考虑采用更高级的框架,如Pig、Hive、Cascading、Cruc或Spark等,它们都将连接操作视为整个实现的核心部分。先简要地描述待解决的问题。假设有两个数据集:气象站数据库和天气记录数据集并考虑如何合二为一。一个典型的查询是:输出各气象站...转载 2018-08-26 00:30:57 · 625 阅读 · 0 评论 -
【Hadoop】28-排序
排序是MapReduce的核心技术。尽管应用本身可能并不需要对数据排序,但仍可能使用MapReduce的排序功能来组织数据。本节将讨论几种不同的数据集排序方法,以及如何控制MapReduce的排序。12.8节介绍了如何对Avro数据进行排序。1、准备下面将按气温字段对天气数据集排序。由于气温字段是有符号整数,所以不能将该字段视为Text对象并以字典顺序排序。反之,我们要用顺序文件存储数据,...转载 2018-08-26 00:07:53 · 335 阅读 · 0 评论 -
【Hadoop】27-Hadoop的计数器
在许多情况下,用户需要了解待分析的数据,尽管这并非所要执行的分析任务的核心内容。以统计数据集中无效记录数目的任务为例,如果发现无效记录的比例相当高,那么就需要认真思考为何存在如此多无效记录。是所采用的检测程序存在缺陷,还是数据集质量确实很低,包含了大量无效记录?如果确实是数据集的质量问题,则可能需要扩大数据集的规模以增大有效记录的比例,从而进行有意义的分析。计数器是收集作业统计信息的有效手段之一...转载 2018-08-18 16:53:22 · 1825 阅读 · 0 评论 -
【Hadoop】26-MapReduce的输出格式
针对前一节介绍的输人格式,Hadoop都有相应的输出格式。OutputFormat类的层次结构如图所示。1文本输出默认的输出格式是TextOutputFormat,它把每条记录写为文本行。它的键和值可以是任意类型,因为Text0utputFormat调用toString()方法把它们转换为字符串。每个键·值对由制表符进行分隔,当然也可以设定mapreduce.output.textoutp...转载 2018-07-29 17:01:04 · 1780 阅读 · 0 评论 -
【Hadoop】25-MapReduce的输入格式
1.输入分片与记录一个输入分片(split)就是一个由单个map操作来处理的输人块。每一个map操作只处理一个输人分片。每个分片被划分为若干个记录,每条记录就是一个键·值对,map一个接一个地处理记录。输人分片和记录都是逻辑溉念,不必将它们对应到文件,尽管其常见形式都是文件。在数据库的场景中,一个输人分片可以对应于一个表上的若干行,而一条记录对应到一行(如同DBInputFormat,这种输人...转载 2018-07-25 17:20:11 · 917 阅读 · 0 评论 -
【Hadoop】24-MapReduce的类型
MapReduce的类型Hadoop的MapReduce中,map函数和reduce函数遵循如下常规格式:map:(K1,V1)->list(K2,V2)reduce:(K2,list(V2))->list(K3,K4)一般来说,map函数输人的键/值类型(K1和V1)不同于输出类型(K2和V2)。然而,reduce函数的输人类型必须与map函数的输出类型相同,但reduce函数的输出...转载 2018-07-23 00:14:31 · 1025 阅读 · 0 评论 -
【Hadoop】23-任务的执行
1、任务执行环境Hadoop为map任务或reduce任务提供运行环境相关信息。例如,map任务可以知道它处理的文件的名称(参见输入分片与记录一节),map任务或reduce任务可以得知任务的尝试次数。下表中的属性可以从作业的配置信息中获得,在老版本的MapReduceAPI中通过为Mapper或Reducer提供一个configure()方法实现(其中,配置信息作为参数进行传递),便可获得这一信...转载 2018-06-10 15:57:42 · 543 阅读 · 0 评论 -
【Hadoop】22-shuffle和排序
MapReduce确保每个reducer的输人都是按键排序的。系统执行排序、将map输出作为输人传给reducer的过程称为shuffle。在此,我们将学习shuflle是如何工作的,因为它有助于我们理解工作机制(如果需要优化MapReduce程序)。shuffle属于不断被优化和改进的代码库的一部分,因此下面的描述有老要隐藏一些细节(也可能随时间而改变,目前是020版本)。从许多方面来看,shu...转载 2018-05-22 23:58:28 · 1242 阅读 · 0 评论 -
【Hadoop】21-失败
在现实情况中,用户代码错误不断,进程崩溃,机器故障,如此种种。使用Hadoop最主要的好处之一是它能处理此类故障并让你能够成功完成作业。我们需要考虑以下实体的失败:任务、application master、节点管理器和资源管理器。1.任务运行失败首先考虑任务失败的情况。最常见的情况是map任务或reduce任务中的用户代码抛出运行异常。如果发生这种情况,任务JVM会在退出之前向其父applica...转载 2018-05-19 23:39:41 · 371 阅读 · 0 评论 -
【Hadoop】20-剖析MapReduce作业运行机制
可以通过一个简单的方法调用来运行MapReduce作业:Job对象的submit()方法。注意,也可以调用waitForCompletion(),它用于提交以前没有提交过的作业,并等待它的完成。submit()方法调用封装了大量的处理细节。本小节将揭示Hadoop运行作业时所采取的措施。整个过程描述如下图所示。在最高层,有以下5个独立的实体。客户端,提交MapReduce作业。YARN资源管理器,...转载 2018-05-19 23:15:15 · 580 阅读 · 0 评论 -
【Hadoop】19-MapReduce的工作流
至此,你已经知道MapReduce应用开发的机制了。我们目前还未考虑如何将数据处理问题转化成MapReduce模型。前面的数据处理都用来解决十分简单的问题(如在指定年份找到最高气温值的记录)。如果处理过程更复杂,这种复杂度一般是因为有更多的MapReduce作业,而不是更复杂的map和reduce函数。换而言之,通常是增加更多的作业,而不是增加作业的复杂度。对于更复杂的问题,可考虑使用比MapRe...转载 2018-05-19 22:28:19 · 512 阅读 · 0 评论 -
【Hadoop】18-作业调优
作业运行后,许多开发人员可能会问:“能够让它运行得更快一些吗?"有一些Hadoop相关的“疑点”值得检查一下,看它们是不是引发性能问题的“元凶”。在开始任务级别的分析或优化之前,必须仔细研究下表所示的检查内容。作业优化检查表:范围最佳实践更多参考信息mapper的数量mapper需要运行多长时间?如果平均只运行几秒钟,则可以看是否能用更少mapper运行更长的时间,通常是一分钟左右。时间长度取决于...转载 2018-05-19 19:34:28 · 193 阅读 · 0 评论 -
【Hadoop】17-在集群上运行MapRedece
1.打包作业本地作业运行器使用单JVM运行一个作业,只要作业需要的所有类都在类路径(classpath)上,那么作业就可以正常执行。在分布式的环境中,情况稍微复杂一些。开始的时候作业的类必须打包成一个作业JAR文件并发送给集群。Hadoop通过搜索驱动程序的类路径自动找到该作业JAR文件,该类路径包含JonfConf或Job上的setJarByClass()方法中设置的类。另一种方法,如果你想通过...转载 2018-05-19 19:07:44 · 1058 阅读 · 0 评论 -
【Hadoop】16-本地运行测试数据
现在mapper和reducer已经能够在受控的输人上进行工作了,下一步是写一个作业驱动程序(job driver),然后在开发机器上使用测试数据运行它。1在本地作业运行器上运行作业通过使用前面介绍的Tool接口,可以轻松写一个MapReducer作业的驱动程序,用它来计算按照年度查找最高气温,参见范例的MaxTemperatureDriver。范例,查找最高气温public class MaxT...转载 2018-05-13 22:36:33 · 989 阅读 · 0 评论 -
【Hadoop】15-用MRUnit编写单元测试
在MapReduce中,map函数和reduce函数的独立测试非常方便,这是由函数风格决定的。MRUnit(http://mrunit.apache.org/)是一个测试库,它便于将已知的输人传递给mapper或者检查reducer的输出是否符合预期。MRUnit与标准的测试执行框架(如JUnit)—起使用,因此可以在正常的开发环境中运行MapReduce作业的测试。1.关于Mapper范例是一个...转载 2018-05-13 21:56:35 · 368 阅读 · 0 评论 -
【Hadoop】14-MapReduce配置开发环境
首先新建一个项目,以便编译MapReduce程序并通过命令或在自己的IDE中以本地(独立,standalone)模式运行他们。在下面范例中的Maven POM项目对象模型(Project Object Model)说明了编译和测试Map-Reduce程序时需要的依赖项(dependency)。<project> <modelVersion>4.0.0</mod...转载 2018-05-13 21:14:05 · 905 阅读 · 0 评论 -
【Hadoop】13-MapReduce用于配置的API
MapReduce编程遵循一个特定的流程。首先写map函数和reduce函数,最好使用单元测试来确保函数的运行符合预期。然后,写一个驱动程序来运行作业,看这个驱动程序是否可以正确运行,就用本地IDE调试来找出问题根源。根据这些调试信息,可以通过扩展单元测试来覆盖这一测试用例,从而改进mapper或reducer,使其正确处理类似输入。 一旦程序按预期通过小型数据集的测...转载 2018-05-13 17:16:14 · 239 阅读 · 0 评论 -
【Hadoop】12-基于文件的数据结构
对于某些应用,我们需要一种特殊的数据结构来存储自己的数据。对于基于MapReduce的数据处理,将每个二进制数据大对象(blob)单独放在各自的文件中不能实现可扩展性,所以,Hadoop为此开发了很多更高层次的容器。1.关于SequenceFile考虑日志文件,其中每一行文本代表一条日志记录。纯文本不合适记录二进制类型的数据。在这种情况下,Hadoop的SequenceFile类非常合适,为二进制...转载 2018-05-13 16:47:11 · 586 阅读 · 0 评论