利用hadoop命令rcc生成Record 一种简单的方式实现自定义的writable对象

hadoop 的bin目录下面一个rcc命令,网上介绍很少。看了一下源码。发现可以用来生成 java和c++的hadoop Record 类代码,比起自己直接实现writable 接口,简单很多而且不容易出错,不妨试一下。具体方法如下:


>rcc

Usage: rcc --language [java|c++] ddl-files

1 新建 ddl文件


>vim stud.ddl 

module  com.xschao.bean {

   class Stud{

        ustring name;

        long id;

        int age;

        ustring time;



        }

}

 

其他的类型补充,具体是啥自行脑补:


 "\"byte\"",

    "\"boolean\"",

    "\"int\"",

    "\"long\"",

    "\"float\"",

    "\"double\"",

    "\"ustring\"",

    "\"buffer\"",

    "\"vector\"",

    "\"map\"",



2 执行编译命令


> rcc --language java stud.ddl

查看生成的文件:


>tree 

.

|-- com

|   `-- xschao

|       `-- bean

|           `-- Stud.java

|-- command_example.sh

`-- stud.ddl



3 directories, 3 files

Stud.java即为生成的java代码


// File generated by hadoop record compiler. Do not edit.

package com.xschao.bean;



public class Stud extends org.apache.hadoop.record.Record {

  private static final org.apache.hadoop.record.meta.RecordTypeInfo _rio_recTypeInfo;

  private static org.apache.hadoop.record.meta.RecordTypeInfo _rio_rtiFilter;

  private static int[] _rio_rtiFilterFields;

  static {

    _rio_recTypeInfo = new org.apache.hadoop.record.meta.RecordTypeInfo("Stud");

    _rio_recTypeInfo.addField("name", org.apache.hadoop.record.meta.TypeID.StringTypeID);

    _rio_recTypeInfo.addField("id", org.apache.hadoop.record.meta.TypeID.LongTypeID);

    _rio_recTypeInfo.addField("age", org.apache.hadoop.record.meta.TypeID.IntTypeID);

    _rio_recTypeInfo.addField("time", org.apache.hadoop.record.meta.TypeID.StringTypeID);

  }

  

  private String name;

  private long id;

  private int age;

  private String time;

  public Stud() { }

  public Stud(

    final String name,

    final long id,

    final int age,

    final String time) {

    this.name = name;

    this.id = id;

    this.age = age;

    this.time = time;

  }

。。。。。。。。。。。。。。。。。。。。。

ok

格格巫--蓝精灵-

时间: 2024-10-27 11:36:11

利用hadoop命令rcc生成Record 一种简单的方式实现自定义的writable对象的相关文章

Druid数据库连接池两种简单使用方式

阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给DataSource对象. 下面给出2种配置方法实例: 1. 纯Java代码创建 DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver&qu

java倒计时三种简单实现方式

写完js倒计时,突然想用java实现倒计时,写了三种实现方式 一:设置时长的倒计时: 二:设置时间戳的倒计时: 三:使用java.util.Timer类实现的时间戳倒计时 代码如下: 1 package timer; 2 3 import java.util.Calendar; 4 import java.util.Date; 5 import java.util.Timer; 6 import java.util.TimerTask; 7 8 /** 9 * java演示倒计时 10 * 11

Qt实现软件自动更新的一种简单方法

前言 最近在学习Qt开发上位机,想实现一个检查更新的功能,网上搜索了一大圈,发现实现过程都很复杂,关键是代码看不懂,所以就自己开发一种简单的方式来实现.实现效果如下: 点击"检查更新"按钮,如果当前版本低于远程的版本,那么会弹出如下窗口,提示更新,并显示远程的的版本号,更新时间,更新说明,如下图所示: 如果点击"去下载",那么会调用系统默认浏览器,直接创建下载任务.点击"不更新",则取消更新. 如果当前版本号和远程一致,那么会提示"已经

利用"SQL"语句自动生成序号的两种方式

1.首先,我们来介绍第一种方式: ◆查询的SQL语句如下: select row_number() over (order by name) as rowid, sysobjects.[name] from sysobjects ◆运行的结果: rowid   name 1           all_columns 2           all_objects 3           all_parameters 4           all_sql_modules 5          

windows下利用批处理命令生成maven项目(java、javaWeb)

觉得用IDE生成maven项目会卡住,很慢.就用cmd写了个cmd批处理命令来生成maven项目.效果如下 生成项目导入idea后结构如下 批处理命令代码如下 @echo off ::echo 请选择项目类型: echo 1.maven-archetype-quickstart echo 2.maven-archetype-webapp set /p webType=请选择项目类型: ::echo 选择了%webType% set /p DgroupId= DgroupId= set /p Da

docker学习笔记5:利用commit命令创建镜像 和 删除本地镜像

一.概述 创建镜像有两种方法,一是用commit命令,二是用dockerfile方法(这个更常用,在下面文章介绍).本章介绍commit方法. 在介绍commit命令前,我们先回顾下对代码的版本控制,当修改代码后,我们会commit变更到版本服务器上. 对于容器类似的概念,当创建容器后,如果后面对容器做了修改,就可以利用commit命令将修改提交为一个新的镜像. 二.例子说明 下面我们通过具体的例子来说明: 1.创建新容器 docker run --name newcontent -i -t u

利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析

首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!) 1 首先建立一个空白XML文件,直接点击下图所示即可: 2 可以使用xml文本编辑界面,或者使用xml树状图编辑界面 切换到xml树状图编辑界面的方法为: 即可调出当前xml文件所对应的xml树状图编辑界面 3 设计并编辑xml文件 根据自己的需要可以利用xml树状图操作界面来方便的设计自己的xml

《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5  从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数据保存前执行一些操作. 解决方案 假设你有如图7-7所示的模型. 图7-7. 包含实体Technician和ServiceCall的模型 在这个模型中,每个技术员(technician)都有一些业务服务请求(service call),业务服务请求包含联系人姓名,问题.使用代码清单7-4,创建一个扩展方法获取

Hadoop命令参数说明

namenode(hdfs)+jobtracker(mapreduce)可以放在一台机器上,datanode+tasktracker可以在一台机器上,辅助namenode要单独放一台机器,jobtracker通常情况下分区跟datanode一样(目录最好分布在不同的磁盘上,一个目录对应一个磁盘),namenode存储目录需要格式化,datanode存储目录不需要格式化,启动时自动创建 同一个datanode上的每个磁盘上的块不会重复,不同datanode之间的块才可能重复 一些文件的说明: 1.