HBase总结-Java API 与HBase交互实例
http://blog.csdn.net/lifuxiangcaohui/article/details/39997391
HBase提供了JavaApi的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要
-
importjava.io.IOException;
-
-
importorg.apache.hadoop.conf.Configuration;
-
importorg.apache.hadoop.hbase.HBaseConfiguration;
-
importorg.apache.hadoop.hbase.HColumnDescriptor;
-
importorg.apache.hadoop.hbase.HTableDescriptor;
-
importorg.apache.hadoop.hbase.KeyValue;
-
importorg.apache.hadoop.hbase.client.Delete;
-
importorg.apache.hadoop.hbase.client.Get;
-
importorg.apache.hadoop.hbase.client.HBaseAdmin;
-
importorg.apache.hadoop.hbase.client.HTable;
-
importorg.apache.hadoop.hbase.client.HTablePool;
-
importorg.apache.hadoop.hbase.client.Put;
-
importorg.apache.hadoop.hbase.client.Result;
-
importorg.apache.hadoop.hbase.client.ResultScanner;
-
importorg.apache.hadoop.hbase.client.Scan;
-
importorg.apache.hadoop.hbase.util.Bytes;
-
-
publicclassHbase{
-
//声明静态配置
-
staticConfigurationconf=null;
-
static{
-
conf=HBaseConfiguration.create();
-
conf.set("hbase.zookeeper.quorum","localhost");
-
}
-
-
/*
-
*创建表
-
*
-
*@tableName表名
-
*
-
*@family列族列表
-
*/
-
publicstaticvoidcreatTable(StringtableName,String[]family)
-
throwsException{
-
HBaseAdminadmin=newHBaseAdmin(conf);
-
HTableDescriptordesc=newHTableDescriptor(tableName);
-
for(inti=0;i<family.length;i++){
-
desc.addFamily(newHColumnDescriptor(family[i]));
-
}
-
if(admin.tableExists(tableName)){
-
System.out.println("tableExists!");
-
System.exit(0);
-
}else{
-
admin.createTable(desc);
-
System.out.println("createtableSuccess!");
-
}
-
}
-
-
/*
-
*为表添加数据(适合知道有多少列族的固定表)
-
*
-
*@rowKeyrowKey
-
*
-
*@tableName表名
-
*
-
*@column1第一个列族列表
-
*
-
*@value1第一个列的值的列表
-
*
-
*@column2第二个列族列表
-
*
-
*@value2第二个列的值的列表
-
*/
-
publicstaticvoidaddData(StringrowKey,StringtableName,
-
String[]column1,String[]value1,String[]column2,String[]value2)
-
throwsIOException{
-
Putput=newPut(Bytes.toBytes(rowKey));//设置rowkey
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));//HTabel负责跟记录相关的操作如增删改查等//
-
//获取表
-
HColumnDescriptor[]columnFamilies=table.getTableDescriptor()//获取所有的列族
-
.getColumnFamilies();
-
-
for(inti=0;i<columnFamilies.length;i++){
-
StringfamilyName=columnFamilies[i].getNameAsString();//获取列族名
-
if(familyName.equals("article")){//article列族put数据
-
for(intj=0;j<column1.length;j++){
-
put.add(Bytes.toBytes(familyName),
-
Bytes.toBytes(column1[j]),Bytes.toBytes(value1[j]));
-
}
-
}
-
if(familyName.equals("author")){//author列族put数据
-
for(intj=0;j<column2.length;j++){
-
put.add(Bytes.toBytes(familyName),
-
Bytes.toBytes(column2[j]),Bytes.toBytes(value2[j]));
-
}
-
}
-
}
-
table.put(put);
-
System.out.println("adddataSuccess!");
-
}
-
-
/*
-
*根据rwokey查询
-
*
-
*@rowKeyrowKey
-
*
-
*@tableName表名
-
*/
-
publicstaticResultgetResult(StringtableName,StringrowKey)
-
throwsIOException{
-
Getget=newGet(Bytes.toBytes(rowKey));
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));//获取表
-
Resultresult=table.get(get);
-
for(KeyValuekv:result.list()){
-
System.out.println("family:"+Bytes.toString(kv.getFamily()));
-
System.out
-
.println("qualifier:"+Bytes.toString(kv.getQualifier()));
-
System.out.println("value:"+Bytes.toString(kv.getValue()));
-
System.out.println("Timestamp:"+kv.getTimestamp());
-
System.out.println("-------------------------------------------");
-
}
-
returnresult;
-
}
-
-
/*
-
*遍历查询hbase表
-
*
-
*@tableName表名
-
*/
-
publicstaticvoidgetResultScann(StringtableName)throwsIOException{
-
Scanscan=newScan();
-
ResultScannerrs=null;
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));
-
try{
-
rs=table.getScanner(scan);
-
for(Resultr:rs){
-
for(KeyValuekv:r.list()){
-
System.out.println("row:"+Bytes.toString(kv.getRow()));
-
System.out.println("family:"
-
+Bytes.toString(kv.getFamily()));
-
System.out.println("qualifier:"
-
+Bytes.toString(kv.getQualifier()));
-
System.out
-
.println("value:"+Bytes.toString(kv.getValue()));
-
System.out.println("timestamp:"+kv.getTimestamp());
-
System.out
-
.println("-------------------------------------------");
-
}
-
}
-
}finally{
-
rs.close();
-
}
-
}
-
-
/*
-
*遍历查询hbase表
-
*
-
*@tableName表名
-
*/
-
publicstaticvoidgetResultScann(StringtableName,Stringstart_rowkey,
-
Stringstop_rowkey)throwsIOException{
-
Scanscan=newScan();
-
scan.setStartRow(Bytes.toBytes(start_rowkey));
-
scan.setStopRow(Bytes.toBytes(stop_rowkey));
-
ResultScannerrs=null;
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));
-
try{
-
rs=table.getScanner(scan);
-
for(Resultr:rs){
-
for(KeyValuekv:r.list()){
-
System.out.println("row:"+Bytes.toString(kv.getRow()));
-
System.out.println("family:"
-
+Bytes.toString(kv.getFamily()));
-
System.out.println("qualifier:"
-
+Bytes.toString(kv.getQualifier()));
-
System.out
-
.println("value:"+Bytes.toString(kv.getValue()));
-
System.out.println("timestamp:"+kv.getTimestamp());
-
System.out
-
.println("-------------------------------------------");
-
}
-
}
-
}finally{
-
rs.close();
-
}
-
}
-
-
/*
-
*查询表中的某一列
-
*
-
*@tableName表名
-
*
-
*@rowKeyrowKey
-
*/
-
publicstaticvoidgetResultByColumn(StringtableName,StringrowKey,
-
StringfamilyName,StringcolumnName)throwsIOException{
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));
-
Getget=newGet(Bytes.toBytes(rowKey));
-
get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));//获取指定列族和列修饰符对应的列
-
Resultresult=table.get(get);
-
for(KeyValuekv:result.list()){
-
System.out.println("family:"+Bytes.toString(kv.getFamily()));
-
System.out
-
.println("qualifier:"+Bytes.toString(kv.getQualifier()));
-
System.out.println("value:"+Bytes.toString(kv.getValue()));
-
System.out.println("Timestamp:"+kv.getTimestamp());
-
System.out.println("-------------------------------------------");
-
}
-
}
-
-
/*
-
*更新表中的某一列
-
*
-
*@tableName表名
-
*
-
*@rowKeyrowKey
-
*
-
*@familyName列族名
-
*
-
*@columnName列名
-
*
-
*@value更新后的值
-
*/
-
publicstaticvoidupdateTable(StringtableName,StringrowKey,
-
StringfamilyName,StringcolumnName,Stringvalue)
-
throwsIOException{
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));
-
Putput=newPut(Bytes.toBytes(rowKey));
-
put.add(Bytes.toBytes(familyName),Bytes.toBytes(columnName),
-
Bytes.toBytes(value));
-
table.put(put);
-
System.out.println("updatetableSuccess!");
-
}
-
-
/*
-
*查询某列数据的多个版本
-
*
-
*@tableName表名
-
*
-
*@rowKeyrowKey
-
*
-
*@familyName列族名
-
*
-
*@columnName列名
-
*/
-
publicstaticvoidgetResultByVersion(StringtableName,StringrowKey,
-
StringfamilyName,StringcolumnName)throwsIOException{
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));
-
Getget=newGet(Bytes.toBytes(rowKey));
-
get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));
-
get.setMaxVersions(5);
-
Resultresult=table.get(get);
-
for(KeyValuekv:result.list()){
-
System.out.println("family:"+Bytes.toString(kv.getFamily()));
-
System.out
-
.println("qualifier:"+Bytes.toString(kv.getQualifier()));
-
System.out.println("value:"+Bytes.toString(kv.getValue()));
-
System.out.println("Timestamp:"+kv.getTimestamp());
-
System.out.println("-------------------------------------------");
-
}
-
/*
-
*List<>results=table.get(get).list();Iterator<>it=
-
*results.iterator();while(it.hasNext()){
-
*System.out.println(it.next().toString());}
-
*/
-
}
-
-
/*
-
*删除指定的列
-
*
-
*@tableName表名
-
*
-
*@rowKeyrowKey
-
*
-
*@familyName列族名
-
*
-
*@columnName列名
-
*/
-
publicstaticvoiddeleteColumn(StringtableName,StringrowKey,
-
StringfalilyName,StringcolumnName)throwsIOException{
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));
-
DeletedeleteColumn=newDelete(Bytes.toBytes(rowKey));
-
deleteColumn.deleteColumns(Bytes.toBytes(falilyName),
-
Bytes.toBytes(columnName));
-
table.delete(deleteColumn);
-
System.out.println(falilyName+":"+columnName+"isdeleted!");
-
}
-
-
/*
-
*删除指定的列
-
*
-
*@tableName表名
-
*
-
*@rowKeyrowKey
-
*/
-
publicstaticvoiddeleteAllColumn(StringtableName,StringrowKey)
-
throwsIOException{
-
HTabletable=newHTable(conf,Bytes.toBytes(tableName));
-
DeletedeleteAll=newDelete(Bytes.toBytes(rowKey));
-
table.delete(deleteAll);
-
System.out.println("allcolumnsaredeleted!");
-
}
-
-
/*
-
*删除表
-
*
-
*@tableName表名
-
*/
-
publicstaticvoiddeleteTable(StringtableName)throwsIOException{
-
HBaseAdminadmin=newHBaseAdmin(conf);
-
admin.disableTable(tableName);
-
admin.deleteTable(tableName);
-
System.out.println(tableName+"isdeleted!");
-
}
-
-
publicstaticvoidmain(String[]args)throwsException{
-
-
//创建表
-
StringtableName="blog2";
-
String[]family={"article","author"};
-
//creatTable(tableName,family);
-
-
//为表添加数据
-
-
String[]column1={"title","content","tag"};
-
String[]value1={
-
"HeadFirstHBase",
-
"HBaseistheHadoopdatabase.Useitwhenyouneedrandom,realtimeread/writeaccesstoyourBigData.",
-
"Hadoop,HBase,NoSQL"};
-
String[]column2={"name","nickname"};
-
String[]value2={"nicholas","lee"};
-
addData("rowkey1","blog2",column1,value1,column2,value2);
-
addData("rowkey2","blog2",column1,value1,column2,value2);
-
addData("rowkey3","blog2",column1,value1,column2,value2);
-
-
//遍历查询
-
getResultScann("blog2","rowkey4","rowkey5");
-
//根据rowkey范围遍历查询
-
getResultScann("blog2","rowkey4","rowkey5");
-
-
//查询
-
getResult("blog2","rowkey1");
-
-
//查询某一列的值
-
getResultByColumn("blog2","rowkey1","author","name");
-
-
//更新列
-
updateTable("blog2","rowkey1","author","name","bin");
-
-
//查询某一列的值
-
getResultByColumn("blog2","rowkey1","author","name");
-
-
//查询某列的多版本
-
getResultByVersion("blog2","rowkey1","author","name");
-
-
//删除一列
-
deleteColumn("blog2","rowkey1","author","nickname");
-
-
//删除所有列
-
deleteAllColumn("blog2","rowkey1");
-
-
//删除表
-
deleteTable("blog2");
-
-
}
-
}
|
|