hadoop学习;自己定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

时间:2023-01-31 17:33:21

hadoop切割与读取输入文件的方式被定义在InputFormat接口的一个实现中。TextInputFormat是默认的实现,当你想要一次获取一行内容作为输入数据时又没有确定的键。从TextInputFormat返回的键为每行的字节偏移量,但眼下没看到用过

曾经在mapper中曾使用LongWritable(键)和Text(值),在TextInputFormat中,由于键是字节偏移量。能够是LongWritable类型,而当使用KeyValueTextInputFormat时,第一个分隔符前后都是Text类型,所以你必须改动mapper的实现以及map()方法来适应这个新键类型

hadoop学习;自己定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

一个MapReduce的输入不一定是外部数据,经常是一些其它MapReduce的输出数据,还能够自己定义输出格式,默认的输出格式与KeyValueTextInputFormat能够读取的的数据格式保持一致(记录中的每行均为一个由制表符分隔的键和值),只是Hadoop提供了更加有效的二进制压缩文件格式。称为序列文件,这个序列文件为hadoop处理做了优化。当连接多个MapReduce作业时,它是首选,读取序列文件的类为SequenceFileInputFormat,序列文件的键和值对象能够由用户自己定义。输出和输入类型必须匹配

自己定义InputFormat,实现两个方法:

getSplit()确定全部用于输入数据的文件,并将输入数据切割为输入分片,每一个map任务处理一个分片

getRecordReader()循环提取给定分片中的记录,并解析每一个记录为提前定义类型的键和值

在实际情况中一个分片总是以数据块为大小,在HDFS中默认一个块为64MB

FileInputFormat中isSplitable()方法。检查你能否够将给定文件分片,默认返回为true。有时你可能想要一个文件为其自身的分块,这时能够设定返回为false

LineRecordReader实现RecordReader,基于实现的封装,大多数操作存放在next中

我们通过扩展FileInputFormat生成我们的InputFormat类,并实现一个factory方法来返回recordreader

除了类的构建之外,TimeUrlRecordReader会在RecordReader实现6种方法,它主要在KeyValueInputFormat之外的一个封装,但吧记录的Text类型转换为URLWritable

输出数据到文件时,使用的是OutputFormat。由于每一个reducer仅需将它的输出写入自己的文件里,输出不须要分片。

输出文件放在一个公用文件夹中。通常命名为part-nnnnn。这里的nnnnn是reducer的分区ID。RecordWriter对输出结果进行格式化。而RecordReader对输入格式进行解析

NullOutPutFormat简单的实现了OutputFormat,无输出。并不须要继承FileOutputFormat。更基本的是OutputFormat(InputFormat)处理的是数据库。并不是文件

个性化输出能够在继承了FileOutputFormat的类中的封装的继承RecordReader类中的write()方法。假设不仅仅想输出到文件里

jar -xvf  ../example.jar  解压jar包

向hdfs迁移本地文件能够,程序中地址别写错了,别写成其它不关联的机子上的

在eclipse中写完程序,打成jar包。放到hadoop目录下,执行hadoop指令能够查看结果

若运用第三方插件fatjar,将mapreduce的jar包和jedis的jar包整合到一起放入hadoop。这样不须要改动manifest配置信息

hadoop学习;自己定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmVlZGthbmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

我们导出jar包(不用包括hadoop的jar包)放入hadoop目录下,执行hadoop命令,类用长名

package com.kane.hdfs;





import java.io.IOException;





import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.BlockLocation;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.hdfs.DistributedFileSystem;

import org.apache.hadoop.hdfs.protocol.DatanodeInfo;





public class FindFileOnHDFS {





/**

* @param args

* @throws IOException 

*/

public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

getHDFSNodes();

getFileLocal();

}

public static void getHDFSNodes() throws IOException {

//HDFS集群节点数

Configuration conf=new  Configuration();

FileSystem fs=FileSystem.get(conf);

//获取分布式文件系统

DistributedFileSystem hdfs=(DistributedFileSystem)fs;

//获取全部的节点数

DatanodeInfo[] dataNodeStats=hdfs.getDataNodeStats();

//循环打印

for (int i = 0; i < dataNodeStats.length; i++) {

System.out.println("DataNode_"+i+"_Name:"+dataNodeStats[i].getHostName());


}

}

/**

* 查找某个文件在HDFS集群的位置

* @throws IOException 

*/

public static void getFileLocal() throws IOException {

Configuration conf=new Configuration();

FileSystem hdfs=FileSystem.get(conf);



Path fPath=new Path("user/hadoop/20120722");//word.txt

//获取文件系统里面的文件信息

FileStatus fileStatus=hdfs.getFileStatus(fPath);

//获取文件的块信息

BlockLocation[] blkLocations=hdfs.getFileBlockLocations(fileStatus, 0, 1000);

int blockLen=blkLocations.length;

for (int i = 0; i < blockLen; i++) {

String[] hosts=blkLocations[i].getHosts();

System.out.println("block_"+i+"_location"+hosts[0]);

}

}





}

hadoop学习;自己定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

hadoop学习;自己定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

搭建三种模式,一般默认单机模式:不使用HDFS,也不载入不论什么守护进程,主要用于开发调试

伪分布模式在“单节点集群”上执行hadoop,当中全部守护进程都在一台机子上,添加了代码调试功能。同意检查内存使用情况,HDFS输入输出。以及其它的守护进程交互

全分布模式。真实情况用这样的模式。强调分布式存储和分布式计算,明白声明了NameNode和JobTracker守护进程所在的主机名。

增大了HDFS备份參数发挥分布式存储优势

hadoop学习;自己定义Input/OutputFormat;类引用mapreduce.mapper;三种模式的更多相关文章

  1. 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:

    小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...

  2. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  3. Intel微处理器学习笔记(二) 三种模式

    三种模式:实模式.保护模式和平展模式. 实模式存储器(DOS存储器)位于00000H~FFFFFH,共1M空间(任何型号微处理器都支持). 保护模式存储器(Windows存储器)可位于整个保护存储系统 ...

  4. Hadoop学习之路(十九)MapReduce框架排序

    流量统计项目案例 样本示例 需求 1. 统计每一个用户(手机号)所耗费的总上行流量.总下行流量,总流量 2. 得出上题结果的基础之上再加一个需求:将统计结果按照总流量倒序排序 3. 将流量汇总统计结果 ...

  5. Hadoop学习之路(二十七)MapReduce的API使用(四)

    第一题 下面是三种商品的销售数据 要求:根据以上数据,用 MapReduce 统计出如下数据: 1.每种商品的销售总金额,并降序排序 2.每种商品销售额最多的三周 第二题:MapReduce 题 现有 ...

  6. Hadoop学习之路(二十一)MapReduce实现Reduce Join(多个文件联合查询)

    MapReduce Join 对两份数据data1和data2进行关键词连接是一个很通用的问题,如果数据量比较小,可以在内存中完成连接. 如果数据量比较大,在内存进行连接操会发生OOM.mapredu ...

  7. Hadoop学习之路(二十)MapReduce求TopN

    前言 在Hadoop中,排序是MapReduce的灵魂,MapTask和ReduceTask均会对数据按Key排序,这个操作是MR框架的默认行为,不管你的业务逻辑上是否需要这一操作. 技术点 MapR ...

  8. 学习 IOC 设计模式前必读:依赖注入的三种实现

    一直以来就是越难的东西越值钱! 嘿嘿,这篇博文章转载自:http://www.cnblogs.com/liuhaorain/p/3747470.html 摘要 面向对象设计(OOD)有助于我们开发出高 ...

  9. 用css伪类制作三角形的三种方法

    在手机上写三角形的时候,我一般都用伪类,刚开始的时候用的图片,但是在现在的手机高清屏幕上,图片容易失真,还是用伪类吧! 第一种:一个90度的“ > ”, 只有线条.(可以做下拉框的箭头之类的) ...

随机推荐

  1. SQL Server 复制:事务发布

    一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到 ...

  2. java 中的Scanner

    java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java API文档中列举了大量的API方法,但是都不怎 ...

  3. 使用 Composer 为 ThinkPHP(3&period;2&period;3)框架添加和管理组件

    环境:Windows 64位 PHP 版本: 框架:ThinkPHP Tips: 组件:打包的代码,可以是一系列相关的类(class).接口(interface).特性(trait),用于解决某个具体 ...

  4. H53D旋转-遁地龙卷风

    (-1)写在前面 首先图片是我从互联网上下载的,向这位前辈致敬.我用的是chrome49,没有加不同浏览器的前缀,jquery3.0,图片资源放在了我的百度云盘上http://pan.baidu.co ...

  5. ion-slide-box,无限循环

    ion-slide-box网络加载图片,及时更新,无限循环 does-continue:是否循环切换,开头的幻灯页只能向左滑动,最后的幻灯页只能向右滑动. 将does-continue属性值设为tru ...

  6. MyBatis学习总结&lowbar;17&lowbar;Mybatis分页插件PageHelper

    如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...

  7. Windows bat with adb

    /********************************************************************* * Windows bat with adb * 说明: ...

  8. python 正则表达式 贪婪模式的简介和匹配时的几种模式

    看到一篇文章,关于python正则的,http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 贪婪模式与非贪婪模式: 正则表达式通常用于 ...

  9. syscomments 可以用来查找所有关于库中用到的某个关键词的所有相关脚本

    syscomments SELECT * FROM syscomments

  10. maven&sol;eclipse搭建ssm&lpar;spring&plus;spring mvc&plus;mybatis&rpar;

    maven/eclipse搭建ssm(spring+spring mvc+mybatis) 前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实 ...