前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hbase数据导入导出

Hbase数据导入导出

作者头像
用户3003813
发布2018-09-06 14:36:24
3.4K0
发布2018-09-06 14:36:24
举报
文章被收录于专栏:个人分享个人分享

平时用于从生产环境hbase到导出数据到测试环境。

导入数据:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;


@SuppressWarnings("deprecation")
public class HbaseImport {
    
    public static void main(String args[]) throws Exception{
        Configuration conf = HBaseConfiguration.create();
        HConnection connection = HConnectionManager.createConnection(conf);
        List<Map<String,String>> datas = getDatas("d:\\hbaseData\\datas.txt",connection);
        wirteHbase(connection,"EVENT_LOG_LBS",datas);
    }
    
    public static List<Map<String,String>> getDatas(String filePath,HConnection connection) throws IOException{
        List<Map<String,String>> datas = new ArrayList<Map<String,String>>();
        File file = new File(filePath);
        BufferedReader br = new BufferedReader(new FileReader(file));
        String tr = null;
        while(((tr = br.readLine()) != null)){
            String subData = tr.substring(1);
            Map<String,String> data = new HashMap<String,String>();
            String[] ss = subData.split("\\|");
            for(String s : ss){
                String[] tds = s.split("=");
                String v = "";
                if(tds.length == 2){
                    v = tds[1];
                }
                data.put(tds[0], v);
            }
            datas.add(data);
        }
        br.close();
        return datas;
    }
    
    public static void wirteHbase(HConnection connection,String tableName,List<Map<String,String>>datas) throws IOException{
        HTableInterface t = connection.getTable(tableName);
        for(Map<String,String> map : datas){
            Set<String> ks = map.keySet();
            Put put = new Put(Bytes.toBytes(map.get("rowkey")));
            for(String key : ks){
                put.add(Bytes.toBytes("f1"),Bytes.toBytes(key),Bytes.toBytes(map.get(key)));
            }
            t.put(put);
        }
    }
}

导出数据:

代码语言:javascript
复制
package hbase;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HTableInterface;
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;


@SuppressWarnings("deprecation")
public class HbaseExport {
	
	public static Date getPassSevenDays(int day){
		Calendar calendar = Calendar.getInstance();
		int year = calendar.get(Calendar.YEAR);
		int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
		int j = 0;
		for(int i = 0;i < day; i++){
			calendar.set(Calendar.DAY_OF_YEAR, dayOfYear - j);
			if(calendar.get(Calendar.YEAR) < year){
				//跨年了
				j = 1;
				//更新 标记年
				year = year + 1;
				//重置日历
				calendar.set(year, Calendar.DECEMBER,31);
				//重新获取dayOfYear
				dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
			}else{
				j = j + 1;
			}
		}
		return calendar.getTime();
	}
	
	public static Scan setScanCondition(Scan scan) throws IOException{
		Date newDay = new Date();
		Date otherDays = getPassSevenDays(7);
		
		scan.setTimeRange(otherDays.getTime(),newDay.getTime());
		scan.addColumn("f1".getBytes(), "LS_certifier_no".getBytes());
		scan.addColumn("f1".getBytes(), "LS_location".getBytes());
		scan.addColumn("f1".getBytes(), "LS_phone_no".getBytes());
		scan.addColumn("f1".getBytes(), "LS_longitude".getBytes());
		scan.addColumn("f1".getBytes(), "LS_latitude".getBytes());
		scan.addColumn("f1".getBytes(), "date".getBytes());
		scan.addColumn("f1".getBytes(), "time".getBytes());
		scan.addColumn("f1".getBytes(), "hourOfDay".getBytes());

		return scan;
	}
	
	
	public static void main(String args[]) throws IOException{
		Configuration conf = HBaseConfiguration.create();
		HConnection connection = HConnectionManager.createConnection(conf);
		String tableName = "EVENT_LOG_LBS_HIS";
		HTableInterface table = connection.getTable(tableName);
		
		Scan scan = new Scan();
		setScanCondition(scan);
		
		ResultScanner rs = table.getScanner(scan);
		for(Result r : rs){
			List<String> lines = new ArrayList<String>();
			StringBuilder sb = new StringBuilder();
			sb.append(" rowkey=" + Bytes.toString(r.getRow()));
			for(Cell cell : r.rawCells()){
				String name = Bytes.toString(CellUtil.cloneQualifier(cell));
				String value = Bytes.toString(CellUtil.cloneValue(cell));
				System.out.println(name + "=" + value);
				sb.append("|" + name + "=" + value);
			}
			lines.add(sb.toString());
			System.out.println("--------------------------");
			writeFile(lines,"/home/hdfs/datas");
		}
		
	}
	
	public static void writeFile(List<String> lines,String filePath) throws FileNotFoundException{
		File file = new File(filePath);
		PrintWriter pw = new PrintWriter(new FileOutputStream(file,true));
		for(String line : lines){
			pw.append(line);
			pw.append("\n");
		}
		pw.flush();
		pw.close();
	}
	
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档