日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

2021年大数据HBase(五):HBase的相关操作JavaAPI方式

發布時間:2023/11/28 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021年大数据HBase(五):HBase的相关操作JavaAPI方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

全網最詳細的大數據HBase文章系列,強烈建議收藏加關注!

新文章都已經列出歷史文章目錄,幫助大家回顧前面的知識重點。

目錄

系列歷史文章

前言

HBase的相關操作-JavaAPI方式

一、需求說明

二、準備工作

1、創建IDEA Maven 項目

2、導入相關pom依賴

3、創建包結構和類


系列歷史文章

2021年大數據HBase(十七):HBase的360度全面調優

2021年大數據HBase(十六):HBase的協處理器(Coprocessor)

2021年大數據HBase(十五):HBase的Bulk Load批量加載操作

2021年大數據HBase(十四):HBase的原理及其相關的工作機制

2021年大數據HBase(十三):HBase讀取和存儲數據的流程

2021年大數據HBase(十二):Apache Phoenix 二級索引

2021年大數據HBase(十一):Apache Phoenix的視圖操作

2021年大數據HBase(十):Apache Phoenix的基本入門操作

2021年大數據HBase(九):Apache Phoenix的安裝

2021年大數據HBase(八):Apache Phoenix的基本介紹

2021年大數據HBase(七):Hbase的架構!【建議收藏】

2021年大數據HBase(六):HBase的高可用!【建議收藏】

2021年大數據HBase(五):HBase的相關操作-JavaAPI方式!【建議收藏】

2021年大數據HBase(四):HBase的相關操作-客戶端命令式!【建議收藏】

2021年大數據HBase(三):HBase數據模型

2021年大數據HBase(二):HBase集群安裝操作

2021年大數據HBase(一):HBase基本簡介

前言

?2021大數據領域優質創作博客,帶你從入門到精通,該博客每天更新,逐漸完善大數據各個知識體系的文章,幫助大家更高效學習。

有對大數據感興趣的可以關注微信公眾號:三幫大數據

HBase的相關操作JavaAPI方式

一、需求說明

某某自來水公司,需要存儲大量的繳費明細數據。以下截取了繳費明細的一部分內容

因為繳費明細的數據記錄非常龐大,該公司的信息部門決定使用HBase來存儲這些數據。并且,他們希望能夠通過Java程序來訪問這些數據。

二、準備工作

1、創建IDEA Maven 項目

2、導入相關pom依賴

 <repositories><!-- 代碼庫 --><repository><id>aliyun</id><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots></repository></repositories><dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.1.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.14.3</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><target>1.8</target><source>1.8</source></configuration></plugin></plugins></build>

3、創建包結構和類

在test目錄創建 cn.it.hbase.admin.api_test 包結構 創建TableAmdinTest類 需求一: 使用java代碼創建表 創建一個名為WATER_BILL的表,包含一個列蔟C1
//1 如何創建hbase中表 : WATER_BILL@Testpublic void  test01() throws Exception{//1. 創建 java 連接Hbase的 連接對象//Configuration conf = new Configuration();Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","node1:2181,node2:2181,node3:2181"); // 如果告知hbase: 只需要設置zookeeper的地址即可, 因為zookeeper記錄了hbase的各種元數據信息Connection hbConn = ConnectionFactory.createConnection(conf);//2. 根據連接獲取管理對象:  admin(執行對表操作)  table(執行對表數據的操作)Admin admin = hbConn.getAdmin();//3. 執行相關的操作//3.1: 首先判斷表是否存在boolean flag = admin.tableExists(TableName.valueOf("WATER_BILL")); // 存在 返回trueif(!flag){ // 說明表不存在//3.2: 通過表構建器構建表信息對象 : 指定表名TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("WATER_BILL"));//3.2: 在表構建表中, 添加列族ColumnFamilyDescriptor familyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder("C1".getBytes()).build();tableDescriptorBuilder.setColumnFamily(familyDescriptor);//3.3: 構建表的信息對象TableDescriptor tableDescriptor = tableDescriptorBuilder.build();//3.4: 執行創建表admin.createTable(tableDescriptor);}//4. 釋放資源admin.close();hbConn.close();}

需求二: 往表中插入一條數據

// 需求2:  添加一條數據@Testpublic void test02() throws Exception{//1. 創建 java 連接Hbase的 連接對象Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","node1:2181,node2:2181,node3:2181"); // 如果告知hbase: 只需要設置zookeeper的地址即可, 因為zookeeper記錄了hbase的各種元數據信息Connection hbConn = ConnectionFactory.createConnection(conf);//2. 根據連接獲取管理對象:  admin(執行對表操作)  table(執行對表數據的操作)Table table = hbConn.getTable(TableName.valueOf("WATER_BILL"));//3. 執行相關的操作 : 添加數據命令  put操作Put put = new Put("4944191".getBytes());put.addColumn("C1".getBytes(),"name".getBytes(),"登衛紅".getBytes());put.addColumn("C1".getBytes(),"address".getBytes(),"貴州省銅仁市德江縣".getBytes());put.addColumn("C1".getBytes(),"sex".getBytes(),"男".getBytes());table.put(put);//4. 釋放資源table.close();hbConn.close();}

優化操作: 抽取公共方法
    private Connection hBaseConn; private Admin admin; private Table table; private String tableName = "WATER_BILL" ;@Beforepublic void before() throws Exception {//1. 根據連接工廠構建hbase的連接對象Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "node1:2181,node2:2181,node3:2181");hBaseConn = ConnectionFactory.createConnection(conf);//2. 根據連接對象, 獲取相關的管理對象: admin tableadmin = hBaseConn.getAdmin();table = hBaseConn.getTable(TableName.valueOf(tableName));}@Afterpublic void after() throws Exception {//4. 釋放資源table.close(); admin.close();hBaseConn.close();}

需求三: 查看一條數據

// 需求三: 查詢某一條數據: id為  4944191@Testpublic void test03() throws Exception{//1. 創建 java 連接Hbase的 連接對象Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","node1:2181,node2:2181,node3:2181"); // 如果告知hbase: 只需要設置zookeeper的地址即可, 因為zookeeper記錄了hbase的各種元數據信息Connection hbConn = ConnectionFactory.createConnection(conf);//2. 根據連接獲取管理對象:  admin(執行對表操作)  table(執行對表數據的操作)Table table = hbConn.getTable(TableName.valueOf("WATER_BILL"));//3. 執行相關的操作: 查詢某一條數據  getGet get = new Get("4944191".getBytes());Result result = table.get(get); // 一個 Result 對象 表示 一行數據//4. 處理結果集(查詢)List<Cell> listCells = result.listCells();for (Cell cell : listCells) { // 從單元格中能獲取到哪些內容: rowkey + 列族 + 列名 + 列值/*byte[] familyArray = cell.getFamilyArray();byte familyLength = cell.getFamilyLength();int familyOffset = cell.getFamilyOffset();String family  = new String(familyArray,familyOffset,familyLength);*/byte[] rowBytes = CellUtil.cloneRow(cell);byte[] familyBytes = CellUtil.cloneFamily(cell);byte[] qualifierBytes = CellUtil.cloneQualifier(cell);byte[] valueBytes = CellUtil.cloneValue(cell);String row = Bytes.toString(rowBytes);String family = Bytes.toString(familyBytes);String qualifier = Bytes.toString(qualifierBytes);String value = Bytes.toString(valueBytes);System.out.println("rowkey:"+row +";列族為:"+family +";列名為:"+qualifier+"; 列值:"+value);}//5. 釋放資源:table.close();hbConn.close();}

需求四: 刪除一條數據

   @Testpublic void test03() throws Exception {//3. 執行相關操作:Delete delete = new Delete("4944191".getBytes());delete.addFamily("C2".getBytes());delete.addColumn("C1".getBytes(),"name".getBytes());table.delete(delete);}
需求五: 刪除表
@Testpublic void test04() throws Exception {//3. 執行相關操作if(admin.isTableEnabled(TableName.valueOf(tableName))){admin.disableTable(TableName.valueOf(tableName));}admin.deleteTable(TableName.valueOf(tableName));}
需求六: 導入數據
  • 在資料中,有一份10W的抄表數據文件,我們需要將這里面的數據導入到HBase中
  • 說明:
  1. 在HBase中,有一個Import的MapReduce作業,可以專門用來將數據文件導入到HBase中
  • 用法: ? ? ?
hbase org.apache.hadoop.hbase.mapreduce.Import 表名 HDFS數據文件路徑
  • 開始導入:
  1. 將資料中數據文件上傳到Linux中
  2. 再將文件上傳到hdfs中
hadoop fs -mkdir -p /water_bill/output_ept_10W
hadoop fs -put part-m-00000_10w /water_bill/output_ept_10W
執行命令: hbase org.apache.hadoop.hbase.mapreduce.Import WATER_BILL /water_bill/output_ept_10W 注意: 一定要啟動yarn集群
hbase org.apache.hadoop.hbase.mapreduce.Export WATER_BILL /water_bill/output_ept_10W_export
需求七: 查詢數據??查詢2020年6月份所有用戶的用水量 : C1:RECORD_DATE
//需求七: 查詢 2020年 6月份所有用戶的用戶量: C1:RECORD_DATE@Testpublic void test06() throws Exception{//1. 創建 java 連接Hbase的 連接對象Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","node1:2181,node2:2181,node3:2181"); // 如果告知hbase: 只需要設置zookeeper的地址即可, 因為zookeeper記錄了hbase的各種元數據信息Connection hbConn = ConnectionFactory.createConnection(conf);//2. 根據連接獲取管理對象:  admin(執行對表操作)  table(執行對表數據的操作)Table table = hbConn.getTable(TableName.valueOf("WATER_BILL"));//3. 執行相關的操作Scan scan = new Scan();// LATEST_DATE >= 2020-06-01// 列值過濾器SingleColumnValueFilter start_filter = new SingleColumnValueFilter("C1".getBytes(), "LATEST_DATE".getBytes(),CompareOperator.GREATER_OR_EQUAL, new BinaryComparator("2020-06-01".getBytes()));// LATEST_DATE < 2020-07-01SingleColumnValueFilter end_filter = new SingleColumnValueFilter("C1".getBytes(), "LATEST_DATE".getBytes(),CompareOperator.LESS, new BinaryComparator("2020-07-01".getBytes()));// 將兩個條件合并在一起FilterList filterList = new FilterList();filterList.addFilter(start_filter);filterList.addFilter(end_filter);// 將條件封裝到查詢中scan.setFilter(filterList);scan.setLimit(10);// 執行查詢操作ResultScanner results = table.getScanner(scan);//4. 處理結果集(查詢)for (Result result : results) {List<Cell> listCells = result.listCells();for (Cell cell : listCells) {byte[] rowBytes = CellUtil.cloneRow(cell);byte[] familyBytes = CellUtil.cloneFamily(cell);byte[] qualifierBytes = CellUtil.cloneQualifier(cell);byte[] valueBytes = CellUtil.cloneValue(cell);String row = Bytes.toString(rowBytes);String family = Bytes.toString(familyBytes);String qualifier = Bytes.toString(qualifierBytes);if("NUM_CURRENT".equalsIgnoreCase(qualifier) || "NUM_PREVIOUS".equalsIgnoreCase(qualifier)|| "NUM_USAGE".equalsIgnoreCase(qualifier) || "TOTAL_MONEY".equalsIgnoreCase(qualifier)){Double value = Bytes.toDouble(valueBytes);System.out.println("rowkey:"+row +";列族為:"+family +";列名為:"+qualifier+"; 列值:"+value);}else {String value = Bytes.toString(valueBytes);System.out.println("rowkey:"+row +";列族為:"+family +";列名為:"+qualifier+"; 列值:"+value);}}System.out.println("------------------------");}//5. 釋放資源: @After}

  • 📢博客主頁:https://lansonli.blog.csdn.net
  • 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
  • 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
  • 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?

總結

以上是生活随笔為你收集整理的2021年大数据HBase(五):HBase的相关操作JavaAPI方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。