大数据hadoop学习【11】-----根据要求,编写JAVA程序,实现对Hbase表中数据进行操作目录
- 一、JAVA编程实现对Hbase数据库的操作
- 1、进行Hbase的访问及关闭访问
- 2、列出HBase所有的表的相关信息,例如表名
- 3、在终端打印出指定的表的所有记录数据
- 4、向已经创建好的表添加指定的列族或列
- 5、向已经创建好的表删除指定的列族或列
- 6、删除指定的表中的某一行的所有数据
- 7、统计表的行数
- 8、清空指定的表的所有记录数据
在很多时候,在使用hbase数据库对表中数据进行操作的时候,一般我们不会使用shell命令,而是通过java编程实现对hbase数据库的访问,前几次我们学习了怎么通过java程序实现对hbase数据库建表的基本操作以及对数据的相关基本操作,本次博客,林君学长将带大家编写java程序,实现按要求操作相关表中的数据,编写成相关函数方法
- 操作系统:ubuntuKylin-16.04
- hadoop版本:hadoop-2.7.7
- hbase版本:hbase-1.4.13
一、JAVA编程实现对Hbase数据库的操作
1、进行Hbase的访问及关闭访问
1)、java访问hbase数据库的操作如下:
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//建立连接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
2)、java关闭访问hbase数据库的操作如下:
//关闭连接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
2、列出HBase所有的表的相关信息,例如表名
1)、java程序如下所示:
public void listTables() throws IOException {
init();
HTableDescriptor hTableDescriptors[] = admin.listTables();
for(HTableDescriptor hTableDescriptor :hTableDescriptors){
System.out.println(hTableDescriptor.getNameAsString());
}
close();
}
2)、代码说明
以上代码通过访问hbase数据库,直接列出hbase数据库中的我们创建过的所有的表的名字,并在终端打印出来!
3、在终端打印出指定的表的所有记录数据
1)、java程序如下所示:
public void getAllData(String tableName) throws IOException{
init();
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
ResultScanner resutScanner = table.getScanner(scan);
for(Result result: resutScanner){
showCell(result);
}
table.close();
close();
}
2)、代码说明
以上函数通过传递一个参数,也就是表名,通过传递的表名,我们列出该表中所有的数据信息,其中showCell()函数是一个终端打印函数,将读取到的信息输出在终端,后面会给出该函数
4、向已经创建好的表添加指定的列族或列
1)、java程序如下所示:
public void insertRow(String tableName,String rowKey,String colFamily,String col) throws IOException {
init();
Table table = connection.getTable(TableName.valueOf(tableName));
Put put = new Put(rowKey.getBytes());
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
System.out.println("数据插入成功");
table.put(put);
table.close();
close();
}
2)、代码说明
上面函数需要传递的参数分别为,表名、行键、(确定是哪一行的数据),然后是列族、子列;如果该列族下没有子列,则传递参数的时候子列(col)写为空就好,如下所示:
列族有子列:
insertRow(“student1”, “chenyiyue”, “score”, “Math”)
列族没有子列:
insertRow(“student1”, “chenyiyue”, “name”, " ")
5、向已经创建好的表删除指定的列族或列
1)、java程序如下所示:
public void deleteRow(String tableName,String rowKey,String colFamily,String col) throws IOException {
init();
Table table = connection.getTable(TableName.valueOf(tableName));
Delete delete = new Delete(rowKey.getBytes());
delete.addColumn(colFamily.getBytes(), col.getBytes());
table.delete(delete);
System.out.println("信息已经删除");
table.close();
close();
}
2)、代码说明
以上函数通过传递参数表名和行键确定删除那一行的数据,然后通过列族和子列来进行对应的删;如果列族下没有子列,那子列(col)写为空;如果有,指定下的子列,确定删除哪一个子列如:
列族下无子列:
deleteRow(“student1”, “chenyiyue”, “name”," ")
删除score列族下的子列Math:
deleteRow(“student1”, “chenyiyue”, “score”,“Math”)
6、删除指定的表中的某一行的所有数据
1)、java程序如下所示:
public void deleteLine(String tableName,String rowKey) throws IOException {
init();
Table table = connection.getTable(TableName.valueOf(tableName));
Delete delete = new Delete(rowKey.getBytes());
table.delete(delete);
System.out.println("信息已经删除");
table.close();
close();
}
2)、代码说明
既然是删除表中所有的数据,那我们就需要传递表名和行键就行,然后就删除这一行的所有数据!
7、统计表的行数
1)、java程序如下所示:
public void getLong(String tableName) throws IOException{
init();
int a=0;
Table table=connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
ResultScanner resutScanner = table.getScanner(scan);
for(Result result: resutScanner){
a=a+result.size();
}
System.out.println("该表共有:"+a+"行");
table.close();
close();
}
2)、代码说明
通过传递表名,对该表的行数进行统计,只需要依次列出表的数据,设置变量a进行统计行数据的个数,然后输出就ok!
8、清空指定的表的所有记录数据
1)、java程序如下所示:
public void deleteAll(String tableName) throws IOException {
init();
System.out.println("开始清空数据");
//取得目标数据表的表明对象
TableName tableName = TableName.valueOf(tableName);
//设置表状态为无效
admin.disableTable(tableName);
//清空指定表的数据
admin.truncateTable(tableName, true);
System.out.println("该表数据已清空");
close();
}
2)、代码说明
通过传递表名,对该表中的所有数据进行清空,但没有删除该表哦!
以上就是本次博客的全部内容啦,上面的操作只给出了函数哦,具体使用是需要调用这些函数使用的,小伙伴们对于函数的调用应该会吧,自己调用去吧!希望对本次博客的阅读,可以帮助大家了解到java是如何对hbase数据库进行操作的!
遇到问题的小伙伴评论区留言,林君学长看到为会大家解答的,这个学长不太冷!
陈一月的又一天编程岁月^ _ ^