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

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

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

一个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配置信息

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

我们导出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]);

}

}

}

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

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

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

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

时间: 2024-08-05 08:22:53

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

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

hadoop分割与读取输入文件的方式被定义在InputFormat接口的一个实现中,TextInputFormat是默认的实现,当你想要一次获取一行内容作为输入数据时又没有确定的键,从TextInputFormat返回的键为每行的字节偏移量,但目前没看到用过 以前在mapper中曾使用LongWritable(键)和Text(值),在TextInputFormat中,因为键是字节偏移量,可以是LongWritable类型,而当使用KeyValueTextInputFormat时,第一个分隔符前后

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

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBund

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

流量统计项目案例 样本示例 需求 1. 统计每一个用户(手机号)所耗费的总上行流量.总下行流量,总流量 2. 得出上题结果的基础之上再加一个需求:将统计结果按照总流量倒序排序 3. 将流量汇总统计结果按照手机归属地不同省份输出到不同文件中 第一题 import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.h

有关不同实现类的List的三种遍历方式的探讨

我们知道,List的类型有ArrayList和LinkedList两种,而曾经的Vector已经被废弃. 而作为最常用的操作之一,List的顺序遍历也有三种方式:借助角标的传统遍历.使用内置迭代器和显式迭代器. 下面,将首先给出两种种不同类型实现的实验结果,之后,将会通过分析JAVA中List的各种实现,来探讨造成实验结果的原因. 1.随机数据的生成 package temp; import java.io.*; import java.util.Random; public class Dat

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

在手机上写三角形的时候,我一般都用伪类,刚开始的时候用的图片,但是在现在的手机高清屏幕上,图片容易失真,还是用伪类吧! 第一种:一个90度的“ > ”, 只有线条.(可以做下拉框的箭头之类的) 例如:  .next:after{ content: ""; width: 6px; height: 6px; border-left: 1px solid #666; border-bottom: 1px solid #666; transform: rotate(225deg); -w

Hadoop学习之路(十四)MapReduce的核心运行机制

概述 一个完整的 MapReduce 程序在分布式运行时有两类实例进程: 1.MRAppMaster:负责整个程序的过程调度及状态协调 2.Yarnchild:负责 map 阶段的整个数据处理流程 3.Yarnchild:负责 reduce 阶段的整个数据处理流程 以上两个阶段 MapTask 和 ReduceTask 的进程都是 YarnChild,并不是说这 MapTask 和 ReduceTask 就跑在同一个 YarnChild 进行里 MapReduce 套路图 MapReduce 程

Hadoop学习之路(十五)MapReduce的多Job串联和全局计数器

MapReduce 多 Job 串联 需求 一个稍复杂点的处理逻辑往往需要多个 MapReduce 程序串联处理,多 job 的串联可以借助 MapReduce 框架的 JobControl 实现 实例 以下有两个 MapReduce 任务,分别是 Flow 的 SumMR 和 SortMR,其中有依赖关系:SumMR 的输出是 SortMR 的输入,所以 SortMR 的启动得在 SumMR 完成之后 Configuration conf1 = new Configuration(); Con

Hadoop学习笔记:使用Mrjob框架编写MapReduce

1.mrjob介绍 一个通过mapreduce编程接口(streamming)扩展出来的Python编程框架. 2.安装方法 pip install mrjob,略.初学,叙述的可能不是很细致,可以加我扣扣:2690382987,一起学习和交流~ 3.代码运行方式 下面简介mrjob提供的3种代码运行方式: 1)本地测试,就是直接在本地运行代码: 2)在本地模拟hadoop运行: 3)在hadoop集群上运行. 本地测试: 在脚本.数据所在的路径下(如果不在此路径下,就要把路径写完整): pyt

Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例(三)统计分析:当前页面 一.借助Hive进行统计 1.1 准备工作:建立分区表 为了能够借助Hive进行统计分析,首先我们需要将清洗后的数据存入Hive中,那么我们需要先建立一张表.这里我们选择分区表,以日期作