
hadoop学习笔记
文章平均质量分 80
YF_Li123
生活需要奔跑
展开
-
MapReduce实现二次排序
默认情况下,Map输出的结果会按照key进行排序,但在实际的应用中,有时间我们不仅要对key进行排序,同时还要对value进行排序,这时候就要用到mapreduce中的二次排序。一、 二次排序原理分析 我们对二次排序分为以下几个阶段:(1)Map起始阶段 在Map阶段,通过job.setInputFormatClass()定义的InputFormat,将输入的数据集切分成小的split,同时InputFormat提供一个RecordRead...原创 2020-09-09 18:50:31 · 1526 阅读 · 0 评论 -
MapReduce中实现全局排序方法
实现MapReduce全局排序有三种方法:使用一个reduce实现全局排序 自定义分区函数实现全局排序 使用TotalOrderPartitoner进行全局排序使用一个reduce实现全局排序 我们知道,MapReduce默认情况下只保证同一个分区中的key是有序的,不能保证全局有序。如果我们将所有的数据都用一个reduce来处理,就可以实现全局有序。缺点:此方法的缺点也很明显,所有数据发送到一个reduce进行排序,不但不能充分利用集群的分布式资源,在数据量很大的情况...原创 2020-09-09 18:37:10 · 1996 阅读 · 0 评论 -
MapReduce中的排序
哪些阶段存在排序1. 在MapReduce的shuffle阶段共有三次排序,分别是:Map的溢写(spill)阶段:根据分区及key进行快速排序; Map合并溢写文件阶段:将同一个分区的多个溢写文件经过多轮归并排序最终合并为一个文件; Reduce输入阶段:将同一个分区,不同map task的数据文件进行归并排序2. 在MapReduce的整个过程中,默认对输出的KV键值对按照key进行快速排序 Map输出排序:即map溢写排序 reduce输出排序:reduce输出时会对KV原创 2020-09-09 18:33:58 · 3453 阅读 · 0 评论 -
Hadoop中的MapReduce的shuffle过程及调优
概述Shuffle,即混洗、洗牌,顾名思义就是对数据打乱重新分配。Shuffle发生在Map输出至Reduce的输入过程之间。主要分为两部分Map任务输出的数据进行分组、合并、排序,并写入本地磁盘 Reduce任务拉取数据进行合并、排序Shuffle过程Map端Map端输出时,会先将数据写入内存的环形缓冲区,默认大小100M,可通过参数设置 当缓冲区的内容大小达到阈值(默认0.8,可通过参数设置),便有一个后台线程将写入缓冲区的数据溢写到磁盘。溢写的过程中Map任务..原创 2020-09-09 11:48:41 · 499 阅读 · 0 评论 -
Hadoop中的ReduceTask工作机制
1.设置Reduce Task并行度(个数)与Map Task的并行度有切片决定不同,Reduce Task的并行度可手动设置job.setNumReduceTasks(20); // 默认是12.ReduceTask工作机制(1)Copy阶段:Reduce Task从各个Map Task上远程拷贝一片数据,并针对某一个片数据,如果其大小超过一定阈值,则写入磁盘中,否则直接放到内存中(2)Merge阶段:在远程拷贝数据的同时,Reduce Task启动两...原创 2020-09-09 11:45:16 · 433 阅读 · 0 评论 -
Hadoop中的MapTask工作机制
1.并行度决定机制2.MapTask工作机制(1)Read阶段:Map Task通过用户编写的RecordReader,从输入的inputSplit中解析出一个个的key/value(2)Map阶段:将解析出的key/value交给用户编写的map()函数处理,并产生一系列新的key/value(3)Collect阶段:在用户编写的map()函数处理完成后,通常会调用OutputCollector.collect()将结果输出。在该函数内部,会将生成的key/value进..原创 2020-09-09 11:40:30 · 908 阅读 · 0 评论 -
MapReduce中的Combiner
前言 MapReduce框架使用Mapper将数据处理成一个个的<key, value>键值对,然后在网络节点间对其进行整理(shuffle),最后使用Reducer处理数据并输出。分析 从上面的过程中,我们可以分析出两个性能瓶颈:网络传输压力:比如我们有100亿条数据,Mapper就会生成100亿条键值对在网络间传输。如果我们只是对数据求最大值,那么很明显每一个Mapper只需要输出它所处理的数据中的最大值即可。这样不仅能减少网络传输压力,同时也能提升程序处理...原创 2020-09-09 11:25:30 · 809 阅读 · 0 评论 -
FileInputFormat切片机制 VS CombineTextInputFormat切片机制
1.FileInputFormat切片机制默认切片机制按照文件内容长度进行切片 默认大小等于block大小 切片时不考虑数据集整体性,而是逐个针对每个文件单独切片举例:两个文件File1.txt 200Mfile2.txt 20M切片信息如下:File1.txt.split1—— 0~128File1.txt.split2—— 128-200File2.txt.split1—— 0-20切片参数配置切片的计算逻辑:Math.max(minSize, ...原创 2020-09-08 20:49:53 · 458 阅读 · 0 评论 -
Hadoop中的序列化Writable
什么是序列化序列化就是把内存中的对象转化成字节序列(或者其他传输协议)以便于存储(持久化)和网络传输 反序列化就是将字节序列(或者其他传输协议)转换成内存中的对象序列化的目的序列化是为了便于网络间的数据传输Java序列化 VS Hadoop序列化 Java序列化(Serializable)是一个重量级的序列化框架,对象被序列化后会附带很多额外的信息(各种校验信息、header、继承体系等),不便于在网络中高效传输。Hadoop序列化(Writable)具有如下...原创 2020-09-08 20:42:46 · 587 阅读 · 0 评论 -
Hadoop为MapReduce提供的分布式缓存机制
概述 Hadoop为MapReduce框架提供了一种分布式缓存机制,可用于Job、Map Task或Reduce Task之间的数据共享。分布式缓存机制会将需要缓存的文件分发到各个执行任务的子节点的机器中,这样各个节点就可以自动读取本地文件系统上的数据进行处理使用方式 添加分布式缓存文件 旧版本中DistributedCache已经被注解为过时,使用新版API方式如下// 不同文件类型的添加方法job.addArchiveToClassPath(archive)...原创 2020-09-07 20:43:51 · 836 阅读 · 1 评论 -
MapReduce的容错机制(二)
前言 现实中,用户代码错误、进程崩溃、机器故障等等都可能导致MapReduce程序失败,但是Hadoop最主要的好处之一就是它能处理此类故障并完成作业。失败 经典MapReduce中的失败 YARN中的失败 YARN中的失败主要考虑三种实体的失败:任务、application master、节点资源管理器和资源管理器(1)任务失败 任务运行失败类似于经典MapReduce中的运行任务失败。JVM的运行时异常和突然退出被反馈给applicati...原创 2020-09-07 20:36:05 · 539 阅读 · 0 评论 -
MapReduce的容错机制(一)
前言 现实中,用户代码错误、进程崩溃、机器故障等等都可能导致MapReduce程序失败,但是Hadoop最主要的好处之一就是它能处理此类故障并完成作业。失败经典MapReduce中的失败 YARN中的失败经典MapReduce中的失败主要考虑三种失败模式:运行任务失败、tasktracker失败以及jobtrack失败(1)运行任务失败 子任务失败:最常见的就是map或reduce中用户代码抛异常,此时子任务JVM进程会在退出前向其父tasktracke...原创 2020-09-07 20:34:12 · 1367 阅读 · 0 评论 -
MapReduce中实现自定义分区Partitioner
有时候在利用mapreduce进行任务计算时,需要按照不同的规则,将不同的结果输出到不同的文件中,以便将计算结果分类。比如有这样一组数据,我们需要根据第一列的编号进行划分,让相同编号的第二列内容输出到同一个文件中,不同编号的内容输出到不同的文件中。0,hello world1,hello ketty2,hello tom0,hello lyf0,good morning2,...原创 2019-07-14 10:29:42 · 536 阅读 · 0 评论 -
Mapreduce中获取输入文件名及路径的方法
在map函数中想要获取当前split所读取的文件名,方法如下:1 不通用方法1 如果读入的文件类型为 TextInputFormat,则获取文件名如下:String filePath = context.getConfiguration().get("mapreduce.map.input.file");Path tmpFilePath = new Path(filePath)...原创 2019-04-15 22:40:06 · 3592 阅读 · 0 评论 -
Hadoop DistCp 命令
一、概述Distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具,使用Map/Reduce实现文件的分发、错误处理和恢复,以及生成相应的报告。要拷贝的文件和目录列表会作为map任务的输入,每个map任务处理部分文件的拷贝任务。二、使用方法集群间的拷贝:$ hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/...翻译 2019-02-24 19:41:49 · 3528 阅读 · 0 评论 -
hadoop学习笔记之hadoop集群搭建详细步骤
本次集群的搭建是在之前的伪分布集群的基础上实现的,如果没有搭建好伪分布集群,可参看之前的详细教程:hadoop学习笔记之hadoop伪分布集群搭建(一)hadoop学习笔记之hadoop伪分布集群搭建(二)hadoop学习笔记之hadoop伪分布集群搭建(三)hadoop学习笔记之hadoop伪分布集群搭建(四)hadoop学习笔记之hadoop伪分布集群搭建(原创 2018-01-25 15:07:19 · 1762 阅读 · 0 评论 -
hadoop学习笔记之hadoop伪分布集群搭建(五)
本次hadoop伪分布搭建环境:Windows10_64位+VMware9.0+Centos 6.4(32位)默认以上环境已经配置好,下面开始进行hadoop伪分布集群安装......============================================================内容如下:一、给主机服务器(Centos 6.4)配置IP地址原创 2018-01-19 17:14:02 · 686 阅读 · 0 评论 -
hadoop学习笔记之hadoop伪分布集群搭建(一)
本次hadoop伪分布搭建环境:Windows10_64位+VMware9.0+Centos 6.4(32位)默认以上环境已经配置好,下面开始进行hadoop伪分布集群安装......一、给主机服务器(Centos 6.4)配置IP地址二、安装jdk,并配置环境变量一、给主机服务器(Centos 6.4)配置IP地址首先将虚拟机网络格式设置为NAT格原创 2018-01-18 20:54:45 · 712 阅读 · 0 评论 -
hadoop学习笔记之hadoop伪分布集群搭建(二)
本次hadoop伪分布搭建环境:Windows10_64位+VMware9.0+Centos 6.4(32位)默认以上环境已经配置好,下面开始进行hadoop伪分布集群安装......============================================================内容如下:一、给主机服务器(Centos 6.4)配原创 2018-01-18 22:30:06 · 621 阅读 · 0 评论 -
hadoop学习笔记之hadoop伪分布集群搭建(四)
本次hadoop伪分布搭建环境:Windows10_64位+VMware9.0+Centos 6.4(32位)默认以上环境已经配置好,下面开始进行hadoop伪分布集群安装......============================================================内容如下:一、给主机服务器(Centos 6.4)配原创 2018-01-19 14:46:58 · 659 阅读 · 0 评论 -
Linux系统环境下安装IntelliJ IDEA
Linux系统安装 IntelliJ IDEA1、下载IDEA镜像安装文件 (1)打开IDEA官网,点击 DOWNLOAD(2)选择Linux 对应的版本下载(Community是免费的)2、安装(1) 在/opt目录下新建一个idea目录mkdir原创 2018-04-15 17:32:56 · 32945 阅读 · 2 评论 -
利用Hadoop MapReduce实现单词统计——Wordcount
Hadoop MapReduce实现单词统计——Wordcount环境:Centos 7系统+IDEA本程序是利用IDEA中的Maven来实现的,主要是因为Maven省去了在本地搭建Hadoop环境的麻烦,只需要在配置文件中进行相应的配置即可。如果你还没有安装IDEA,可以参考Linux下如何安装IntelliJ IDEA本(1)新建java Project ,并命名为WordCount。如果不知...原创 2018-04-16 20:59:02 · 2598 阅读 · 0 评论 -
MapReduce job 如何实现全局共享数据
MapReduce job 如何实现全局共享数据背景:在写MR的时候,经常会遇到这样一种情况,如何在将参数传递给map或reduce已进行下一步的处理。这时候就涉及到了全局变量。但是在MapReduce中直接使用代码的全局变量是不可行的,因为Map和Reduced在集群上都是独立运行的,并不共享同一个java虚拟机资源,那怎么办呢?有三种方法可以实现(1)读写HDFS文件(不常用)优点:支持读写,...原创 2018-05-30 20:59:12 · 1295 阅读 · 0 评论 -
MapReduce读写ORC文件
MapReduce读写ORC文件ORC的全称是Optimized Row Columnar。ORC文件格式是hadoop生态圈中的一种列式存储格式,最早来自于Apache Hive, 有着非常高的压缩比和读取效率,成为Hive中常用的一种文件格式。1、读ORC文件OrcFileReadMapper.java---------------------------------------impor...原创 2018-06-16 17:50:31 · 3147 阅读 · 0 评论 -
MapReduce 中获取Parquet 格式文件的schema
在MapReduce中读取Parquet格式文件时,默认会自动获取文件的Schema,不需要进行额外的设置即可读取。如果想获取指定文件的Schema,应该怎么做呢?1、maven相关依赖<properties> ... <parquet.version>1.9.0</parquet.version> ...</prope...原创 2018-10-18 23:09:44 · 2215 阅读 · 2 评论 -
Mapreduce读写Avro序列化文件
目录(1) MapReduce读取Avro格式文件(2) MapReduce写入Avro格式文件以WordCount为例来简单说明一下MapReduce如何读写Avro格式的序列化文件,小白初学,如有错误,欢迎批评指正!首先pom.xml文件中需要引入相关依赖<properties> <arvo.version>1.8.2</arvo...原创 2018-11-17 19:45:31 · 1012 阅读 · 0 评论 -
hadoop学习笔记之hadoop伪分布集群搭建(三)
本次hadoop伪分布搭建环境:Windows10_64位+VMware9.0+Centos 6.4(32位)默认以上环境已经配置好,下面开始进行hadoop伪分布集群安装......============================================================内容如下:一、给主机服务器(Centos 6.4)配原创 2018-01-19 13:45:26 · 890 阅读 · 0 评论