• Hbase数据导入导出


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

    导入数据:

    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);
            }
        }
    }

    导出数据:

    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("
    ");
    		}
    		pw.flush();
    		pw.close();
    	}
    	
    }
    

      

  • 相关阅读:
    哈希表
    矩阵加速(数列)
    线段树
    python
    vue 中防抖
    Windows版本与Internet Explorer版本对照
    一个怂女婿的成长笔记【二十三】
    一个怂女婿的成长笔记【二十一】
    vue xml数据格式化展示,展示在textarea里可编辑,和高亮处理方法
    substring 截取 第三个字符(/)后的字符串
  • 原文地址:https://www.cnblogs.com/yangsy0915/p/6082665.html
Copyright © 2020-2023  润新知