Package edu.american.student.redis.hadoop

Source Code of edu.american.student.redis.hadoop.RedisBigTableRecordReader

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

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;

import edu.american.student.redis.MessageFactory;
import edu.american.student.redis.foreman.RedisForeman;
import edu.american.student.redis.foreman.RedisForemanException;

public class RedisBigTableRecordReader extends RecordReader<RedisBigTableKey, Text>
{
  private Iterator<Entry<RedisBigTableKey, byte[]>> keyValueMapIter = null;
  private Entry<RedisBigTableKey, byte[]> currentEntry = null;
  private RedisBigTableKey key = null;
  private Text value = new Text();
  private float totalKVs = 0;
  private float processedKVs = 0;

  @Override
  public void close() throws IOException
  {

  }

  @Override
  public RedisBigTableKey getCurrentKey() throws IOException, InterruptedException
  {
    return key;
  }

  @Override
  public Text getCurrentValue() throws IOException, InterruptedException
  {
    return value;
  }

  @Override
  public float getProgress() throws IOException, InterruptedException
  {
    return processedKVs / totalKVs;
  }

  @Override
  public void initialize(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException
  {
    String[] locations = split.getLocations();
    RedisBigTableKey key = RedisBigTableKey.inflate(locations[0].getBytes());
    byte[] row = key.getRow();
    byte[] cf = key.getColumnFamily();
    byte[] cq = key.getColumnQualifier();
    RedisForeman foreman = new RedisForeman();
    foreman.connect();
    Map<RedisBigTableKey, byte[]> keyValues;
    try
    {
      keyValues = foreman.getByQualifier(locations[1].getBytes(), row, cf, cq);
      totalKVs = keyValues.size();
      keyValueMapIter = keyValues.entrySet().iterator();
    }
    catch (RedisForemanException e)
    {
      throw new IOException(MessageFactory.objective("Read Split").toString(), e);
    }
  }

  @Override
  public boolean nextKeyValue() throws IOException, InterruptedException
  {
    if (keyValueMapIter.hasNext())
    {
      currentEntry = keyValueMapIter.next();
      key = currentEntry.getKey();
      value.set(currentEntry.getValue());
      processedKVs++;
      return true;
    }
    return false;
  }

}
TOP

Related Classes of edu.american.student.redis.hadoop.RedisBigTableRecordReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.