hadoop之MapReduce调用R的一次失败的总结~(续三)

本文总结了作者在Hadoop环境中使用MapReduce调用R时遇到的错误,包括HBASE数据导入错误和MapReduce程序的运行问题。尽管在小数据量时程序运行无误,但在大数据量时出现了'断开的管道'错误。通过修改MapReduce实现,针对rowkey检索,减少了错误出现。此外,升级HBase到1.1.1后,虽然超时异常消失,但出现了新的异常,需要重启thrift来解决。
摘要由CSDN通过智能技术生成

路还在前进。

虽然后台错误如故,其实还是有些惊喜的。

我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("\\|");
		        //先准备存入的文件名称 例如:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值