路还在前进。
虽然后台错误如故,其实还是有些惊喜的。
我HBASE导入数据的时候弄错了一个参数,导致实际导入量为原来的1/1500。
我想说的是,我最初升级HBASE版本的时候是以为成功了。
因为我在表数据量很小的时候,执行程序(Scan 全表)后台是没有“断开的管道”之类错误的。
而恢复之前数据量的表的时候,执行程序(Scan 全表)后错误又回来了。
难道这个错误和表的数据量有关?
考虑到我实际的业务是根据rowkey检索到自己需要的数据。所以,进一步改写了MapReduce如下,
package mytest;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.NullOutputFormat;
public class MapRLanguage3 {
public static int mapNum = 12;
public static final String RDIR_H="hdfs://bd110:9000/user/hadoop/";
public static final String RDIR_L="/home/hadoop/yibei/R/";
public static class RMapper extends Mapper<Object, Text, NullWritable, NullWritable>{
HTable table = null;
public void setup(Context context
) throws IOException, InterruptedException {
Configuration hbaseConf = HBaseConfiguration.create();
table = new HTable(hbaseConf, "kpinfo");
}
public void cleanup(Context context
) throws IOException, InterruptedException {
table.close();
}
//每个文件只有一行
public void map(Object key, Text value, Context context ) throws IOException, InterruptedException {
String args[] = value.toString().split("\\|");
//先准备存入的文件名称 例如: