【hadoop】Hbase java api 案例

?代碼實現:

HBaseConnection.java

package com.peizheng.bigdata;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;import java.io.IOException;public class HBaseConnection {public static Connection connection = null;static {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "master,slave1,slave2");conf.set("hbase.zookeeper.property.clientPort","2181");try {connection = ConnectionFactory.createConnection(conf);} catch (IOException e) {e.printStackTrace();}}public static void closeConnection(){try {connection.close();} catch (IOException e) {e.printStackTrace();}}
}

HBaseOperation.java

package com.peizheng.bigdata;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class HBaseOperation {public static void createNameSpace(String namespace) throws IOException {// 1 獲取admin對象   另有Table對象Admin admin = HBaseConnection.connection.getAdmin();// 1.1 Builder類NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);// 1.2 添加需求,這里是添加了自定義的描述信息//builder.addConfiguration("user","peizheng");// 2 調用方法,創建命名空間admin.createNamespace(builder.build());// 3 關閉adminadmin.close();}public static void createTable(String name, String[] cols) throws IOException {Admin admin = HBaseConnection.connection.getAdmin();HTableDescriptor hTableDescriptor = new HTableDescriptor(name);for (String col : cols) {HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(col);hColumnDescriptor.setMaxVersions(5);hTableDescriptor.addFamily(hColumnDescriptor);}admin.createTable(hTableDescriptor);admin.close();}public static void putCell(String tableName, String rowKey, String columnFamily, String columnName, String value) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));table.put(put);table.close();}// 查詢// 單行讀取public static void getRow(String tableName, String rowKey) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Get get = new Get(Bytes.toBytes(rowKey));// Result -> Cell[]Result result = table.get(get);// cell存儲非常底層Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.println(family + ":" + colunm + "," + value);}table.close();}public static void getCell(String tableName, String rowKey, String familyName, String columnName) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Get get = new Get(Bytes.toBytes(rowKey));get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));// Result -> Cell[]Result result = table.get(get);// cell存儲非常底層Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.println(family + ":" + colunm + "," + value);}table.close();}public static void scanRows(String tableName, String startRowKey, String endRowKey) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();// 指定起始的行 (包含)scan.setStartRow(Bytes.toBytes(startRowKey));// 指定結束的行 (默認不包含)scan.setStopRow(Bytes.toBytes(endRowKey));ResultScanner scanner = table.getScanner(scan);// Result記錄一行數據,Cell數組// ResultScanner記錄多行數據,Result數組for (Result result : scanner) {Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.print(family + ":" + colunm + "," + value + "\t");}System.out.println();}table.close();}public static void filterScan(String tableName, String startRowKey, String endRowKey, String familyName, String columnName, String val) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();// 指定起始的行 (包含)scan.setStartRow(Bytes.toBytes(startRowKey));// 指定結束的行 (默認不包含)scan.setStopRow(Bytes.toBytes(endRowKey));FilterList filterList = new FilterList();//設置過濾器//SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(Bytes.toBytes(familyName),Bytes.toBytes(columnName),CompareFilter.CompareOp.LESS_OR_EQUAL,Bytes.toBytes(val));//添加過濾器filterList.addFilter(singleColumnValueFilter);scan.setFilter(filterList);ResultScanner scanner = table.getScanner(scan);// Result記錄一行數據,Cell數組// ResultScanner記錄多行數據,Result數組for (Result result : scanner) {Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.print(family + ":" + colunm + "," + value + "\t");}System.out.println();table.close();}}public static void main(String[] args) throws Exception {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "master,slave1,slave2");conf.set("hbase.zookeeper.property.clientPort", "2181");HBaseConnection.connection = ConnectionFactory.createConnection(conf);String tableName = "temperature";String[] cols = {"cf"};if (!HBaseConnection.connection.getAdmin().tableExists(TableName.valueOf(tableName))) {createTable(tableName, cols);}BufferedReader bufferedReader = new BufferedReader(new FileReader("F:/temperature.log"));String line;while ((line = bufferedReader.readLine()) != null) {String[] splits = line.split(",");String id = splits[0].trim();String year = splits[1].trim();String temperature = splits[2].trim();String rowKey = id + ":" + year;putCell(tableName, rowKey, "cf", "id", id);putCell(tableName, rowKey, "cf", "year", year);putCell(tableName, rowKey, "cf", "temperature", temperature);}bufferedReader.close();HBaseConnection.closeConnection();}
}

相關運行結果:

java程序運行結果:

?hbase客戶端運行結果:

scan 'temperature'

?

報錯解決

一直運行中可能是設置連接的是ip,不是master,slave1,slave2,這種,可能報錯Caused by: org.apache.hadoop.hbase.MasterNotRunningException: java.net.UnknownHostExce。在網上找了半天的原因也沒有找到的話參考下面文章修改 windows的ssh配置文件:

ip,主機名供參考:

【hadoop】創建 SSH 別名來連接遠程 linux-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79037.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

榮耀A8互動娛樂組件部署實錄(第3部分:控制端結構與房間通信協議)

作者:曾在 WebSocket 超時里泡了七天七夜的苦命人 一、控制端總體架構概述 榮耀A8控制端主要承擔的是“運營支點”功能,也就是開發與運營之間的橋梁。它既不直接參與玩家行為,又控制著玩家的行為邏輯和游戲規則觸發機制。控制端的主要職責包…

Vue3路由模式為history,使用nginx部署上線后刷新404的問題

一、問題 在使用nginx部署vue3的項目后,發現正常時可以訪問的,但是一旦刷新,就是出現404的情況 二、解決方法 1.vite.config.js配置 在vite.config.js中加入以下配置 export default defineConfig(({ mode }) > {const isProduction …

企業級UI測試的“雙保險”:TestComplete的智能對象識別與詳細報告功能

企業級UI測試真是讓人頭疼!界面元素變來變去,測試腳本動不動就報錯,測試工作根本沒法順利推進。而且,測試結果的管理和共享也麻煩得很,團隊協作效率大打折扣。別急!TestComplete的智能對象識別和詳細測試報…

SpringBoot的自動配置和起步依賴原理

關于Spring Boot的自動配置和起步依賴,我想結合最新的實現機制來展開說明。先說自動配置——這是Spring Boot最核心的"約定優于配置"思想的落地體現。舉個例子,當我們創建一個新的Spring Boot項目時,只要在pom.xml里添加了spring-b…

《MATLAB實戰訓練營:從入門到工業級應用》高階挑戰篇-《5G通信速成:MATLAB毫米波信道建模仿真指南》

《MATLAB實戰訓練營:從入門到工業級應用》高階挑戰篇-5G通信速成:MATLAB毫米波信道建模仿真指南 🚀📡 大家好!今天我將帶大家進入5G通信的奇妙世界,我們一起探索5G通信中最激動人心的部分之一——毫米波信…

一、Redis快速入門

Redis的常見命令和客戶端使用 一、初識Redis Redis是一種鍵值型的NoSql數據庫,這里有兩個關鍵字: 鍵值型 NoSql 其中鍵值型,是指Redis中存儲的數據都是以key、value對的形式存儲,而value的形式多種多樣,可以是字符…

gitcode 上傳文件報錯文件太大has exceeded the limited size (10 MiB) in commit

登陸gitcoe,在項目設置->提交設置 ,勾選提交文件限制,修改限制的大小。 修改完后,重新提交代碼。

【運維】構建基于Python的自動化運維平臺:用Flask和Celery打造高效管理工具

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著企業IT基礎設施的復雜性不斷增加,手動運維已無法滿足高效管理的需求。本文詳細介紹如何基于Python構建一個自動化運維平臺,利用Flask…

基于大模型預測的產鉗助產分娩全方位研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 二、產鉗助產分娩概述 2.1 產鉗助產定義與歷史 2.2 適用情況與臨床意義 三、大模型預測原理與數據基礎 3.1 大模型技術原理 3.2 數據收集與處理 3.3 模型訓練與驗證 四、術前預測與準備 4.1 大模型術前風險預…

css使用aspect-ratio制作4:3和9:16和1:1等等比例布局

文章目錄 1. 前言2. 用法2.1 基本語法2.2. 與max-width、max-height等屬性結合使用2.3. 動態計算比例 3. 應用場景4. 兼容性和替代方案5. 總結 1. 前言 在網頁制作過程中,有時候我們只知道寬度,或者只知道高度,這時候需要制作一個4:3和9:16這…

【國產化】在銀河麒麟ARM環境下離線安裝docker

1、前言 采用離線安裝的方式。 關于離線安裝的方式官網有介紹,但是說的很簡單,網址:Binaries | Docker Docs 官網介紹的有幾種主流linux系統的安裝方式,但是沒有kylin的,所以在此記錄一下。 在安裝過程中也遇到了些…

從一城一云到AI CITY,智慧城市進入新階段

AI將如何改變城市面貌?AI能否為城市創造新的商業價值?AI的落地應用將對日常生活有什么樣的影響? 幾乎在每一場和城市發展相關的論壇上,都會出現以上幾個問題。城市既是AI技術創新融合應用的綜合性載體,普羅大眾對AI產…

鴻蒙知識總結

判斷題 1、 在http模塊中,多個請求可以使用同一個httpRequest對象,httpRequest對象可以復用。(錯誤) 2、訂閱dataReceiverProgress響應事件是用來接收HTTP流式響應數據。(錯誤) 3、ArkTS中變量聲明時不需要…

[人機交互]理解用戶

一.解釋什么是認知,以及它對交互設計的重要性 1.1什么是認知 認知是指與knowing相關的能力,行為和過程(考填空) -如何感知物理刺激?如注意、知覺等 -如何認識自我、他人以及環境?如意識、記憶等 -如何…

微信小程序備案的一些記錄

小程序如果沒有備案是搜索不到小程序的。 小程序備案需要填寫主體負責人的信息,需要主體負責人的手機號驗證碼, 需要填寫管理員的信息,同樣也需要驗證手機號碼, 填寫完畢之后,提交進行初審,初審之后會打…

SpringCloud服務拆分:Nacos服務注冊中心 + LoadBalancer服務負載均衡使用

SpringCloud中Nacos服務注冊中心 LoadBalancer服務負載均衡使用 前言Nacos工作流程nacos安裝docker安裝window安裝 運行nacos微服務集成nacos高級特性1.服務集群配置方法效果圖模擬服務實例宕機 2.權重配置3.環境隔離 如何啟動集群節點本地啟動多個節點方法 LoadBalancer集成L…

網絡安全系列--《文章1:網絡安全基礎與核心概念》

課程1:網絡安全基礎與核心概念 學習內容 1. 網絡安全定義 網絡安全是通過技術、管理及法律手段保護網絡系統的硬件、軟件及數據,使其免受破壞、篡改或泄露,確保系統穩定運行并提供可靠服務。其核心目標包括保密性、完整性、可用性、可控性及…

C++:掃雷游戲

一.掃雷游戲項目設計 1.文件結構設計 首先我們要先定義三個文件 ①test.c //文件中寫游戲的測試邏輯 ②game.c //文件中寫游戲中函數的實現等 ③game.h //文件中寫游戲需要的數據類型和函數聲明等 2.掃雷游戲的主體結構 使?控制臺實現經典的掃雷游戲 ?游戲可以通過菜單…

[人機交互]識別需要和建立需求

*一.需要選擇的產品特征(或屬性)可概括為兩類 1.1外部特征(屬性) 對用戶而言,可見及可度量的屬性 1.2內部特征(屬性) 對用戶而言是不可見或不可度量的 二.什么是需求 需求是有關目標的陳述…

Lua學習筆記

文章目錄 前言1. Lua的數據類型2. Lua的控制結構2.1 循環2.1.1 for2.1.1.1 數值循環2.1.1.2 迭代循環2.1.2 while2.1.3 repeat-until 2.2 條件語句2.3 函數 3. Lua中的變量作用域 前言 Lua是一種輕量級的、高效的、可擴展的腳本語言,由巴西里約熱內盧天主教大學&am…