MapReduce

大数据技术之Hadoop之MapReduce(2)——Hadoop序列化

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-06 01:26:46
第2章:Hadoop序列化 2.1 序列化概述 2.1.1什么是序列化 序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。 反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。 2.1.2为什么要序列化 一般来说,“活的”对象只生存在内存里,关机断电就没有了。而且“活的”对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机。 然而序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。 2.1.3 为什么不用Java的序列化 Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传输。所以,Hadoop自己开发了一套序列化机制(Writable)。 Hadoop序列化特点: (1)紧凑 :高效使用存储空间。 (2)快速:读写数据的额外开销小。 (3)可扩展:随着通信协议的升级而可升级 (4)互操作:支持多语言的交互 2.2 自定义bean对象实现序列化接口(Writable) 在企业开发中往往常用的基本序列化类型不能满足所有需求,比如在Hadoop框架内部传递一个bean对象,那么该对象就需要实现序列化接口。 具体实现bean对象序列化步骤如下7步。 (1

KMeans dealing with categorical variable

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-05 07:11:28
问题 I am writing a mapreduce program for Kmeans clustering algorithm on a large data file. Each observation consists of columns which include both categorical and numerical variables. For Kmeans, it is not suitable to include categorical variable in the distance calculation. So we need to filter out the columns with categorical entries. My question is: filtering out entries with characters is easy, but what if a column contains only numeric but treated as categorical (such as Zipcode, ID)? Thank

KMeans dealing with categorical variable

余生颓废 提交于 2020-03-05 07:11:09
问题 I am writing a mapreduce program for Kmeans clustering algorithm on a large data file. Each observation consists of columns which include both categorical and numerical variables. For Kmeans, it is not suitable to include categorical variable in the distance calculation. So we need to filter out the columns with categorical entries. My question is: filtering out entries with characters is easy, but what if a column contains only numeric but treated as categorical (such as Zipcode, ID)? Thank

本地运行MapReduce程序出现nativeIo问题解决方案

倾然丶 夕夏残阳落幕 提交于 2020-03-04 21:06:49
NativeIO问题 具体表现:找不到org.apache.hadoop.io.nativeio.NativeIO 1)按照网上的一些解决方法,将hadoop目录下的bin文件中的hadoop.dll和winutils.exe复制到c:\windows\System32。注意,从官网下载的hadoop的部署包是没有这两个文件的,只能通过其他途径找到相应hadoop版本的hadoop.dll和winutils.exe文件。 2)再次执行,还是无法解决。于是,重启。 3)重启后还是无法解决。又将其复制到了C:\Windows\SysWOW64。 4)还是无法解决,可能是hadoop.dll等文件版本不适配。于是,直接下载hadoop-2.7.3的源码文件。在maven工程中创建package,package与NativeIO.java的一致,为org.apache.hadoop.io.nativeio。将NativeIO.java复制到该目录下。 来源: CSDN 作者: 嗯,沉淀 链接: https://blog.csdn.net/qq_41244181/article/details/104654418

hadoop的shell操作

坚强是说给别人听的谎言 提交于 2020-03-04 12:02:55
在mapreduce的目录下,操作hadoop fs fs代表File System文件系统 hadoop jar 代表操作jar包 hadoop 只能追加,一般不适用于修改,很麻烦,因为文件被分割成block,无法执行指针定位 hadoop fs : 修改用户/分组 修改权限 -copyFromLocal 与put类似 -cp -df hadoop fs -du -s -h 等等shell命令..................... 来源: oschina 链接: https://my.oschina.net/u/4434424/blog/3187760

【hadoop】23.MapReduce-shuffle之排序

我与影子孤独终老i 提交于 2020-03-04 11:43:45
简介 排序是MapReduce框架中最重要的操作之一。 在Mapper和Reducer阶段都有涉及,Map Task和Reduce Task均会对数据(按照key)进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。 对于Map Task,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序,并将这些有序数据写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行一次合并,以将这些文件合并成一个大的有序文件。 对于Reduce Task,它从每个Map Task上 远程拷贝 相应的数据文件,如果文件大小超过一定阈值,则放到磁盘上,否则放到内存中。 如果磁盘上文件数目达到一定阈值,则进行一次合并以生成一个更大文件;如果内存中文件大小或者数目超过一定阈值,则进行一次合并后将数据写到磁盘上。当所有数据拷贝完毕后,Reduce Task统一对内存和磁盘上的所有数据进行一次合并。 1、排序分类 1、部分排序 MapReduce根据输入记录的键对数据集排序,保证输出的每个文件内部排序。 2、全排序 如何用Hadoop产生一个全局排序的文件?最简单的方法是使用一个分区。但该方法在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了MapReduce所提供的并行架构。 全排序的解决方案:

大数据(hadoop-mapreduce代码及编程模型讲解)

混江龙づ霸主 提交于 2020-03-04 11:18:09
MapReduce编程模型 MapReduce将整个运行过程分为两个阶段: Map阶段和Reduce阶段 Map阶段由一定数量的Map Task组成 输入数据格式解析: InputFormat 输入数据处理: Mapper 数据分组: Partitioner Reduce阶段由一定数量的Reduce Task组成 数据远程拷贝 数据按照key排序 数据处理:Reducer 数据输出格式:OutputFormat Map阶段 InputFormat(默认TextInputFormat) Mapper Combiner(local Reducer) Partitioner Reduce阶段 Reducer OutputFormat(默认TextOutputFormat) Java编程接口 Java编程接口组成; 旧API:所在java包: org.apache.hadoop.mapred 新API:所在java包: org.apache.hadoop.mapreduce 新API具有更好的扩展性; 两种编程接口只是暴露给用户的形式不同而已,内部执行引擎是一样的; Java新旧API 从Hadoop1.0.0开始,所有发行版均包含新旧两类API; 实例1: WordCount问题 WordCount问题—map阶段 WordCount问题—reduce阶段 WordCount问题

初涉MapReduce程序

♀尐吖头ヾ 提交于 2020-03-04 11:17:51
一 MapRecuce_WordCount 程序测试 上次的hadoop中的hdfs文件系统中,我们把hadoop根目录下面的conf下的所有.xml文件上传到了hdfs文件系统中,下面我们就通过mapreduce程序来对单词进行一下统计 首先我们进入到hadoop的根目录下面,然后执行如下的命令 hadoop jar hadoop-examples-1.2.1.jar wordcount /opt/data/temp/input/ /opt/data/temp/output/ 之后我们再查看下文件系统,你会发现在文件系统中多出了一个output的目录,如下图,表示已经成功了,上面这个命令 主要是用于单词的统计. 接下来我们查看一下统计的结果: 上面是通过命令的方式去查看的,当然我们也可以通过文件系统去查看,结果是一样的. 二 MapRecuce_WordCount程序解析 下面就上面这个图我稍微解析下。 首先是客户将数据我自己的本地文件上传到我们的hdfs分布式文件系统中,当我们的用户运行前面的jar测试程序的时候,首先到hdfs文件系统中拿到这些文件,因为文件系统中有两个文件,每个文件对应一个MapReduce程序,每个程序分别解析文件当中的单词,也就是从Map到sorter的过程,然后会对解析的这些单词进行排序处理,也就是从sorter到Reduc的过程

大数据教程(9.1)流量汇总排序的mr实现

给你一囗甜甜゛ 提交于 2020-03-04 11:17:17
上一章我们有讲到一个mapreduce案例——移动流量排序,如果我们要将最后的输出结果按总流量大小逆序输出,该怎么实现呢?本节博主将分享这个实现的过程。 一、分析 首先,要实现这个功能,我们可能会想到是否有办法将输出的结果先缓存起来,等执行完成后,在排序一起次性全部输出。是的,这的确是一个可以实现的思路; 我们可以启动一个reduce来处理,在reduce阶段中reduce()方法每次执行时,将key和value缓存到一个TreeMap里面,并且不执行输出;当reduce全部切片处理完成后,会调用一个cleanup()方法,且这个方法仅会被调用一次,我们可以在这个方法里面做排序输出。 上面的这种方式确实是可以实现,当是并不是很优雅;我们可以利用mapreduce自身的map阶段输出key的特性来实现,这个特性就是所有的key会按照key类comparable方法实现的实现去做排序输出。详细过程,我们可以将整个需求分成两个mapreduce过程来执行,第一个mapreduce就和之前的博客中一样只做统计流量,第二个mapreduce我们就用key的特性去实现排序。 二、实现方案(key特性实现方式) FlowBean(流量统计bean类) package com.empire.hadoop.mr.flowsort; import java.io.DataInput; import

大数据教程(8.4)移动流量分析案例

人走茶凉 提交于 2020-03-04 11:15:10
前面分享了使用mapreduce做wordcount单词统计的实现与原理。本篇博主将继续分享一个移动流量分析的经典案例,来帮助在实际工作中理解和使用hadoop平台。 一、需求 以下是一个移动流量的日志,我们需要根据日志分析出每个手机号对应的上行流量、下行流量、总流量。 1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 24681 200 1363157995052 13826544101 5C-0E-8B-C7-F1-E0:CMCC 120.197.40.4 4 0 264 0 200 1363157991076 13926435656 20-10-7A-28-CC-0A:CMCC 120.196.100.99 2 4 132 1512 200 1363154400022 13926251106 5C-0E-8B-8B-B1-50:CMCC 120.197.40.4 4 0 240 0 200 1363157993044 18211575961 94-71-AC-CD-E6-18:CMCC-EASY 120.196.100.99 iface.qiyi.com 视频网站 15 12 1527 2106 200 1363157995074