FusionInsightプラットフォーム--HBaseクライアントツールのパッケージEveHBase

FusionInsightプラットフォーム--HBaseクライアントツールのパッケージEveHBase

簡単な紹介

  • クライアントEveHBase Huawei社HBaseのパッケージの場合
  • 通常のクライアント、クライアントのセキュリティモードをサポートし、
  • 機能が含まれます:、テーブルを構築する事前パーティション化、索引、非同期リクエスト、PUT、取得、スキャン、結果は自動的にJavaBeanのように解決されます

プロジェクトアドレス

使用例

  • 通常のクライアントを作成します。
// HBase配置
// 需从HBase的配置文件目录中分别下载core-site.xml,hdfs-site.xml,hbase-site.xml
Configuration hbaseConf = HBaseConfiguration.create();
hbaseConf.addResource(new Path("./conf/core-site.xml"));
hbaseConf.addResource(new Path("./conf/hdfs-site.xml"));
hbaseConf.addResource(new Path("./conf/hbase-site.xml"));

// 构建客户端
// 当3个配置文件存在项目根目录下时,可以不指定config
HBaseClient client = new EveHBase.Builder()
        .config(hbaseConf)
        .build();
  • セーフモードクライアントの作成
// HBase配置
// ……

// 安全认证配置
// 需从集群管理界面下载对应用户的kerberos文件
SecurityConf securityConf = new SecurityConf(
        "test",
        "./kerberos/user.keytab",
        "./kerberos/krb5.conf");

// 构建安全模式客户端
HBaseClient client = new EveHBase.Builder()
        .config(hbaseConf)
        .enableSafeSupport(securityConf)
        .build();

  • カスタムスレッドプール
ExecutorServiceAdapter adapter = new ExecutorServiceAdapter() {
            @Override
            public ExecutorService generateExecutorService() {
                return Executors.newFixedThreadPool(4);
            }
        };
HBaseClient client = new EveHBase.Builder()
        .config(hbaseConf)
        .pool(adapter)
        .build();
  • テーブルを作成するには
EveTable eveTable = new EveTable.Builder()
        .table("tb_test")
        .familys("family01")
        .encoding(DataBlockEncoding.FAST_DIFF)
        .compression(Compression.Algorithm.SNAPPY)
        .build();

client.create(eveTable);
  • 閉じると削除テーブル
client.disableAndDelete("tableName");
  • 事前パーティション
String[] splitKeys = {"aaa", "ddd", "hhh", "vvv"};
client.multiSplit("tb_test", splitKeys);
  • インデックスを作成します
client.createIndex(
    "tb_test", 
    "family01",
    "phone",
    "tb_test_phone_idx");
  • 自動的にJavaBeansを解決するためにメモを追加
public class Person {

    @RowKey
    public String rowkey;

    // 列簇, 对应family 
    @ColumnFamily
    public Info f;

    public class Info {

        // 列簇中的字段, 对应qualifier
        public String address;

        public String phone;

        public String name;

        public String age;
        
    }
    
}
  • 同期実行要求を取得します
String[] qualifiers = {"address", "phone", "name", "age", "lac"};
EveGet eveGet = new EveGet.Builder()
        .table("tb_test")
        .addRowkey("ccc_21312312")
        .addRowkey("hhh_24242348")
        .select("f", qualifiers)
        .build();

try {
    List<Person> personList = client.get(eveGet, Person.class);
    System.out.println("person = " + personList);
} catch (IOException e) {
    e.printStackTrace();
}
  • 非同期実行要求を取得
client.getAsync(eveGet, new ResultCallback<Person>() {
    @Override
    public void onSuccessful(List<Person> results) {
        for (Person result : results) {
            System.out.println("result = " + result);
        }
    }

    @Override
    public void onFailed(Exception e) {
        System.out.println("e = " + e);
        e.printStackTrace();
    }
});
  • あなたは自動的にJavaBeansを解析していない場合、あなたはそうすることができます
// 传入Result.class将返回HBase原生的结果
List<Result> personList = client.get(eveGet, Result.class);
  • スキャン同期実行要求
String[] qualifiers = {"address", "phone", "name", "age", "lac"};

EveScan eveScan = new EveScan.Builder()
        .table("tb_test")
        .startRow("aaa")
        .endRow("hhh")
//      .filter(...)
        .select("f", qualifiers)
        .build();
try {
    List<Person> personList = client.scan(eveScan, Person.class);
    System.out.println("personList = " + personList);
} catch (IOException e) {
    e.printStackTrace();
}
  • スキャン非同期実行要求
client.scanAsync(eveScan, new ResultCallback<Person>() {
    @Override
    public void onSuccessful(List<Person> results) {
        for (Person result : results) {
            System.out.println("result = " + result);
        }
    }

    @Override
    public void onFailed(Exception e) {

    }
});
  • 提出された同期要求を入れて
List<Put> putList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
    Put put = new Put(Bytes.toBytes("ggg_132131" + i));
    put.addColumn(Bytes.toBytes("f"), Bytes.toBytes("phone"), Bytes.toBytes("1891234567"+ i));
    putList.add(put);
}
try {
    client.put("tb_test", putList);
} catch (IOException e) {
    e.printStackTrace();
}
  • 入れバッファ記憶を使用します
PutBuffer buffer = client.createPutBuffer("test_table", 1000, 5000);
for (int i = 0; i < 100_000; i++) {
    Put put = new Put(Bytes.toBytes("ggg_132131" + i));
    put.addColumn(Bytes.toBytes("f"), Bytes.toBytes("phone"), Bytes.toBytes("1891234567" + i));
    
    buffer.put(put);
}
buffer.flush();
  • 非同期要求を提出入れ
client.putAsync("tb_test", putList, new PutCallback() {
    @Override
    public void onSuccessful() {
        System.out.println("GetTest.onSuccessful 提交Put成功!");
    }

    @Override
    public void onFailed(Exception e, List<Put> puts) {
        System.out.println("GetTest.onFailed 提交Put失败!");
        System.out.println("失败的 puts = " + puts);
    }
});
  • 非同期要求を提出入れて、コールバックしません。
client.putAsync("tb_test", putList, null);

ライセンス

Copyright 2019 ALion

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
公開された128元の記事 ウォン称賛45 ビュー15万+

おすすめ

転載: blog.csdn.net/alionsss/article/details/90046552