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

本文讲述了作者在使用Hadoop MapReduce过程中遇到的调用R失败的问题,尝试通过直接用JAVA API获取HBASE历史数据来避免R通过Thrift调用,但在升级HBASE版本和调整配置后,问题仍未解决。文章分享了作者的调试过程及遇到的错误,包括HBASE的版本兼容性、Master初始化问题和limit.conf的调整。
摘要由CSDN通过智能技术生成

路还得继续!

我重新构想了思路,直接用JAVA的API获取HBASE的历史数据,然后传递给R,这样可以避免了R通过thrift调用!

于是我重写了第二个版本的MapReduce,如下:

package mytest;

import java.io.File;
import java.io.IOException;
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.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 MapRLanguage2 {
	
	 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("\\|");
		        //先准备存入的文件名称 例如:[Map].cell.kpi
		        InputSplit inputSplit = context.getInputSplit();
		        String fileName =  ((FileSplit)inputSplit).getPath().getName();
		        //获取数据存入文件中 
		        String cellarr[] = args[2].split(",");
		        String kpiarr[] = args[3].split(",");
		        //获取开始时间
		        String datedir = context.getConfiguration().get("datedir");
		        for(int i=0;i<cellarr.length;i++){
		        	//创建文件
		        	for(int j=0;j<kpiarr.length;j++){
			        	File ldir = new File(RDIR_L+datedir+"/");
			        	ldir.mkdirs();
			        	File lfile = new File(RDIR_L+datedir+"/"+fileName+"."+cellarr[i]+"."+kpiarr[j]);
			        	lfile.createNewFile();
		        	}
		        }
		        //访问HBASE,获取历史历史数据
		        Scan scan = new Scan();
		        sc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值