`
臻是二哥
  • 浏览: 183421 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Java技术分享
浏览量:0
社区版块
存档分类
最新评论

hadoop之用户定制

 
阅读更多
Hadoop提供了9中内置数据类型,分别为:
BooleanWritable
ByteWritable
IntWritable
LongWritable
FloatWritable
DoubleWritable
Text(使用UTF8格式存储的文本)
NullWritable(空值的时候使用)

当然,用户也可以自定义数据类型,自定义数据类型时,要实现Writable接口;如果自定义的数据作为key使用,还需要实现Comparable接口,在hadoop中,实现WritableComparable接口即可,WritableComparable继承自Writable和Comparable接口。
代码大概内容如下:
[color=orange]public class Point3D implements WritableComparable<Point3D>{
private float x,y,z;
public float getX(){return x;}
public float getY(){return y;}
public float getZ(){return z;}
public void readFields(DataInput in) throws IOException{
x=in.readFloat();
y=in.readFloat();
z=in.readFloat();

}
public void write(DataOutput out) throws IOException{
out.writeFloat(x);
out.writeFloat(y);
out.writeFloat(z);
}
public int compareTo(Point3D p){

return 1,0,-1;
}

}
学过java的人不难理解以上的代码。
[/color]
当然,hadoop还允许定制其他的内容,比如定制输入输出的格式,hadoop提供了丰富的内置数据输入格式,最常用的输入格式是TextInputFormat和KeyValueTextInputFormat
TextInputFormat是系统默认的输入格式,它能够将输入的内容以<K,V>的形式输出,读入一行时,输出的K为该行在文本中的偏移量,输出的V为该行的内容。
KeyValueInputFormat是一个常用的输入格式,可以将一个按照<K,V>格式存放的文本文件逐行读出,并解析为<K,V>
每个InputFormat都有两个任务,将输入文件转化为split集合以及将split转化为键值对。
查看InputFormat的API,他有两个函数getSplits(JobContext context)和createRecordReader(InputSplit split, TaskAttemptContext context)
因此自定制输入格式自然得自定义RecordReader。
查看RecordReader的API,主要有initialize(InputSplit split, TaskAttemptContext context),getCurrentKey(),getCurrentValue()等待我们去实现。
下面以一个不考虑词频的倒排索引为例,进行说明。为了能更细粒度的记录单词在文档中出现时的行位置信息,这里假定文档文件的标示就是文件名,单词在文档中的行位置信息就是该行在文档中的偏移量,则代码如下:
import org.apache.hadoop.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.mapreduce.lib.*;
import org.apache.hadoop.mapreduce.lib.input.*;
import org.apache.hadoop.mapreduce.lib.output.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.util.*;
import java.util.*;
import java.io.*;
import java.net.*;
public class InvertedIndex {
public static class MyInputFormat extends FileInputFormat<Text,Text>{
MyRecordReader mrr=new MyRecordReader();
public RecordReader<Text,Text> createRecordReader(InputSplit split,TaskAttemptContext context){
try{
mrr.initialize(split, context);
}
catch(Exception e){
e.printStackTrace();
}
return mrr;
}
}
public static class MyRecordReader extends RecordReader<Text,Text>{
String fileName;
LineRecordReader lrr=new LineRecordReader();
public Text getCurrentKey(){
return new Text(fileName+"@"+lrr.getCurrentKey());
}
public Text getCurrentValue(){
return lrr.getCurrentValue();
}
public void initialize(InputSplit split, TaskAttemptContext context) throws IOException,InterruptedException{
lrr.initialize(split, context);
fileName=((FileSplit)split).getPath().toString();
}
public float getProgress(){
return lrr.getProgress();
}
public void close()   throws IOException{
lrr.close();
}
public boolean nextKeyValue() throws IOException {
return lrr.nextKeyValue();
}
}

public static void main(String [] args) throws Exception
{
Configuration conf = new Configuration();
String[] otherArgs=new GenericOptionsParser(conf,args).getRemainingArgs();
if(otherArgs.length!=2){
System.err.println("error");
System.exit(1);
}
Job job=new Job(conf,"InvertedIndex");
    job.setJarByClass(InvertedIndex.class);

job.setInputFormatClass(MyInputFormat.class);

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);

FileInputFormat.addInputPath(job,new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job,new Path(otherArgs[1]));
   
System.exit(job.waitForCompletion(true)?0:1);
     
}
}


上面的例子仅仅是为了如何演示自定义输入格式,实际上倒排索引程序完全没必要这样做。另外,这个例子是基于FileInputFormat和LineRecordReader实现的,当然我们也可以自己去继承RecordReader和InputFormat类,具体参见API即可。
以上就是hadoop中自定义内容的一些用法,可以自定义数据类型,自定义输入格式,当然也可以自定义输出格式,在此不再赘述。

0
0
分享到:
评论
1 楼 hae 2014-11-04  
引用
以上就是hadoop中自定义内容的一些用法,可以自定义数据类型,自定义输入格式,当然野结衣自定义输出格式,在此不再赘述。

野结衣都出来了  看来博主也是个宅男啊 

相关推荐

    Hadoop实战中文版

    2.2.2 验证SSH安装 2.2.3 生成SSH密钥对 2.2.4 将公钥分布并登录验证 2.3 运行Hadoop 2.3.1 本地(单机)模式 2.3.2 伪分布模式 2.3.3 全分布模式 2.4 基于Web 的集群用户界面 2.5 小结 第3章 Hadoop组件...

    Hadoop权威指南 第二版(中文版)

     创建Hadoop用户  安装Hadoop  测试安装  SSH配置  Hadoop配置  配置管理  环境设置  Hadoop守护进程的关键属性  Hadoop守护进程的地址和端口  Hadoop的其他属性  创建用户帐号  安全性  Kerberos和...

    Hadoop权威指南(中文版)2015上传.rar

    创建Hadoop用户 安装Hadoop 测试安装 SSH配置 Hadoop配置 配置管理 环境设置 Hadoop守护进程的关键属性 Hadoop守护进程的地址和端口 Hadoop的其他属性 创建用户帐号 安全性 Kerberos和Hadoop 委托令牌 其他安全性...

    Hadoop实战中文版.PDF

    212.2.2 验证SSH安装 212.2.3 生成SSH密钥对 212.2.4 将公钥分布并登录验证 222.3 运行Hadoop 222.3.1 本地(单机)模式 232.3.2 伪分布模式 242.3.3 全分布模式 252.4 基于Web的集群用户界面 282.5 ...

    Hadoop实战

    212.2.3 生成SSH密钥对 212.2.4 将公钥分布并登录验证 222.3 运行Hadoop 222.3.1 本地(单机)模式 232.3.2 伪分布模式 242.3.3 全分布模式 252.4 基于Web的集群用户界面 282.5 小结 30第3章 Hadoop组件 313.1 HDFS...

    Hadoop实战(陆嘉恒)译

    细则手册7.1 向任务传递作业定制的参数7.2 探查任务特定信息7.3 划分为多个输出文件7.4 以数据库作为输入输出7.5 保持输出的顺序7.6 小结第8 章 管理Hadoop8.1 为实际应用设置特定参数值8.2 系统体检8.3 权限设置8.4...

    基于 Hadoop 数据仓库的搭建

    基于 Hadoop 数据仓库的搭建 为什么需要数据仓库?  传统的数据库中,存放的数据较多是一些定制性数据,表是二维的,一张表可以有很多字段,字段一字排开,对应的数据就一行一行写入表中,特点就是利用二维表表现...

    Experienced-driver-movies:基于hadoop电影推荐系统

    定制推荐(协同过滤) 电影表 电影名称/别名 导演 时间 票房 综合评分 电影id 评分表 用户id 电影id 分值 评分时间 备注 用户表 用户id 用户名 用户出生年月日 用户性别 密码 邮箱 热门榜单 最新电影榜单 历史总榜单...

    基于 hadoop 实现的电影推荐系统+源代码+文档说明+sql

    ### 基于 hadoop 实现的电影推荐系统+源代码+文档说明+sql 1. 用户评分 2. 分类推荐 3. 豆瓣推荐 4. 定制推荐(协同过滤) -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,...

    koonkie:用于宏基因组处理的 Hadoop 框架

    处理此类数据集通常需要定制设计的软件和高性能计算资源,而这些资源又需要定期监控和维护。 传统网格系统的固有设计限制了用户控制和按需可访问性和可用性。 高速互联网带宽的最新进展以及价格合理且可扩展的...

    现代物流大数据分析大作业《网站用户行为分析》

    用户行为分析的目的是推动产品迭代、实现精准营销,提供定制服务,驱动产品决策等。该案例实验的目的是熟悉Linux系统以及Hadoop等系统和软件的安装和使用,了解大数据处理的基本流程,熟悉数据预处理方法和熟悉在...

    Impala:针对Hadoop实时查询; Apache Impala的镜像

    使用即时生成代码,以生成针对每个查询专门定制的CPU效率高的代码。 支持最常用的Hadoop文件格式,包括项目。 Apache许可的100%开源。 有关Impala的更多信息 要了解有关以商业用户身份使用Impala的更多信息,或...

    大数据定义.doc

    最知名的Hadoop的用户之一是Facebook。它的MySQL数据库存储核心数据。然后再反映到 Hadoop系统进行计算。计算结果会再次转移到MySQL,以提供给用户的页面使用。 ----------------------- 大数据定义全文共2页,当前...

    大数据下的用户行为分析.pdf

    (3)⽋缺各种企业特性: · 企业的个性化需求、定制化开发和可靠的运营维护服务; 企业版Hadoop改进主要⽅向: (1)消除单点故障制约; (2)改进MapReduce; (3)完善数据管理和数据源整合; (4)镜像、快照等...

    HDFS多租户实现

    HDFS多租户的相关介绍说明 多租户应用 多个租户共享硬件资源,硬件资源...每个租户认为自己独占资源,因为实例提供高度的定制以满足租户所需。 租户 是指求租SaaS解决方案的企业实体。一个租户一般会有多个用户。

    基于大数据的电信领域用户服务模型与数据融合策略研究

    摘要:移动互联网技术的迅猛发展,为移动电子商务...在Hadoop架构的基础上搭建了电信领域大数据处理框架,并在电信业务数据融合与服务挖掘应用方面做了分析,为新移动消费、消费定制和个性化推荐与营销等提供了支持。

    Apache Hue 2小时轻松搞定大数据可视化终端视频教程

    2.Hadoop配置代理用户 3.Hue集成HDFS实战案例 4.Hue集成YARN实战案例 5.Hue集成JobHistoryServer实战案例 6.Hue配置集成HiveServer2 7.Hue集成Hive实战案例 第四章:Hue与RDBMS、Oozie、Impala集成 1.Hue...

    大数据基础-数据可视化技术.pdf

    在Hadoop生态群中,核心部 件(如HDFS、Yarn和HBase等)都提供可视化的集群管理功能,便于用户直观、 快速地了解集群的运行状态;第6章Kylin、Superset及第8章的Zeppelin等OLAP 工具的重要任务是为用户提供在线可视...

Global site tag (gtag.js) - Google Analytics