来自 澳门金莎娱乐手机版 2019-12-23 06:55 的文章
当前位置: 金沙澳门官网网址 > 澳门金莎娱乐手机版 > 正文

澳门金莎娱乐手机版Hadoop中如何正确编写继承自

Hadoop中哪些科学编写世襲自Writable接口的子类

Hadoop中能够编制自身的类,用作hadoop job的key或许value类型,本身编辑的类要促成接口Writable。

自家编写了二个HttpContent类,主要用以保存爬取网页的源码,重回状态和编码格式音信,他在mapper中别实例化保存网页内容,然后传输到reducer中被应用,在编写中碰到了有的难题:

(1)首先是绝非编写制定暗许的构造函数类,因为java中的反馈机制亟待多少个参数为空的暗许布局函数,若无这么些类就不可能动用反馈机制实例化那些类。

(2)然后是项目在类别化的时候写入后读取值不科学,一定要合并类型中write(DataOutput out卡塔尔和readFields(DataInput in卡塔尔中写入和读取参数的点子,比方一个int类型假设你在write(卡塔尔(英语:State of Qatar)中运用writeInt写出,在readFields(卡塔尔(قطر‎中就应当利用readInt(卡塔尔(英语:State of Qatar)读入,不然读取的值是不得法的。多少个值写出读入的时候,写出读入的逐一要保持后生可畏致的,不然读取也是不许确的。

(3)Writable中用来写出的DataOutput类型未有针对性String类型的系列化方法,须要先将String类型调换到为Byte数组类型,然后在进展种类化。

Ubuntu 13.04上搭建Hadoop环境

Ubuntu 12.10 +Hadoop 1.2.1版本集群配置

Ubuntu上搭建Hadoop蒙受(单机方式+伪遍布形式)

Ubuntu下Hadoop情形的配备

单机版搭建Hadoop遭遇图文化教育程详整

搭建Hadoop情况(在Winodws意况下用编造机虚构多少个Ubuntu系统举行搭建)

下边是HttpContent的门类的源码,注重是write(DataOutput out卡塔尔和readFields(DataInput in卡塔尔国方法:

package bbs.http;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.apache.hadoop.io.Writable;

/**
 *
 */
public class HttpContent implements Writable{

 
 private byte[] content;
 
 private int status;
 
 private String encoding;

 public HttpContent(){
 }
 
 public HttpContent(byte[] content, int status, String encoding) {
  this.content = content;
  this.status = status;
  if (encoding == null)
   this.encoding = "GBK";
  else
   this.encoding = encoding;

 }

 public byte[] getByte() {
  return this.content;
 }

 public String getData() {
  String data =null;
  try {
   if(content==null){
    //System.out.println("content涓簄ull:"+getStatus());
   
    return null;
   }
   data = new String(content, encoding);
   
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
  return data;
 }

 public int getStatus() {
  return this.status;
 }

 public String getEncoding() {
  return encoding;
 }

 @Override
 public String toString() {
  return "Content: " + getData() + "n" + "status: " + status + "n"
    + "encoding: " + encoding + "n";
 }

 @Override
 public void readFields(DataInput in) throws IOException {
  int size=in.readInt();
//  System.out.println("HttpContent readFields: size="+size);
  if(size>0){
   content=new byte[size];
   in.readFully(this.content);
  }else{
   content=null;
  }
 
  this.status=in.readInt();
//  System.out.println("status="+status);
  int encodeSize=in.readInt();
  byte[] encodeBytes=new byte[encodeSize];
  in.readFully(encodeBytes);
  this.encoding=new String(encodeBytes,"GBK");
//  System.out.println("encoding="+this.encoding);
 
 }

 @Override
 public void write(DataOutput out) throws IOException {
  if(content==null){
   out.writeInt(0);
  }else{
//   System.out.println("HttpContent write(): content.length="+content.length);
   out.writeInt(content.length);
   out.write(content);
  }
//  System.out.println("Status="+status);
  out.writeInt(status);
//  System.out.println("encoding="+encoding);
  byte[] temp=encoding.getBytes("GBK");
  out.writeInt(temp.length);
  out.write(temp);
//  out.writeBytes(encoding);
 
 }
}

Hadoop中得以编写制定本身的类,用作hadoop job的key或然value类型,自身编辑的类要完结接口Writable。...

本文由金沙澳门官网网址发布于澳门金莎娱乐手机版,转载请注明出处:澳门金莎娱乐手机版Hadoop中如何正确编写继承自

关键词: