All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ml.shifu.guagua.hadoop.io.GuaguaWritableAdapter Maven / Gradle / Ivy

/*
 * Copyright [2013-2014] PayPal Software Foundation
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ml.shifu.guagua.hadoop.io;

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

import ml.shifu.guagua.GuaguaConstants;
import ml.shifu.guagua.io.Bytable;
import ml.shifu.guagua.io.HaltBytable;

import org.apache.hadoop.io.Writable;

/**
 * {@link GuaguaWritableAdapter} is used to adapt hadoop io to {@link Bytable} interface.
 * 
 * 

* The reason we use our own writable interface is that we'd like to not depend on hadoop io on guagua core service. * *

* By using this adapter we don't need to implement such as IntWritable, LongWritable, Text and other common writable * implementations. * *

* Notice: If you use GuaguaWritableAdapter as your result class, you should provide the inner writable class name to * {@link GuaguaConstants#GUAGUA_MASTER_RESULT_CLASS} or {@link GuaguaConstants#GUAGUA_WORKER_RESULT_CLASS} setting. * That means to set '-mr' or 'wr' to hadoop writable class name. * * Here is a sample: * * {@code * hadoop jar ../lib/guagua-mapreduce-0.0.1-SNAPSHOT.jar \ * ml.shifu.guagua.mapreduce.GuaguaMapReduceClient \ * -libjars ../lib/guagua-mapreduce-examples-0.0.1-SNAPSHOT.jar,../lib/guava-r09-jarjar.jar,../lib/encog-core-3.1.0.jar,../lib/guagua-mapreduce-0.0.1-SNAPSHOT.jar,../lib/guagua-core-0.0.1-SNAPSHOT.jar,../lib/zookeeper-3.4.5.jar \ * -i <input> \ * -z <zkhost:zkport> \ * -w ml.shifu.guagua.example.sum.SumWorker \ * -m ml.shifu.guagua.example.sum.SumMaster \ * -c 10 \ * -n "Guagua Sum Master-Workers Job" \ * -mr org.apache.hadoop.io.LongWritable \ * -wr org.apache.hadoop.io.LongWritable \ * $queue_opts} * *

* If you set your own main class, not use {@link GuaguaYarnClient}, you can set the result class like this. * *

 * {@code  
 *         conf.set(GuaguaConstants.GUAGUA_MASTER_RESULT_CLASS, LongWritable.class.getName());
 *         conf.set(GuaguaConstants.GUAGUA_WORKER_RESULT_CLASS, LongWritable.class.getName());
 * }
 * 
* * @see GuaguaWritableSerializer */ public class GuaguaWritableAdapter extends HaltBytable { /** * Hadoop Writable instance. */ private W writable; /** * Contructor with Hadoop Writable setting. * * @param writable * Hadoop Writable instance */ public GuaguaWritableAdapter(W writable) { this.setWritable(writable); } @Override public void doWrite(DataOutput out) throws IOException { getWritable().write(out); } @Override public void doReadFields(DataInput in) throws IOException { getWritable().readFields(in); } public W getWritable() { return writable; } public void setWritable(W writable) { this.writable = writable; } @Override public String toString() { return String.format("GuaguaWritableAdapter [writable=%s, isHalt=%s]", this.getWritable(), super.isHalt()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy