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("\n");
}
pw.flush();
pw.close();
} }
Hbase数据导入导出的更多相关文章
- HBase数据导入导出工具
hbase中自带一些数据导入.导出工具 1. ImportTsv直接导入 1.1 hbase中建表 create 'testtable4','cf1','cf2' 1.2 准备数据文件data.txt ...
- Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具
Sqoop是一款开源的工具,主要用于在Hadoop相关存储(HDFS.Hive.HBase)与传统关系数据库(MySql.Oracle等)间进行数据传递工作.Sqoop最早是作为Hadoop的一个第三 ...
- 通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出
目录 目录 1.什么是 Sqoop? 2.下载应用程序及配置环境变量 2.1.下载 Sqoop 1.4.7 2.2.设置环境变量 2.3.设置安装所需环境 3.安装 Sqoop 1.4.7 3.1.修 ...
- HData——ETL 数据导入/导出工具
HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC.Hive.HDFS.HBase.MongoDB.FTP.Http.CSV.Excel.Kafka等)之间数据 ...
- ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成
一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...
- 从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上
阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并 ...
- oracle数据导入/导出
Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据 ...
- Oracle数据导入导出
Oracle数据导入导出imp/exp 在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与ora ...
- SQL SERVER 和ACCESS的数据导入导出
//批量导入Access string filepath = Server.MapPath("student.mdb"); stri ...
随机推荐
- mac中使用brew安装软件,下载太慢怎么办?
mac中使用brew安装软件,下载太慢怎么办? 本文所说的软件是指较大的软件,如果软件较小,例如软件只有几M,那么使用此方法后,提升会非常小. 了解brew原理: 1: 从网络下载安装包 2: 执行一 ...
- 使用RelativeLayout控制WebView以及Bottom按钮的位置
使用RelativeLayout控制WebView以及Bottom按钮的位置 (地址) 在Design View中加入控件RelativeLayout, WebView, LinearLayout(H ...
- ZendStudio13 PHP调试环境快速配置
1.百度ZendStudio13,汉化,破解,注册: 2.安装国产Apache+MySql一键安装环境phpStudy,方便快速 http://www.phpstudy.net/a.php/208. ...
- python中try except执行顺序
python中try except finally的执行顺序 先执行try中语句 如果try中抛出异常, 执行异常中语句. 如果try 或 except 中没有return语句,执行完try 或者 e ...
- HDU 4857 逃生 (反向拓扑排序 & 容器实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- 浅谈JavaScript eval() 函数
用js的人都应该知道eval()函数吧,虽然该函数用的极少,但它却功能强大,那么问题来了,为什么不常用呢?原因很简单,因为eval()函数是动态的执行其中的字符串,里面有可能是脚本,那么这样的话就有可 ...
- c#网络编程
c#网络编程 1.system.net命名空间 DNS类:DNS类包含了许多的方法,总结起来常用的就是获取获取主机地址,获取主机名,根据地址 获取DNS主机信息,根据主机名获取DNS信息: IPadd ...
- 帝国时代II 高清版 steam 4.4 字体替换 微软雅黑
其实默认的中文字体算是中规中矩吧,但是我并不喜欢 从昨天开始就想着换 于是我就开始搜索帝国时代2的游戏目录的资源,马上就锁定到了\Steam\steamapps\common\Age2HD\resou ...
- final评价Ⅱ
1.飞天小女警: 礼物挑选这个项目相比之前的发布功能更完善了些,但是整体界面还是不太美观,用户界面上呈现出的选项字不够清晰,使用起来不是很方便,但是增加了猜你喜欢的功能,可以根据用户的浏览记录猜测用户 ...
- js 测试
今天js测试题目: 被基础题目虐暴......惨不忍睹 1. var num = 2; switch(num){ case 1: console.log("1"); case 2: ...