1. 程式人生 > >Hbase 基本操作用 在java 上的實現

Hbase 基本操作用 在java 上的實現

點選有驚喜

1.首先確保hbase處於開啟狀態
2.建立maven 專案 匯入依賴

<dependencies>
  <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.2.0</version
>
</dependency> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>1.2.0</version> </dependency>

3.在resources檔案下新增兩個檔案
1.hbase-site.xml

  <?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master,slave1,slave2</value>
                <description>
The directory shared by RegionServers.</description> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> </configuration>
2.log4j.properties
  # Global logging configuration
log4j.rootLogger=INFO, stdout
# MyBatis logging configuration...
log4j.logger.org 



.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.實現基本操作

package com.test.bd17;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.NavigableMap;
import java.util.Random;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellScanner;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;


public class HbaseTest {
    public Connection connection;
    //用hbaseconfiguration初始化配置資訊時會自動載入當前應用classpath下的hbase-site.xml
    public static Configuration configuration = HBaseConfiguration.create();
    public Table table;
    public Admin admin;

    public HbaseTest() throws Exception{
        //對connection初始化
        connection = ConnectionFactory.createConnection(configuration);
        admin = connection.getAdmin();
    }
    //建立表
    public void createTable(String tablename,String... cf1) throws Exception{
        //獲取admin物件
        Admin admin = connection.getAdmin();
        //建立tablename物件描述表的名稱資訊
        TableName tname = TableName.valueOf(tablename);//bd17:mytable
        //建立HTableDescriptor物件,描述表資訊
        HTableDescriptor tDescriptor = new HTableDescriptor(tname);
        //判斷是否表已存在
        if(admin.tableExists(tname)){
            System.out.println("表"+tablename+"已存在");
            return;
        }
        //新增表列簇資訊
        for(String cf:cf1){
            HColumnDescriptor famliy = new HColumnDescriptor(cf);
            tDescriptor.addFamily(famliy);
        }
        //呼叫admin的createtable方法建立表
        admin.createTable(tDescriptor);
        System.out.println("表"+tablename+"建立成功");
    }
    //刪除表
    public void deleteTable(String tablename) throws Exception{
        Admin admin = connection.getAdmin();
        TableName tName = TableName.valueOf(tablename);
        if(admin.tableExists(tName)){
            admin.disableTable(tName);
            admin.deleteTable(tName);
            System.out.println("刪除表"+tablename+"成功!");
        }else{
            System.out.println("表"+tablename+"不存在。");
        }
    }
    //新增資料到表裡面Put
    public void putData() throws Exception{
        TableName tableName = TableName.valueOf("bd17:fromjava");
        Table table = connection.getTable(tableName);
        Random random = new Random();
        List<Put> batPut = new ArrayList<Put>();
        for(int i=0;i<10;i++){
            //構建put的引數是rowkey   rowkey_i (Bytes工具類,各種java基礎資料型別和位元組陣列之間的相互轉換)
            Put put = new Put(Bytes.toBytes("rowkey_"+i));
            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("username"), Bytes.toBytes("un_"+i));
            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("age"), Bytes.toBytes(random.nextInt(50)+1));
            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("birthday"), Bytes.toBytes("20170"+i+"01"));
            put.addColumn(Bytes.toBytes("j"), Bytes.toBytes("phone"), Bytes.toBytes("電話_"+i));
            put.addColumn(Bytes.toBytes("j"), Bytes.toBytes("email"), Bytes.toBytes("email_"+i));
            //單記錄put
//          table.put(put);
            batPut.add(put);
        }
        table.put(batPut);
        System.out.println("表插入資料成功!");
    }
    public void getData() throws Exception{
        TableName tableName = TableName.valueOf("bd17:fromjava");
        table = connection.getTable(tableName);
        //構建get物件
        List<Get> gets = new ArrayList<Get>();
        for(int i=0;i<5;i++){
            Get get = new Get(Bytes.toBytes("rowkey_"+i));
            gets.add(get);
        }
        Result[] results = table.get(gets);
        for(Result result:results){
            //一行一行讀取資料
//          NavigableMap<byte[],NavigableMap<byte[],NavigableMap<Long,byte[]>>> maps = result.getMap();
//          for(byte[] cf:maps.keySet()){
//              NavigableMap<byte[],NavigableMap<Long,byte[]>> valueWithColumnQualify = maps.get(cf);
//              for(byte[] columnQualify:valueWithColumnQualify.keySet()){
//                  NavigableMap<Long,byte[]> valueWithTimeStamp = valueWithColumnQualify.get(columnQualify);
//                  for(Long ts:valueWithTimeStamp.keySet()){
//                      byte[] value = valueWithTimeStamp.get(ts);
//                      System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnFamliy:"+
//                              Bytes.toString(cf)+",comlumnQualify:"+Bytes.toString(columnQualify)+",timestamp:"
//                              +new Date(ts)+",value:"+Bytes.toString(value)
//                              );
//                  }
//              }
//          }

            //使用欄位名稱和列簇名稱來獲取value值
//          System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnfamily:i,columnqualify:username,value:"+
//                  Bytes.toString(result.getValue(Bytes.toBytes("i"), Bytes.toBytes("username")))
//                  );
//          System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnfamily:i,columnqualify:age,value:"+
//                  Bytes.toInt(result.getValue(Bytes.toBytes("i"), Bytes.toBytes("age")))
//                  );

            //使用cell獲取result裡面的資料
            CellScanner cellScanner = result.cellScanner();
            while(cellScanner.advance()){
                Cell cell = cellScanner.current();
                //從單元格cell中把資料獲取並輸出
                //使用 CellUtil工具類,從cell中把資料獲取出來
                String famliy = Bytes.toString(CellUtil.cloneFamily(cell));
                String qualify = Bytes.toString(CellUtil.cloneQualifier(cell));
                String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
                String value = Bytes.toString(CellUtil.cloneValue(cell));
                System.out.println("rowkey:"+rowkey+",columnfamily:"+famliy+",qualify:"+qualify+",value:"+value);
            }
        }
    }
    //關閉連線
    public void cleanUp() throws Exception{
        connection.close();
    }
    public static void main(String[] args) throws Exception {
        HbaseTest hbaseTest = new HbaseTest();
//      hbaseTest.createTable("bd17:fromjava", "i","j");
//      hbaseTest.deleteTable("bd17:fromjava");
//      hbaseTest.putData();
        hbaseTest.getData();
        hbaseTest.cleanUp();
    }
}

點選有驚喜


相關推薦

【資料結構與演算法】之單鏈表、雙鏈表、迴圈連結串列的基本介紹及其Java程式碼實現---第三篇

一、連結串列的基本介紹 連結串列的定義:連結串列是一種遞迴的資料結構,它或者為空(null),或者是指向一個結點(node)的引用,該結點含有一個泛型的元素和一個指向另一條連結串列的引用。----Algorithms  Fourth  Edition   常見的連結串

Hbase 基本操作用 在java 實現

點選有驚喜 1.首先確保hbase處於開啟狀態 2.建立maven 專案 匯入依賴 <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-cli

Java程式碼實現HBase基本操作

概覽 1.匯入jar包 2.測試 3.異常處理 首先將HBase搭建完成,然後啟動Zookeeper,Hadoop,HBase叢集 1.匯入jar包 準備: 1.CentOS7 2.Zookeeper叢集 3.Hadoop2.7.3叢集 4.hbase2.0.0

鏈表的基本操作java語言實現

auth ndb ack pan log 定義 pac ext col package com.baorant; public class JavaDemo { public static void main(String[] args) {

一、實現一個特殊的棧,在實現棧的基本功能的基礎,再實現返回棧中最小元素的操作

empty util run print pri ont com res 字符串 請指教交流! 1 package com.it.hxs.c01; 2 3 import java.util.Stack; 4 5 /* 6 實現一個特殊的棧,在實現棧的基本

java 設計模式的作用和具體實現

targe log lan .html href tar www cnblogs spa 1.裝飾者模式 參考鏈接:https://www.cnblogs.com/chenxing818/p/4705919.html 作用:給對象添加額外功能java 設計模式的作用和具體

基本排序演算法-java實現

最近重新學習了排序演算法,之前每次看完當時理解了,但是過一段時間就又忘了,尤其是程式碼,如果放一段時間有很多base case不知道怎麼寫了,所以還是應該詳細的解讀一下再不斷了敲程式碼才能理解比較深刻。 1.氣泡排序(bubble sort) 氣泡排序是一種簡單的排序演算法。其基本思

LeetCode:227. 基本計算器 II [Java實現]

實現一個基本的計算器來計算一個簡單的字串表示式的值。 字串表示式僅包含非負整數,+, - ,*,/ 四種運算子和空格 。 整數除法僅保留整數部分。 示例 1: 輸入: “3+2*2” 輸出: 7 示例 2: 輸入: ” 3/2 ” 輸出: 1 示例 3: 輸入:

java jsch實現sftp檔案傳,並且控制傳的速度,同時監控傳進度

工作中,有些環境頻寬有限,比如說專線,通常頻寬比較小,又不便宜,當業務量大的時間,如果在專線上還要傳輸檔案的話,往往在檔案傳輸的時間會導致頻寬佔慢,就有可能導致時實交易進不來,有可能影響交易,今天貼一下 jsch實現sftp檔案上傳,並且控制上傳的速度,同時監控上傳進度,供大家參考。

多種負載均衡演算法及其Java程式碼實現【網路較好的轉載】

首先給大家介紹下什麼是負載均衡(來自百科) 負載均衡 建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件 網路裝置和 伺服器的頻寬、增加 吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。 負載均衡,英文名稱為Load Balance,其意思就

HBase | 如何使用Java連線Kerberos的HBase

一.文件編寫目的 出於CDH叢集安全考慮,在CDH叢集中增加了Kerberos認證機制。因為HBase的儲存系統是基於Hadoop的儲存,所以通過HBase客戶端訪問HBase資料庫時需要進行身份認證。在Linux下使用HBase客戶端訪問HBase資料時需要先kinit初始化Kerberos賬

java在OJ實現多次輸入

import java.util.Scanner; public class Main { public static void main(String args[]) { int a,b; Scanner reader=new Scann

Java Servlet實現檔案傳並讀取Zip壓縮包中檔案的真實型別

1.上傳檔案servlet PS: 使用ant.jar中的 org.apache.tools.zip.ZipEntry 物件,防止亂碼 package com.chenl.servlets; import java.io.File; import java.io.IOExcep

Java程式碼實現對hive的基本操作

1.匯入jar包 在eclipse上新建java專案,並在專案下建個lib資料夾,然後將jar包放到lib中匯入專案 hive的lib下的 將其全部匯入到專案中 2.測試 在你要測試的hive的主機的/usr/tmp建個student檔案,裡面放入一些

關於怎麼在用java在redis實現秒殺

為什麼用redis來實現秒殺功能 ,這麼不加贅述。 一、需要準備的外掛和包 Spring data  redis  jedis redisson jdk1.8等 二、思路 想要使用redis來實現秒殺,首先需要連結上redis,對redis進行操作,這裡需要使用

Unity3D用程式碼方式建立一個Cube並對其進行作用C#實現

// Use this for initialization void Start () { //我們將obj1初始化為一個Cube立方體,當然我們也可以初始化為其他的形狀 GameObject obj1 = GameObject.CreatePrimitiv

紅黑樹的基本概念及java實現

紅黑樹的性質 紅黑樹和平衡二叉樹類似,最大的區別是紅黑樹為節點賦予了黑色和紅色兩種屬性。 紅黑樹的節點只有兩種顏色,紅色和黑色。 根節點為黑色。 葉子節點為黑色,值為NULL。 沒有兩個連續的紅色節點。 從一個節點到該節點的子孫節點的所有路徑包含相同數

Java實現檔案傳下載的三種解決方案

第一點:Java程式碼實現檔案上傳   FormFile file=manform.getFile();    String newfileName = null;   String newpathname=null;   String fileAddre="/numU

JAVA傳影象時影象處理的基本方法

一,form表單型別 <form id="xxForm" action="xx.htm" method="post" enctype ="multipart/form-data" > 則請求頭含有: formdata----------------------

Java程式碼實現列隊基本操作

Java實現列隊基本操作 佇列的定義: 佇列(Queue)是隻允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。 (1)允許刪除的一端稱為隊頭(Front)。 (2)允許插入的一端稱為隊尾(Rear)。 (3)當佇列中沒有元素時稱為空佇列。 (4)佇列