hbase的Java基本操作
建表,建列簇操作
private static Connection connection;
private static Admin admin;
public static void createTable(String tableName, String[] fields) throws IOException {
if(admin.tableExists(TableName.valueOf(tableName)))
{
deleteTable(tableName);
}
//2.TableDescriptorBuilder.newBuilder建構表描述建構器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
for (int i=0;i<fields.length;i++)
{
//3.建立列簇構造描述器
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(fields[i]));
//4.建構列簇描述
ColumnFamilyDescriptor cfDes = columnFamilyDescriptorBuilder.build();
//建立表與列簇的關聯關系
tableDescriptorBuilder.setColumnFamily(cfDes);
}
TableDescriptor tableDescriptor = tableDescriptorBuilder.build();
admin.createTable(tableDescriptor);
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();建立HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection建立HBase()連接配接
connection = ConnectionFactory.createConnection(configuration);
// 建立表,要給予HBase擷取Admin對象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.建立表和列
String[] filed = {"H1", "H2", "H3"};
createTable(tablename, filed);
}
添加資料,指定表名,列簇列名,以及rowkey和對應的value
//添加資料
public static void addRecord(String tableName, String row, String[] fields, String[] values) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
String []column=new String[110];
String columnFamily="";
for(int i=0;i<fields.length;i++)
{
String []split=fields[i].split(":");
column[i]=split[1];
columnFamily=split[0];
}
Put put = new Put(Bytes.toBytes(row));
for(int i=0;i<values.length;i++)
{
put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column[i]),Bytes.toBytes(values[i]));
}
//5.使用htable表執行put操作
table.put(put);
//關閉htable表對象
table.close();
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();建立HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection建立HBase()連接配接
connection = ConnectionFactory.createConnection(configuration);
// 建立表,要給予HBase擷取Admin對象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.建立表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed);
//2.向表tableName、行row(用S_Name表示)和字元串數組fields指定的單元格中添加對應的資料values。
// 其中,fields中每個元素如果對應的列族下還有相應的列限定符的話,用“columnFamily:column”表示。
// 例如,同時向“Math”、“Computer Science”、“English”三列添加成績時,
// 字元串數組fields為{“Score:Math”, ”Score:Computer Science”, ”Score:English”},數組values存儲這三門課的成績。
String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
String[] values = {"2015001", "Zhangsan", "male", "23"};
String row = "Zhangsan";
addRecord(tablename, row, fields, values);
}
檢視表中某rowkey的列簇下的所有值,或者單個列簇:列名的值
public static void scanColumn(String tableName,String rowKey, String column) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Get get = new Get(rowKey.getBytes());
if(column.contains(":"))
{
//查詢指定rowkey和列簇下的指定列名
String[] split = column.split(":");
get.addColumn(Bytes.toBytes(split[0]),Bytes.toBytes(split[1]));
Result result = table.get(get);
byte[] value = result.getValue(Bytes.toBytes(split[0]), Bytes.toBytes(split[1]));
if(Bytes.toString(value)!=null)
System.out.println(Bytes.toString(value));
else
System.out.println("null");
}
else
{
//查詢指定rowkey和列簇下的所有資料
get.addFamily(column.getBytes());
Result result = table.get(get);
Cell[] cells = result.rawCells();
for (Cell cell:cells)
{
//擷取列簇名稱
String cf = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
//擷取列的名稱
String colunmName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
//擷取值
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
if(value!=null)
System.out.println(cf+":"+colunmName+"=>"+value);
else
System.out.println(cf+":"+colunmName+"=>"+"null");
}
}
table.close();
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();建立HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection建立HBase()連接配接
connection = ConnectionFactory.createConnection(configuration);
// 建立表,要給予HBase擷取Admin對象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.建立表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed);
//2.向表tableName、行row(用S_Name表示)和字元串數組fields指定的單元格中添加對應的資料values。
// 其中,fields中每個元素如果對應的列族下還有相應的列限定符的話,用“columnFamily:column”表示。
// 例如,同時向“Math”、“Computer Science”、“English”三列添加成績時,
// 字元串數組fields為{“Score:Math”, ”Score:Computer Science”, ”Score:English”},數組values存儲這三門課的成績。
// String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
// String[] values = {"2015001", "Zhangsan", "male", "23"};
// String row = "Zhangsan";
// addRecord(tablename, row, fields, values);
//3.浏覽表tableName某一列的資料,如果某一行記錄中該列資料不存在,則傳回null。
// 要求當參數column為某一列族名稱時,如果底下有若幹個列限定符,則要列出每個列限定符代表的列的資料;
// 當參數column為某一列具體名稱(例如“Score:Math”)時,隻需要列出該列的資料。
String column = "H1:S_Name";
String rowkey = "Zhangsan";
scanColumn(tablename, rowkey, column);
}
修改rowkey下的對應的單獨的列簇:列名的值
public static void modifyData(String tableName,String rowkey,String column,String value) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
//修改操作
Put put = new Put(Bytes.toBytes(rowkey));
String[] split = column.split(":");
String columnFamily=split[0];
String columnName=split[1];
put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));
table.put(put);
//檢視修改後的資料
Get get = new Get(rowkey.getBytes());
get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
Result result = table.get(get);
byte[] value2 = result.getValue(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
if(Bytes.toString(value2)!=null)
System.out.println(columnFamily+":"+columnName+"=>"+Bytes.toString(value2));
else
System.out.println("null");
System.out.println("修改成功!!");
table.close();
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();建立HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection建立HBase()連接配接
connection = ConnectionFactory.createConnection(configuration);
// 建立表,要給予HBase擷取Admin對象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.建立表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed);
//2.向表tableName、行row(用S_Name表示)和字元串數組fields指定的單元格中添加對應的資料values。
// 其中,fields中每個元素如果對應的列族下還有相應的列限定符的話,用“columnFamily:column”表示。
// 例如,同時向“Math”、“Computer Science”、“English”三列添加成績時,
// 字元串數組fields為{“Score:Math”, ”Score:Computer Science”, ”Score:English”},數組values存儲這三門課的成績。
// String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
// String[] values = {"2015001", "Zhangsan", "male", "23"};
// String row = "Zhangsan";
// addRecord(tablename, row, fields, values);
//3.浏覽表tableName某一列的資料,如果某一行記錄中該列資料不存在,則傳回null。
// 要求當參數column為某一列族名稱時,如果底下有若幹個列限定符,則要列出每個列限定符代表的列的資料;
// 當參數column為某一列具體名稱(例如“Score:Math”)時,隻需要列出該列的資料。
// String column = "H1:S_Name";
// String rowkey = "Zhangsan";
// scanColumn(tablename, rowkey, column);
//4.modifyData(S修改表tableName,行row(可以用學生姓名S_Name表示),
// 列column指定的單元格的資料tring tableName, String row, String column)
String colum = "H1:S_Name";
String rowkey = "Zhangsan";
String value = "XiaoFengZai";
modifyData(tablename, rowkey, colum, value);
}
删除指定的rowkey内容
public static void deleteRow(String tableName, String row) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
//删除一條rowkey記錄
Delete delete = new Delete(Bytes.toBytes(row));
table.delete(delete);
table.close();
}
public static void main(String[] args) throws IOException {
//用HBaseConfiguration.create();建立HBase的配置
Configuration configuration = HBaseConfiguration.create();
//用ConnectionFactory.createConnection建立HBase()連接配接
connection = ConnectionFactory.createConnection(configuration);
// 建立表,要給予HBase擷取Admin對象
admin = connection.getAdmin();
String tablename = "WATER_BILL";
//1.建立表和列
// String[] filed = {"H1", "H2", "H3"};
// createTable(tablename, filed);
//2.向表tableName、行row(用S_Name表示)和字元串數組fields指定的單元格中添加對應的資料values。
// 其中,fields中每個元素如果對應的列族下還有相應的列限定符的話,用“columnFamily:column”表示。
// 例如,同時向“Math”、“Computer Science”、“English”三列添加成績時,
// 字元串數組fields為{“Score:Math”, ”Score:Computer Science”, ”Score:English”},數組values存儲這三門課的成績。
// String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
// String[] values = {"2015001", "Zhangsan", "male", "23"};
// String row = "Zhangsan";
// addRecord(tablename, row, fields, values);
//3.浏覽表tableName某一列的資料,如果某一行記錄中該列資料不存在,則傳回null。
// 要求當參數column為某一列族名稱時,如果底下有若幹個列限定符,則要列出每個列限定符代表的列的資料;
// 當參數column為某一列具體名稱(例如“Score:Math”)時,隻需要列出該列的資料。
// String column = "H1:S_Name";
// String rowkey = "Zhangsan";
// scanColumn(tablename, rowkey, column);
//4.modifyData(S修改表tableName,行row(可以用學生姓名S_Name表示),
// 列column指定的單元格的資料tring tableName, String row, String column)
// String colum = "H1:S_Name";
// String rowkey = "Zhangsan";
// String value = "XiaoFengZai";
// modifyData(tablename, rowkey, colum, value);
//5.删除指定的rowkey内容
String rowkey="Zhangsan";
deleteRow(tablename,rowkey);
admin.close();
connection.close();
}
删除指定的表
public void deleteTable(String tablename)throws IOException
{
TableName tableName=TableName.valueOf("WATER_BILL");
if(admin.tableExists(tableName))
{
admin.disableTable(tableName);
admin.deleteTable(tableName);
}
}