Hbase JavaAPi介紹和使用示例(待更新)
Hbase客戶端Api使用筆記
開發環境
系統 | 版本 | 下載地址 |
---|---|---|
Idea | 1.4 | 下載 |
hbase | 1.1.0 | 下載 |
環境搭建
在這裡我用的是Maven建立專案
初步預覽
java類 | HBase資料模型 |
---|---|
HBaseAdmin | 資料庫(DataBase) |
HBaseConfiguration | |
HTable | 表(Table) |
HTableDescriptor | 列族(Column Family) |
Put | 列修飾符(Column Qualifier) |
Get | |
Scanner |
HBaseConfiguration
關係:org.apache.hadoop.hbase.HBaseConfiguration
作用:對HBase進行配置
返回值 | 函式 | 描述 |
---|---|---|
void | addResource(Path file) | 通過給定的路徑所指的檔案來新增資源 |
void | clear() | 清空所有已設定的屬性 |
string | get(String name) | 獲取屬性名對應的值 |
String | getBoolean(String name, boolean defaultValue) | 獲取為boolean型別的屬性值,如果其屬性值型別部位boolean,則返回預設屬性值 |
void | set(String name, String value) | 通過屬性名來設定值 |
void | setBoolean(String name, boolean value) | 設定boolean型別的屬性值 |
用法示例:
HBaseConfiguration hconfig = new HBaseConfiguration();
hconfig.set("hbase.zookeeper.property.clientPort","2181");
該方法設定了”hbase.zookeeper.property.clientPort”的埠號為2181。一般情況下,HBaseConfiguration會使用建構函式進行初始化,然後在使用其他方法。
HBaseAdmin
關係:org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一個介面來管理HBase資料庫的表資訊。它提供的方法包括:建立表,刪除表,列出表項,使表有效或無效,以及新增或刪除表列族成員等。
返回值 | 函式 | 描述 |
---|---|---|
void | addColumn(String tableName, HColumnDescriptor column) | 向一個已經存在的表新增咧 |
checkHBaseAvailable(HBaseConfiguration conf) | 靜態函式,檢視HBase是否處於執行狀態 | |
createTable(HTableDescriptor desc) | 建立一個表,同步操作 | |
deleteTable(byte[] tableName) | 刪除一個已經存在的表 | |
enableTable(byte[] tableName) | 使表處於有效狀態 | |
disableTable(byte[] tableName) | 使表處於無效狀態 | |
HTableDescriptor[] listTables() | 列出所有使用者控制元件表項 | |
void | modifyTable(byte[] tableName, HTableDescriptor htd) | 修改表的模式,是非同步的操作,可能需要花費一定的時間 |
boolean | tableExists(String tableName) | 檢查表是否存在 |
用法示例:
HBaseAdmin admin = new HBaseAdmin(config);
admin.disableTable("tablename")
HTableDescriptor
關係:org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字極其對應表的列族
返回值 | 函式 | 描述 |
---|---|---|
void | addFamily(HColumnDescriptor) | 新增一個列族 |
HColumnDescriptor | removeFamily(byte[] column) | 移除一個列族 |
byte[] | getName() | 獲取表的名字 |
byte[] | getValue(byte[] key) | 獲取屬性的值 |
void | setValue(String key, String value) | 設定屬性的值 |
用法示例:
HTableDescriptor htd = new HTableDescriptor(table);
htd.addFamily(new HcolumnDescriptor("family"));
在上述例子中,通過一個HColumnDescriptor例項,為HTableDescriptor新增了一個列族:family
HColumnDescriptor
關係:org.apache.hadoop.hbase.HColumnDescriptor
作用:維護著關於列族的資訊,例如版本號,壓縮設定等。它通常在建立表或者為表新增列族的時候使用。列族被建立後不能直接修改,只能通過刪除然後重新建立的方式。列族被刪除的時候,列族裡面的資料也會同時被刪除。
返回值 |函式 |描述
byte[]| getName()| 獲取列族的名字
byte[] |getValue(byte[] key)| 獲取對應的屬性的值
void| setValue(String key, String value)| 設定對應屬性的值
用法示例:
HTableDescriptor htd = new HTableDescriptor(tablename);
HColumnDescriptor col = new HColumnDescriptor("content:");
htd.addFamily(col);
此例新增了一個content的列族
HTable
關係:org.apache.hadoop.hbase.client.HTable
作用:可以用來和HBase表直接通訊。此方法對於更新操作來說是非執行緒安全的。
返回值 | 函式 | 描述 |
---|---|---|
void | checkAdnPut(byte[] row, byte[] family, byte[] qualifier, byte[] value, Put put | 自動的檢查row/family/qualifier是否與給定的值匹配 |
void | close() | 釋放所有的資源或掛起內部緩衝區中的更新 |
Boolean | exists(Get get) | 檢查Get例項所指定的值是否存在於HTable的列中 |
Result | get(Get get) | 獲取指定行的某些單元格所對應的值 |
byte[][] | getEndKeys() | 獲取當前一開啟的表每個區域的結束鍵值 |
ResultScanner | getScanner(byte[] family) | 獲取當前給定列族的scanner例項 |
HTableDescriptor | getTableDescriptor() | 獲取當前表的HTableDescriptor例項 |
byte[] | getTableName() | 獲取表名 |
static boolean | isTableEnabled(HBaseConfiguration conf, String tableName) | 檢查表是否有效 |
void | put(Put put) | 向表中新增值 |
用法示例:
HTable table = new HTable(conf, Bytes.toBytes(tablename));
ResultScanner scanner = table.getScanner(family);
Put
關係:org.apache.hadoop.hbase.client.Put
作用:用來對單個行執行新增操作
返回值 | 函式 | 描述 |
---|---|---|
Put | add(byte[] family, byte[] qualifier, byte[] value) | 將指定的列和對應的值新增到Put例項中 |
Put | add(byte[] family, byte[] qualifier, long ts, byte[] value) | 將指定的列和對應的值及時間戳新增到Put例項中 |
byte[] | getRow() | 獲取Put例項的行 |
RowLock | getRowLock() | 獲取Put例項的行鎖 |
long | getTimeStamp() | 獲取Put例項的時間戳 |
boolean | isEmpty() | 檢查familyMap是否為空 |
Put | setTimeStamp(long timeStamp) | 設定Put例項的時間戳 |
用法示例:
HTable table = new HTable(conf,Bytes.toBytes(tablename));
Put p = new Put(brow);//為指定行建立一個Put操作
p.add(family,qualifier,value);
table.put(p);
Get
關係:org.apache.hadoop.hbase.client.Get
作用:用來獲取單個行的相關資訊
返回值 | 函式 | 描述 |
---|---|---|
Get | addColumn(byte[] family, byte[] qualifier) | 獲取指定列族和列修飾符對應的列 |
Get | addFamily(byte[] family) | 通過指定的列族獲取其對應列的所有列 |
Get | setTimeRange(long minStamp,long maxStamp) | 獲取指定取件的列的版本號 |
Get | setFilter(Filter filter) | 當執行Get操作時設定伺服器端的過濾器 |
用法示例:
HTable table = new HTable(conf, Bytes.toBytes(tablename));
Get g = new Get(Bytes.toBytes(row));
Result
關係:org.apache.hadoop.hbase.client.Result
作用:儲存Get或者Scan操作後獲取表的單行值。使用此類提供的方法可以直接獲取值或者各種Map結構(key-value對)
返回值| 函式| 描述
boolean |containsColumn(byte[] family, byte[] qualifier) |檢查指定的列是否存在
NavigableMap
開發示例
public class HbaseTestApi {
static Configuration conf = null;
static Connection conn = null;
static Random ra = new Random();
static {
Configuration conf = HBaseConfiguration.create();
//配置訪問
conf.set("hbase.zookeeper.quorum", "172.19.4.231,172.19.4.230,172.19.4.239");
try {
conn = ConnectionFactory.createConnection(conf);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 建立Hbase資料庫表
* TableName 表名
* colmnsName 列族名
*/
@Test
public void CreateHbaseTable() throws IOException {
//表名
TableName test = TableName.valueOf("test");
Admin admin = conn.getAdmin();
//判斷是否存在
if (admin.tableExists(test)) {
admin.disableTable(test);
admin.deleteTable(test);
}
//表
HTableDescriptor ht = new HTableDescriptor(test);
//列族
HColumnDescriptor hc = new HColumnDescriptor("cf1".getBytes());
//設定最大版本
hc.setMaxVersions(5);
hc.setBlockCacheEnabled(true);
//Block
hc.setBlocksize(1800000);
//將 列族新增到 表中
ht.addFamily(hc);
//請求建立
admin.createTable(ht);
//關閉
admin.close();
}
/**
* 插入
*/
@Test
public void insert() throws IOException {
//獲取表
Table table = conn.getTable(TableName.valueOf("test"));
//建立一個 Put陣列,批量插入
List<Put> putList = new ArrayList<Put>();
for (int i = 0; i < 200; i++) {
Put put = new Put(Bytes.toBytes(randomPhone()+"_"+System.currentTimeMillis()));
put.addColumn("cf1".getBytes(), "name".getBytes(), randomUsername().getBytes());
put.addColumn("cf1".getBytes(), "address".getBytes(), randomAddres().getBytes());
put.addColumn("cf1".getBytes(), "phone".getBytes(), randomPhone().getBytes());
put.addColumn("cf1".getBytes(), "type".getBytes(), randomType().getBytes());
putList.add(put);
}
//寫入
table.put(putList);
}
/**
* 掃描
*/
@Test
public void ScanTable() throws IOException {
Table table = conn.getTable(TableName.valueOf("test"));
Scan scan = new Scan("0_one".getBytes());
ResultScanner scanner = table.getScanner(scan);
Iterator<Result> iterator = scanner.iterator();
while (iterator.hasNext()) {
Result next = iterator.next();
byte[] value = next.getValue("cf1".getBytes(), "name".getBytes());
System.out.println(new String(value));
}
}
/**
* 模糊掃描
*/
@Test
public void findtype() throws IOException {
Table table=conn.getTable(TableName.valueOf("test"));
Scan scan=new Scan();
FilterList filterlist=new FilterList(FilterList.Operator.MUST_PASS_ALL);
PrefixFilter pf=new PrefixFilter("15".getBytes());
SingleColumnValueFilter sf =new SingleColumnValueFilter("cf1".getBytes(),"address".getBytes(), CompareFilter.CompareOp.EQUAL,"湖南".getBytes());
SingleColumnValueFilter sf1 =new SingleColumnValueFilter("cf1".getBytes(),"type".getBytes(), CompareFilter.CompareOp.EQUAL,"1".getBytes());
filterlist.addFilter(pf);
filterlist.addFilter(sf);
filterlist.addFilter(sf1);
scan.setFilter(filterlist);
ResultScanner scanner = table.getScanner(scan);
Iterator<Result> iterator = scanner.iterator();
while(iterator.hasNext()){
Result next = iterator.next();
byte[] type = next.getValue("cf1".getBytes(), "type".getBytes());
byte[] addres = next.getValue("cf1".getBytes(), "address".getBytes());
byte[] name = next.getValue("cf1".getBytes(), "name".getBytes());
byte[] phone = next.getValue("cf1".getBytes(), "phone".getBytes());
System.out.println(new String(type,"utf8"));
System.out.println(new String(addres,"utf8"));
System.out.println(new String(phone,"utf8"));
// System.out.println(new String(value,"utf8"));
}
}
/**
* @return 隨機名字
*/
public static String randomUsername() {
String name = "";
for (int i = 0; i < 1; i++) {
String[] firsname = {"趙", "錢", "孫", "李", "周", "吳", "鄭", "王", "馮", "陳",
"楮", "衛", "蔣", "沈", "韓", "楊", "朱", "秦", "尤", "許", "何", "呂",
"施", "張", "孔", "曹", "嚴", "華", "金", "魏", "陶", "姜", "戚", "謝",
"鄒", "喻", "柏", "水", "竇", "章", "雲", "蘇", "潘", "葛", "奚", "範",
"彭", "郎", "魯", "韋", "昌", "馬", "苗", "鳳", "花", "方", "俞", "任",
"袁", "柳", "酆", "鮑", "史", "唐", "費", "廉", "岑", "薛", "雷", "賀",
"倪", "湯", "滕", "殷", "羅", "畢", "郝", "鄔", "安", "常", "樂", "於",
"時", "傅", "皮", "卞", "齊", "康", "伍", "餘", "元", "卜", "顧", "孟",
"平", "黃", "和", "穆", "蕭", "尹", "姚", "邵", "湛", "汪", "祁", "毛",
"禹", "狄", "米", "貝", "明", "臧", "計", "伏", "成", "戴", "談", "宋",
"茅", "龐", "熊", "紀", "舒", "屈", "項", "祝", "董", "樑", "杜", "阮",
"藍", "閩", "席", "季", "麻", "強", "賈", "路", "婁", "危", "江", "童",
"顏", "郭", "梅", "盛", "林", "刁", "鍾", "徐", "丘", "駱", "高", "夏",
"蔡", "田", "樊", "胡", "凌", "霍", "虞", "萬", "支", "柯", "昝", "管",
"盧", "莫", "經", "房", "裘", "繆", "幹", "解", "應", "宗", "丁", "宣",
"賁", "鄧", "鬱", "單", "杭", "洪", "包", "諸", "左", "石", "崔", "吉",
"鈕", "龔", "程", "嵇", "邢", "滑", "裴", "陸", "榮", "翁", "荀", "羊",
"於", "惠", "甄", "麴", "家", "封", "芮", "羿", "儲", "靳", "汲", "邴",
"糜", "鬆", "井", "段", "富", "巫", "烏", "焦", "巴", "弓", "牧", "隗",
"山", "谷", "車", "侯", "宓", "蓬", "全", "郗", "班", "仰", "秋", "仲",
"伊", "宮", "寧", "仇", "欒", "暴", "甘", "斜", "厲", "戎", "祖", "武",
"符", "劉", "景", "詹", "束", "龍", "葉", "幸", "司", "韶", "郜", "黎",
"薊", "薄", "印", "宿", "白", "懷", "蒲", "邰", "從", "鄂", "索", "鹹",
"籍", "賴", "卓", "藺", "屠", "蒙", "池", "喬", "陰", "鬱", "胥", "能",
"蒼", "雙", "聞", "莘", "黨", "翟", "譚", "貢", "勞", "逄", "姬", "申",
"扶", "堵", "冉", "宰", "酈", "雍", "郤", "璩", "桑", "桂", "濮", "牛",
"壽", "通", "邊", "扈", "燕", "冀", "郟", "浦", "尚", "農", "溫", "別",
"莊", "晏", "柴", "瞿", "閻", "充", "慕", "連", "茹", "習", "宦", "艾",
"魚", "容", "向", "古", "易", "慎", "戈", "廖", "庾", "終", "暨", "居",
"衡", "步", "都", "耿", "滿", "弘", "匡", "國", "文", "寇", "廣", "祿",
"闕", "東", "歐", "殳", "沃", "利", "蔚", "越", "夔", "隆", "師", "鞏",
"厙", "聶", "晁", "勾", "敖", "融", "冷", "訾", "辛", "闞", "那", "簡",
"饒", "空", "曾", "毋", "沙", "乜", "養", "鞠", "須", "豐", "巢", "關",
"蒯", "相", "查", "後", "荊", "紅", "遊", "竺", "權", "逑", "蓋", "益",
"桓", "公", "万俟", "司馬", "上官", "歐陽", "夏侯", "諸葛", "聞人", "東方", "赫連",
"皇甫", "尉遲", "公羊", "澹臺", "公冶", "宗政", "濮陽", "淳于", "單于", "太叔",
"申屠", "公孫", "仲孫", "軒轅", "令狐", "鍾離", "宇文", "長孫", "慕容", "鮮于",
"閭丘", "司徒", "司空", "丌官", "司寇", "仉", "督", "子車", "顓孫", "端木", "巫馬",
"公西", "漆雕", "樂正", "壤駟", "公良", "拓拔", "夾谷", "宰父", "穀梁", "晉", "楚",
"閻", "法", "汝", "鄢", "塗", "欽", "段幹", "百里", "東郭", "南門", "呼延",
"歸", "海", "羊舌", "微生", "嶽", "帥", "緱", "亢", "況", "後", "有", "琴",
"樑丘", "左丘", "東門", "西門", "商", "牟", "佘", "佴", "伯", "賞", "南宮",
"墨", "哈", "譙", "笪", "年", "愛", "陽", "佟"};
String[] namelist = {"偉", "偉", "芳", "偉", "秀英", "秀英", "娜", "秀英", "偉",
"敏", "靜", "麗", "靜", "麗", "強", "靜", "敏", "敏", "磊", "軍", "洋",
"勇", "勇", "豔", "傑", "磊", "強", "軍", "傑", "娟", "豔", "濤", "濤",
"明", "豔", "超", "勇", "娟", "傑", "秀蘭", "霞", "敏", "軍", "麗", "強",
"平", "剛", "傑", "桂英", "芳", " 嘉懿", "煜城", "懿軒", "燁偉", "苑博", "偉澤",
"熠彤", "鴻煊", "博濤", "燁霖", "燁華", "煜祺", "智宸", "正豪", "昊然", "明傑",
"立誠", "立軒", "立輝", "峻熙", "弘文", "熠彤", "鴻煊", "燁霖", "哲瀚", "鑫鵬",
"致遠", "俊馳", "雨澤", "燁磊", "晟睿", "天佑", "文昊", "修潔", "黎昕", "遠航",
"旭堯", "鴻濤", "偉祺", "榮軒", "越澤", "浩宇", "瑾瑜", "皓軒", "擎蒼", "擎宇",
"志澤", "睿淵", "楷瑞", "子軒", "弘文", "哲瀚", "雨澤", "鑫磊", "修傑", "偉誠",
"建輝", "晉鵬", "天磊", "紹輝", "澤洋", "明軒", "健柏", "鵬煊", "昊強", "偉宸",
"博超", "君浩", "子騫", "明輝", "鵬濤", "炎彬", "鶴軒", "越彬", "風華", "靖琪",
"明誠", "高格", "光華", "國源", "冠宇", "晗昱", "涵潤", "翰飛", "翰海", "昊乾",
"浩博", "和安", "弘博", "巨集愷", "鴻朗", "華奧", "華燦", "嘉慕", "堅秉", "建明",
"金鑫", "錦程", "瑾瑜", "晉鵬", "經賦", "景同", "靖琪", "君昊", "俊明", "季同",
"開濟", "凱安", "康成", "樂語", "力勤", "良哲", "理群", "茂彥", "敏博", "明達",
"朋義", "彭澤", "鵬舉", "濮存", "溥心", "璞瑜", "浦澤", "奇邃", "祺祥", "榮軒",
"銳達", "睿慈", "紹祺", "聖傑", "晟睿", "思源", "斯年", "泰寧", "天佑", "同巍",
"奕偉", "祺溫", "文虹", "向笛", "心遠", "欣德", "新翰", "興言", "星闌", "修為",
"旭堯", "炫明", "學真", "雪風", "雅昶", "陽曦", "燁熠", "英韶", "永貞", "詠德",
"宇寰", "雨澤", "玉韻", "越彬", "蘊和", "哲彥", "振海", "正志", "子晉", "自怡",
"德赫", "君平"};
int a = (int) Math.abs(firsname.length * Math.random());
int b = (int) Math.abs(namelist.length * Math.random());
name = firsname[a] + namelist[b];
}
return name;
}
/**
* 返回手機號碼
*/
public static String[] telFirst = "134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(",");
public static int getNum(int start, int end) {
return (int) (Math.random() * (end - start + 1) + start);
}
public static String randomPhone() {
int index = getNum(0, telFirst.length - 1);
String first = telFirst[index];
String second = String.valueOf(getNum(1, 888) + 10000).substring(1);
String thrid = String.valueOf(getNum(1, 9100) + 10000).substring(1);
return first + second + thrid;
}
/**
* 地址
*/
public static String randomAddres() {
String[] address = {"北京", "上海", "湖南", "深圳"};
String result = address[ra.nextInt(4)];
return result;
}
/**
* 型別
*/
public static String randomType() {
return ra.nextInt(2) == 1 ? "1" : "0";
}
}
相關文章
- Hbase原理的介紹和使用場景分析
- 理解索引:HBase介紹和架構索引架構
- Hbase一:Hbase介紹及特點
- netcat 命令介紹及使用示例
- Hadoop叢集中Hbase的介紹、安裝、使用Hadoop
- Guava併發:ListenableFuture使用介紹以及示例Guava
- Redis介紹和使用Redis
- The Graph介紹和使用
- useRoute 函式的詳細介紹與使用示例函式
- 物件導向設計介紹和程式碼示例物件
- iOS Runtime介紹和使用iOS
- ddddocr基本使用和介紹
- LayerMask 的介紹和使用
- BlockingQueue 的介紹和使用BloC
- Python JWT 介紹和使用PythonJWT
- Cron表示式介紹與示例
- Redis Stack功能介紹及redis-om-dotnet使用示例Redis
- Charles 功能介紹和使用教程
- web worker的介紹和使用Web
- 【Linux】jq 命令介紹和使用Linux
- Deadmin 更新部分文件介紹快速使用方法
- 資料清洗和準備 (待更新)
- JSON for Modern C++ 庫的介紹與使用示例程式碼JSONC++
- clang-format的介紹和使用ORM
- Web Storage API的介紹和使用WebAPI
- Docker(3):Dockerfile介紹及簡單示例Docker
- 集合的介紹(正在更新中)
- vuex詳細介紹和使用方法Vue
- Google guava工具類的介紹和使用GoGuava
- langchain中的chat models介紹和使用LangChain
- Linux常用初級指令介紹和使用Linux
- Task 5 (待更新....)
- CMinpack使用介紹
- Tmux使用介紹UX
- saltstack使用介紹
- Github使用介紹Github
- babel-runtime和babel-polyfill的介紹和使用Babel
- Material Design - 常用控制元件介紹和使用Material Design控制元件
- ccs的介紹,安裝和使用入門