MR案例:倒排索引 && MultipleInputs】的更多相关文章

本案例采用 MultipleInputs类 实现多路径输入的倒排索引.解读:MR多路径输入 package test0820; import java.io.IOException; import java.lang.reflect.Method; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; impo…
1.map阶段:将单词和URI组成Key值(如“MapReduce :1.txt”),将词频作为value. 利用MR框架自带的Map端排序,将同一文档的相同单词的词频组成列表,传递给Combine过程,实现类似于WordCount的功能. Class Map<Longwritable, Text, Text, Longwritable>{ method map(){ //获取输入分片对应的文件名 String fileName=((FileSplit)context.getInputSpli…
问题描述:两种类型输入文件:address(地址)和company(公司)进行一对多的关联查询,得到地址名(例如:Beijing)与公司名(例如:Beijing JD.Beijing Red Star)的关联信息.可参考MR案例:Map-Join 1.map阶段:对比之前的单表关联可知,reduce阶段的key必须为关联两表的key,即address.Id = company.Id.则两表经过map处理输出的key必须是Id. Class Map<LongWritable, Text, Long…
HDFS被设计来存储大文件,而有时候会有大量的小文件生成,造成NameNode资源的浪费,同时也影响MapReduce的处理效率.有哪些方案可以合并这些小文件,或者提高处理小文件的效率呢? 1). 所有HDFS小文件数据导出到本地单个文件后,再存入HDFS [root@ncst ~]# hadoop fs -ls /test/in/small/ Found items -rw-r--r-- root supergroup -- : /test/ -rw-r--r-- root supergrou…
CombineFileInputFormat是一个抽象类.Hadoop提供了两个实现类CombineTextInputFormat和CombineSequenceFileInputFormat. 此案例让我明白了三点:详见 解读:MR多路径输入 和 解读:CombineFileInputFormat类 对于单一输入路径情况: //指定输入格式CombineFileInputFormat job.setInputFormatClass(CombineTextInputFormat.class);…
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File).在SequenceFile文件中,每一个key-value对被看做是一条记录(Record),基于Record的压缩策略,SequenceFile文件支持三种压缩类型: NONE: 对records不进行压缩; (组合1) RECORD: 仅压缩每一个record中的value值(不包括key); (组合2) BLOCK: 将一个block中的所有records(包括ke…
现有一学生成绩数据,格式如下:<学号,姓名,学院,成绩>  //<id, name, institute, grade>. 需求描述:查询成绩大于等于60分的学生数据,按学院分组,组内按成绩从小到大排序. 使用SQL描述: Select * from table group by institute order by grade; 在MR下应该怎么做? 1.map阶段选择成绩>=60分的学生. Class SelectMapper method map(LongWritabl…
类似于Linux管道重定向机制,前一个Map的输出直接作为下一个Map的输入,形成一个流水线.设想这样一个场景:在Map阶段,数据经过mapper01和mapper02处理:在Reduce阶段,数据经过sort和shuffle后,交给对应的reducer处理.reducer处理后并没有直接写入到Hdfs, 而是交给了另一个mapper03处理,它产生的最终结果写到hdfs输出目录中. 注意:对任意MR作业,Map和Reduce阶段可以有无限个Mapper,但reduer只能有一个. packag…
数据输入格式 InputFormat类用于描述MR作业的输入规范,主要功能:输入规范检查(比如输入文件目录的检查).对数据文件进行输入切分和从输入分块中将数据记录逐一读取出来.并转化为Map的输入键值对.细节详见解读:标准输入/输出格式 Hadoop中最常用的数据输入格式包括:TextInputFormat 和 KeyValueInputFormat. 1). TextInputFormat 是系统默认的数据输入格式,可以将文件的每一行解析成一个键值对.其中,Key是当前行在整个文件中的字节偏移…
字段解释: product_no:用户手机号: lac_id:用户所在基站: start_time:用户在此基站的开始时间: staytime:用户在此基站的逗留时间. product_no lac_id moment start_time user_id county_id staytime city_id -- :: -- :: -- :: -- :: -- :: -- :: -- :: -- :: -- :: -- :: 需求描述:  根据 lac_id 和 start_time 知道用户…
请参照wordcount实现一个自己的MapReduce,需求为:     a. 输入文件格式:        xxx,xxx,xxx,xxx,xxx,xxx,xxx     b. 输出文件格式:        xxx,20        xxx,30        xxx.40     c. 功能:根据命令行参数统计输入文件中指定关键字出现的次数,并展示出来        例如:hadoop jar xxxxx.jar keywordcount xxx,xxx,xxx,xxx(四个关键字) p…
SequeceFile是Hadoop API提供的一种二进制文件支持.这种二进制文件直接将<key, value>对序列化到文件中.可以使用这种文件对小文件合并,即将文件名作为key,文件内容作为value序列化到大文件中.这种文件格式有以下好处: 1). 支持压缩,且可定制为基于Record或Block压缩(Block级压缩性能较优)2). 本地化任务支持:因为文件可以被切分,因此MapReduce任务时数据的本地化情况应该是非常好的.3). 难度低:因为是Hadoop框架提供的API,业务…
在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩.具体配置过详见配置hadoop集群的lzo压缩 //压缩lzop,解压缩lzop -d [root@ncst word]# lzop words.txt [root@ncst word]# ls words.txt words.txt.lzo 2).将lzo文件上传到hdfs [root@ncst word]# hadoop fs -put words.txt.lzo /test/in/words/[root@…
[外连接]是在[内连接]的基础上稍微修改即可.具体HQL语句详见Hive查询Join package join.map; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Lon…
本文是对Hive中[内连接]的Java-API的实现,具体的HQL语句详见Hive查询Join package join.map; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.i…
适用场景:一张表十分小[key不可重复].一张表非常大. 用法:在Job提交时,首先将小表加载到 DistributedCache 分布式缓存中,然后从DistributeCache中读取小表解析成 key/value 保存到内存中(可以放在Hash Map等容器中).然后扫描大表中的每条记录的 key 是否能在内存中找到相同 join key 的记录,如果有则直接输出结果. package join.map; import java.io.BufferedReader; import java…
问题描述:现有一批cookie日志,按照日期进行存放,如目录 “dir/2015-08-08” 下存放2015-08-08这一天的所有cookie.而目录 “/2015-08-08/” 下又根据数据文件名称的不同存放不同项目的cookie,如 “project-flag-cookie” 文件中存放的是 flag 项目相关的cookie. 实际需求:统计出某一天属于项目A的唯一cookie数是多少?(唯一cookie是指去重) 1.自定义PathFilter类由于项目是根据文件名字来区分,所以就要…
"单表关联"这个实例要求从给出的数据中寻找所关心的数据,它是对原始数据所包含信息的挖掘. 需求:实例中给出 child-parent(孩子—父母)表,要求输出 grandchild-grandparent(孙子—爷奶)表. package test; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configurat…
可以继承基类Partitioner,也可以继承默认的HashPartitioner类,覆写其中的 getPartition() 方法实现自己的分区. 需求:本例是对上一个实例的改写,需求不变 package country; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.hadoop.conf.Configuration; import org.apache.h…
问题描述:现有 ip-to-hosts.txt 数据文件,文件中每行数据有两个字段:分别是ip地址和该ip地址对应的国家,以'\t'分隔.要求汇总不同国家的IP数,并以国家名为文件名将其输出.解读:MultipleOutputs类 测试数据:ip-to-hosts.txt 18.217.167.70 United States 206.96.54.107 United States 196.109.151.139 Mauritius 174.52.58.113 United States 142…
对于在一个MR-Job中使用多路径作为输入文件,一般有三种方法: 1).多次调用,加载不同路径: import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; //输入路径in01 in02 String in01 = "hdfs://RS5-112:9000/cs01/path01"; Strin…
前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS MapReduce编程实例 @ 目录 前文 MapReduce编程实例 前言 注意事项 单词统计 WordCount MapReduce 经典案例--倒排索引 MapReduce 经典案例--数据去重 MapReduce 经典案例--TopN Github下载地址 前言 简介 讲解_Hadoop 中文网 Hadoop测试项目:HadoopDemo 注意事项 如果下载了Hadoop…
第1章 MapReduce概述 定义:是一个分布式运算程序的编程框架 优缺点:易于编程.良好的扩展性.高容错性.适合PB级以上数据的离线处理 核心思想:MapReduce 编程模型只能包含一个Map 阶段和一个Reduce 阶段 MapReduce进程:MrAppMaster,负责整个程序的过程调度及状态协调MapTask,负责map阶段的数据处理ReduceTask,负责reduce阶段的数据处理 官方WordCount源码:Map 类.Reduce 类.驱动类组成 常用数据序列化类型:Had…
MR-Job中使用lzop详见MR案例:Job中使用Lzo压缩 1). 配置前的环境准备 # yum -y install lzo-devel zlib-devel gcc autoconf automakelibtool 2). (all) 在集群的所有节点上安装Lzo库 下载.解压,然后编译.并将/usr/local/hadoop/lzo-2.06目录下的所有文件打包,并同步到集群中的所有机器上.相关命令: # tar -zxvf lzo-2.06.tar.gz # cd lzo-2.06…
hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在NameNode中占用150byte内存.如果存储大量的小文件,它们会吃掉NameNode节点的大量内存.MR案例:小文件处理方案 Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具.它能将多个小文件打包成一个HAR文件,这样在减少NameNode内存使用的同时,仍然允许对小文件进行透明的访问,比如作为MapReduce的输入. 使用方法: 1). 归档前的目录结构 […
MR-Job默认的输入格式FileInputFormat为每一个小文件生成一个切片.CombineFileInputFormat通过将多个“小文件”合并为一个"切片"(在形成切片的过程中也考虑同一节点.同一机架的数据本地性),让每一个Mapper任务可以处理更多的数据,从而提高MR任务的执行速度.详见 MR案例:CombineFileInputFormat 1).三个重要的属性: maxSplitSize:切片大小最大值.可通过属性 "mapreduce.input.file…
//MultipleOutputs类用于简化多文件输出The MultipleOutputs class simplifies writing output data to multiple outputs //案例一:在job默认的输出之外,附加自定义的输出.自定义的输出可以指定:输出格式以及 key/value 类型. Case one: writing to additional outputs other than the job default output. Each additio…
本文是对MR案例:Map-Join的解读. 在hadoop中,共享全局变量或全局文件的几种方法 使用Configuration的set()方法,只适合数据内容比较小的场景 将缓存文件放在HDFS上,每次都去读取,效率比较低 将缓存文件放在DistributedCache里,在setup()初始化一次后,即可多次使用,缺点是不支持修改操作,仅能读取 DistributedCache是Hadoop提供的文件缓存机制,使得一个job的所有map或reduce可以访问同一份文件.在任务提交后,hadoo…
1.Hadoop Streaming 是为了方便不太熟悉java用户编写MR程序的工具.用户可以将任何可执行文件(C++)或者脚本(python,ruby)作为Mapper/Reducer, 提高了效率.Hadoop Steaming 要求用户编写的Mapper/Reducer从[标准输入]中读取数据,并将结果写到[标准输出]中.这个有点类似于linux的管道机制. hadoop jar /*/hadoop-streaming-2.2.0.jar -mapper map.py -reducer…
Select a.val,b.val From a [Left|Right|Full Outer] Join b On (a.key==b.key); 现有两张表:sales 列出了人名及其所购商品的 ID:things 列出商品的 ID 和名称: hive> select * from sales; OK Joe Hank Ali Eve Hank Time taken: row(s) hive> select * from things; OK Tie Coat Hat Scarf Tim…