08 2015 档案
摘要:让你真正明白什么是MapReduce组合式,迭代式,链式
阅读全文
摘要:SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。在SequenceFile文件中,每一个key-value对被看做是一条记录(Record),基于Record的压缩策略,SequenceFile文件支持三种压缩类型:NON...
阅读全文
摘要:SequeceFile是Hadoop API提供的一种二进制文件支持。这种二进制文件直接将对序列化到文件中。可以使用这种文件对小文件合并,即将文件名作为key,文件内容作为value序列化到大文件中。这种文件格式有以下好处:1). 支持压缩,且可定制为基于Record或Block压缩(Block级压...
阅读全文
摘要:在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩。具体配置过详见配置hadoop集群的lzo压缩//压缩lzop,解压缩lzop -d[root@ncst word]# lzop words.txt [root@ncst word]# lswords.txt w...
阅读全文
摘要:MR-Job中使用lzop详见MR案例:Job中使用Lzo压缩1). 配置前的环境准备# yum -y install lzo-devel zlib-devel gcc autoconf automakelibtool2). (all) 在集群的所有节点上安装Lzo库 下载、解压,然后编译。并将...
阅读全文
摘要:Hadoop中用得比较多的4种压缩格式:lzo,gzip,snappy,bzip2。它们的优缺点和应用场景如下:1). gzip压缩优点:压缩率比较高,而且压缩/解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linu...
阅读全文
摘要:输入格式类InputFormat用于描述MR作业的输入规范,主要功能:输入规范检查(比如输入文件目录的检查)、对数据文件进行输入切分和从输入分块中将数据记录逐一读取出来、并转化为Map输入的键值对。getSplits()方法返回List集合,作用是将输入文件在逻辑上划分为多个输入分片,每个分片的数据...
阅读全文
摘要:此文承接Job流程:Mapper类分析.MapReduce为确保每个reducer的输入都按键排序,数据从map输出到reducer输入的这段过程成为Shuffle。map端1).Spill溢写. 每个map()方法都将处理结果输出到一个环形内存缓冲区buf(100MB)中(mapreduce.ta...
阅读全文
摘要:此文紧接Job流程:决定map个数的因素,Map任务被提交到Yarn后,被ApplicationMaster启动,任务的形式是YarnChild进程,在其中会执行MapTask的run()方法。无论是MapTask还是ReduceTask都是继承的Task这个抽象类。1). Mapper类中 set...
阅读全文
摘要:CombineFileInputFormat是一个抽象类。Hadoop提供了两个实现类CombineTextInputFormat和CombineSequenceFileInputFormat。此案例让我明白了三点:详见 解读:MR多路径输入 和 解读:CombineFileInputFormat类...
阅读全文
摘要:回收站机制 1). HDFS 的回收站机制由 core-site.xml 中 fs.trash.interval 属性(以分钟为单位)设置,默认是 0,表示未启用。注意:配置数值应该为1440,而配置24*60会抛出NumberFormatException异常(亲测)。 2). 回收站特性被启用时...
阅读全文
摘要:本案例采用 MultipleInputs类 实现多路径输入的倒排索引。解读:MR多路径输入package test0820;import java.io.IOException;import java.lang.reflect.Method;import org.apache.hadoop.conf...
阅读全文
摘要:hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在NameNode中占用150byte内存。如果存储大量的小文件,它们会吃掉NameNode节点的大量内存。MR案例:小文件处理方案Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件...
阅读全文
摘要:MR-Job默认的输入格式FileInputFormat为每一个小文件生成一个切片。CombineFileInputFormat通过将多个“小文件”合并为一个"切片"(在形成切片的过程中也考虑同一节点、同一机架的数据本地性),让每一个Mapper任务可以处理更多的数据,从而提高MR任务的执行速度。详...
阅读全文
摘要:对于在一个MR-Job中使用多路径作为输入文件,一般有三种方法:1).多次调用,加载不同路径:import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.out...
阅读全文
摘要://MultipleOutputs类用于简化多文件输出The MultipleOutputs class simplifies writing output data to multiple outputs //案例一:在job默认的输出之外,附加自定义的输出.自定义的输出可以指定:输出格式以及 k...
阅读全文
摘要:1. eclipse插件安装步骤:a).把插件复制到eclipse安装目录plugins文件夹下b).打开eclipse的Window---Preference---Hadoop M/R---指向hadoop-2.2.0安装目录:只要在Windows上将hadoop-2.2.0.tar.gz解压即可...
阅读全文
摘要:【外连接】是在【内连接】的基础上稍微修改即可。具体HQL语句详见Hive查询Joinpackage join.map;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apac...
阅读全文
摘要:本文是对Hive中【内连接】的Java-API的实现,具体的HQL语句详见Hive查询Joinpackage join.map;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org...
阅读全文
摘要:本文是对MR案例:Map-Join的解读。在hadoop中,共享全局变量或全局文件的几种方法使用Configuration的set()方法,只适合数据内容比较小的场景将缓存文件放在HDFS上,每次都去读取,效率比较低将缓存文件放在DistributedCache里,在setup()初始化一次后,即可...
阅读全文
摘要:适用场景:一张表十分小【key不可重复】、一张表非常大。 用法:在Job提交时,首先将小表加载到 DistributedCache 分布式缓存中,然后从DistributeCache中读取小表解析成 key/value 保存到内存中(可以放在Hash Map等容器中)。然后扫描大表中的每条记录的 k...
阅读全文
摘要:1.Hadoop Streaming是为了方便不太熟悉java用户编写MR程序的工具。用户可以将任何可执行文件(C++)或者脚本(python,ruby)作为Mapper/Reducer, 提高了效率。Hadoop Steaming 要求用户编写的Mapper/Reducer从【标准输入】中读取数据...
阅读全文
摘要:此文紧接Job流程:提交MR-Job过程。上一篇分析可以看出,MR-Job提交过程的核心代码在于 JobSubmitter 类的 submitJobInternal()方法。本文就由此方法的这一句代码开始分析://计算并确定 map 的个数,以及各个输入切片 Splits 的相关信息int maps...
阅读全文
摘要:1.一个标准 MR-Job 的执行入口://参数 true 表示检查并打印 Job 和 Task 的运行状况System.exit(job.waitForCompletion(true) ? 0 : 1);2.job.waitForCompletion(true)方法的内部实现://job.wait...
阅读全文
摘要:问题描述:两种类型输入文件:address(地址)和company(公司)进行一对多的关联查询,得到地址名(例如:Beijing)与公司名(例如:Beijing JD、Beijing Red Star)的关联信息。可参考MR案例:Map-Join1.map阶段:对比之前的单表关联可知,reduce阶...
阅读全文
摘要:1.map阶段:将单词和URI组成Key值(如“MapReduce :1.txt”),将词频作为value。 利用MR框架自带的Map端排序,将同一文档的相同单词的词频组成列表,传递给Combine过程,实现类似于WordCount的功能。Class Map{ method map(){ ...
阅读全文
摘要:问题描述:现有一批cookie日志,按照日期进行存放,如目录 “dir/2015-08-08” 下存放2015-08-08这一天的所有cookie。而目录 “/2015-08-08/” 下又根据数据文件名称的不同存放不同项目的cookie,如 “project-flag-cookie” 文件中存放的...
阅读全文
摘要:现有一学生成绩数据,格式如下: //。需求描述:查询成绩大于等于60分的学生数据,按学院分组,组内按成绩从小到大排序。使用SQL描述:Select * from table where grade >= 60 group by institute ...
阅读全文
摘要:1)Distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。2)distcp命令是以MR作业(没有R任务)的形式实现的,把文件和目录的列表作为M任务的输入。每一个文件是由一个M任务来拷贝的,distcp尽量把大小之和相同的各个文件导入到同一个M任务中。这样可以每个M任务拷贝的数据量大致相...
阅读全文
摘要:1.HDFS的Block块概念HDFS默认的Block块大小为128 MB。为何HDFS中的一个块那么大?HDFS的block块比磁盘的块大,目的是为了减小寻址开销。通过让一个块足够大,从磁盘转移数据的时间能够远远大于定位这个块开始端的时间。因此,传送一个由多个块组成的文件的时间就取决于磁盘传输送率...
阅读全文
摘要:1.简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行读入,默认以空格为分隔符将每行切片,切开的部分再进行各种分析处理。2.使用方法awk '{pattern + action}' {filenames...
阅读全文
摘要:1.HQL是否区分大小写 不区分hive> select AGE from default.studeNT; --不区分大小写,即使是表中字段2.查看创建表过程 show create tablehive> show create table default.student; --查看创建表过...
阅读全文
摘要:TextFileHive数据表的默认格式,存储方式:行存储。可使用Gzip,Bzip2等压缩算法压缩,压缩后的文件不支持split但在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。--创建数据表:create table if not ...
阅读全文
摘要:Counters: 44File System Counters FILE: Number of bytes read=655771325 FILE: Number of bytes written=984244425 FILE: Number of rea...
阅读全文
摘要:#sqoop安装1.常规步骤(安装在一台节点上即可)由于sqoop2配置相对比较麻烦,此次使用的是sqoop1进行演示。上传sqoop-1.4.4.bin_hadoop-2.0.4-alpha.tar.gz文件至/hadoop目录下,解压并重命名为sqoop-1.4.4,配置/etc/profile...
阅读全文
摘要:对于Table或者Partition,Hive可以进一步组织成桶,也就是说桶Bucket是更为细粒度的数据范围划分。Bucket是对指定列进行hash,然后根据hash值除以桶的个数进行求余,决定该条记录存放在哪个桶中。优点①:获得更高的查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时...
阅读全文
摘要:Hive中的视图是只读的,所以无法通过视图向基表(basetable)加载或插入数据。视图的SELECT语句只在执行引用视图的语句时才执行。对于上节用于查询每年各个气象站气温最大值的均值的HQL语句,可以先创建一个记录有效记录(即有特定quality值)的视图:CREATE VIEW valid_r...
阅读全文
摘要:Hive的Explain命令,用于显示SQL查询的执行计划。Hive查询被转化成序列阶段(这是一个有向无环图)。这些阶段可能是mapper/reducer阶段,或者是Metastore或文件系统的操作,如移动和重命名的阶段。例子hive> explain [extended] --加上关键字exte...
阅读全文
摘要: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;OKJoe ...
阅读全文
摘要:在hive查询中有【两种】情况是不执行MR的。1). Limit关键字限制查询的记录数,结果是随机的。下面的查询语句从Student 表中随机查询5条记录:hive> select * from student limit 5;2). 基于分区的查询。【其中,date是分区字段】hive> sele...
阅读全文
摘要:1.导入数据除了前面使用LoadData方式把文件复制或移动到表的目录外,还有以下几种方式:1).Insert Overwrite / Into Tablehive> insert overwrite table school > select age,name from stude...
阅读全文
摘要:1.查看创建表的信息 【show create table】hive> show create table student;OKcreatetab_stmtCREATE TABLE `student`( `age` int, `name` string)ROW FORMAT DELIMITE...
阅读全文
摘要://五种子句是有严格顺序的:where → group by → having → order by → limit//where和having的区别://where是先过滤再分组(对原始数据过滤),where限定聚合函数hive> select count(*),age from tea wher...
阅读全文
摘要:1.分区表分区实质:在数据表文件夹下再次创建分区文件夹 分区在创建表时用Partitioned By定义,创建表后可以使用Alter Table语句来增加或移除分区。create table logs (ts bigint,line string) partitioned by (dt strin...
阅读全文
摘要:1.内部表内部表Load数据有两种方式:① Load data ***;②hdfs dfs -put ****。这是因为在Metastore文件,即mysql的hive数据库的“SDS”表中,保存着Hive表对应的hdfs路径信息。内部表在Load数据时,如果使用LOCAL关键字,Hive会把本地文...
阅读全文
摘要:1.hive常用的数据类型包括:2.类型转换 隐式转换规则:任何整数类型都可以隐式转换为一个范围更广的类型。所有整数类型+float+String都可以转换为Double类型。 可以使用cast操作进行数据类型显示转换。例如cast('1'asint)把字符串'1'转换成整数值1,转换失败则表达...
阅读全文
摘要:1.Hive非交互模式常用命令: 1)hive-e:从命令行执行指定的HQL,不需要分号:% hive -e 'select * from dummy' > a.txt 2)hive–f:执行HQL脚本% hive -f /home/my/hive-script.sql --hive-scri...
阅读全文
摘要:Hive组织数据包含四种层次:DataBase -->Table -->Partition -->Bucket,对应在HDFS上都是文件夹形式。数据库和数据仓库的区别:1). 数据库内数据是动态变化的,而数据仓库内数据是静态的,是用来存储数据的(一次写入多次读取)2). 数据库中的数据结构比较复杂,...
阅读全文
摘要:yum install mysql-serverLinux环境下直接使用RPM包安装mysql,会报冲突错误。1.这时候先使用命令 "rpm -qa | grep mysql" 查询出和mysql相关的RPM包。2.然后使用命令 "rpm -e *-mysql-*" (-e代表擦除)删除自带的RPM...
阅读全文
摘要:Hive只需在使用节点安装即可。1.上传tar包、解压 tar -zxvf apache-hive-0.13.0-bin.tar.gz -C /hadoop/ 配置HIVE_HOME环境变量 /etc/profile2.安装mysql rpm -qa | grep mysql rpm -e ...
阅读全文
摘要:"单表关联"这个实例要求从给出的数据中寻找所关心的数据,它是对原始数据所包含信息的挖掘。需求:实例中给出 child-parent(孩子—父母)表,要求输出 grandchild-grandparent(孙子—爷奶)表。package test;import java.io.IOException;...
阅读全文
摘要:HDFS被设计来存储大文件,而有时候会有大量的小文件生成,造成NameNode资源的浪费,同时也影响MapReduce的处理效率。有哪些方案可以合并这些小文件,或者提高处理小文件的效率呢?1). 所有HDFS小文件数据导出到本地单个文件后,再存入HDFS[root@ncst ~]# hadoop f...
阅读全文
摘要:类似于Linux管道重定向机制,前一个Map的输出直接作为下一个Map的输入,形成一个流水线。设想这样一个场景:在Map阶段,数据经过mapper01和mapper02处理;在Reduce阶段,数据经过sort和shuffle后,交给对应的reducer处理。reducer处理后并没有直接写入到Hd...
阅读全文
摘要:可以继承基类Partitioner,也可以继承默认的HashPartitioner类,覆写其中的 getPartition() 方法实现自己的分区。需求:本例是对上一个实例的改写,需求不变package country;import java.io.IOException;import java.i...
阅读全文
摘要:问题描述:现有 ip-to-hosts.txt 数据文件,文件中每行数据有两个字段:分别是ip地址和该ip地址对应的国家,以'\t'分隔。要求汇总不同国家的IP数,并以国家名为文件名将其输出。解读:MultipleOutputs类测试数据:ip-to-hosts.txt18.217.167.70 U...
阅读全文
摘要:数据输入格式InputFormat类用于描述MR作业的输入规范,主要功能:输入规范检查(比如输入文件目录的检查)、对数据文件进行输入切分和从输入分块中将数据记录逐一读取出来、并转化为Map的输入键值对。细节详见解读:标准输入/输出格式Hadoop中最常用的数据输入格式包括:TextInputForm...
阅读全文
摘要:以IntWritable为例介绍,定制writable的步骤//继承 WritableComparable接口(继承了writable接口和comparable接口)public class IntWritable implements WritableComparable {//定义普通java类...
阅读全文
摘要:序列化(serialization)是指将结构化的对象转化字节流,以便在进程间通信或写入硬盘永久存储。反序列化(deserialization)是指将字节流转回到结构化对象的过程。需要注意的是,能够在网络上传输的只能是字节流。所以,Map的中间结果在不同主机间Shuffle洗牌时,结构化对象将经历序...
阅读全文

浙公网安备 33010602011771号