Apache Kudu(三) Java Client 連接 Kudu

Java 客戶端

本地host配置(因爲返回的是hostname,不是ip,如果不配置的話,會存在各種連不上)

192.168.1.101 kudu-master-1 kudu-master-2 kudu-master-3

構建maven 工程

    <dependencies>
        <dependency>
            <groupId>org.apache.kudu</groupId>
            <artifactId>kudu-client</artifactId>
            <version>1.11.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
    </dependencies>

初始化客戶端

 /**
     * 聲明全局變量 KuduClient 後期通過它來操作 kudu 表
     */
    private KuduClient kuduClient;

    /**
     * 指定 kuduMaster 地址
     */
    private String kuduMaster;

    /**
     * 指定表名
     */
    private String tableName;

    @Before
    public void init() {
        //初始化操作
        kuduMaster = "192.168.1.101:7051,192.168.1.101:7151,192.168.1.101:7251";
        //指定表名
        tableName = "student2";

        KuduClient.KuduClientBuilder kuduClientBuilder = new
                KuduClient.KuduClientBuilder(kuduMaster);
        kuduClientBuilder.defaultOperationTimeoutMs(1800000);

        kuduClient = kuduClientBuilder.build();

        logger.info("服務器地址#{}:客戶端#{} 初始化成功...", kuduMaster, kuduClient);
    }
  • createTable(String name, Schema schema, CreateTableOptions builder) 創建表
  • deleteTable 刪除表
  • apply(Operation operation) 執行操作, Operation 包含 Insert/Update/Upsert/Delete
  • KuduScanner 表掃描器

插入數據

/**
     * 向表加載數據
     */
    @Test
    public void insertTable() throws KuduException {
        //向表加載數據需要一個 kuduSession 對象
        KuduSession kuduSession = kuduClient.newSession();
//        kuduSession.set
        kuduSession.setTimeoutMillis(100000);
        kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC);
        //需要使用 kuduTable 來構建 Operation 的子類實例對象
        KuduTable kuduTable = kuduClient.openTable(tableName);
        for (int i = 1; i <= 10; i++) {
            Insert insert = kuduTable.newInsert();
            PartialRow row = insert.getRow();
            row.addInt("id", i);
            row.addString("name", "zhangsan-" + i);
            row.addInt("age", 20 + i);
            row.addInt("sex", i % 2);
            //最後實現執行數據的加載操作
            kuduSession.apply(insert);
        }
    }

查詢數據

/**
     * 查詢表的數據結果
     */
    @Test
    public void queryData() throws KuduException {
        //構建一個查詢的掃描器
        KuduScanner.KuduScannerBuilder kuduScannerBuilder =
                kuduClient.newScannerBuilder(kuduClient.openTable(tableName));
        ArrayList<String> columnsList = new ArrayList<String>();
        columnsList.add("id");
        columnsList.add("name");
        columnsList.add("age");
        columnsList.add("sex");
        kuduScannerBuilder.setProjectedColumnNames(columnsList);
        //返回結果集
        KuduScanner kuduScanner = kuduScannerBuilder.build();
        //遍歷
        while (kuduScanner.hasMoreRows()) {
            RowResultIterator rowResults = kuduScanner.nextRows();
            while (rowResults.hasNext()) {
                RowResult row = rowResults.next();
                int id = row.getInt("id");
                String name = row.getString("name");
                int age = row.getInt("age");
                int sex = row.getInt("sex");
                System.out.println(">>>>>>>>>>  id=" + id + " name=" + name + " age=" + age + "sex = " + sex);
            }
        }
    }

修改數據

 /**
     * 修改表的數據
     */
    @Test
    public void updateData() throws KuduException {
        //修改表的數據需要一個 kuduSession 對象
        KuduSession kuduSession = kuduClient.newSession();
        kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC);
        //需要使用 kuduTable 來構建 Operation 的子類實例對象
        KuduTable kuduTable = kuduClient.openTable(tableName);
        //Update update = kuduTable.newUpdate();
        //如果 id 存在就表示修改,不存在就新增
        Upsert upsert = kuduTable.newUpsert();
        PartialRow row = upsert.getRow();
        row.addInt("id", 100);
        row.addString("name", "zhangsan-100");
        row.addInt("age", 100);
        row.addInt("sex", 0);
        //最後實現執行數據的修改操作
        kuduSession.apply(upsert);
    }

刪除數據

    /**
     * 刪除數據
     */
    @Test
    public void deleteData() throws KuduException {
        //刪除表的數據需要一個 kuduSession 對象
        KuduSession kuduSession = kuduClient.newSession();
        kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC);
        //需要使用 kuduTable 來構建 Operation 的子類實例對象
        KuduTable kuduTable = kuduClient.openTable(tableName);
        Delete delete = kuduTable.newDelete();
        PartialRow row = delete.getRow();
        row.addInt("id", 100);
        kuduSession.apply(delete);//最後實現執行數據的刪除操作
    }

刪除表

@Test
    public void dropTable() throws KuduException {
        if (kuduClient.tableExists(tableName)) {
            kuduClient.deleteTable(tableName);
        }
    }

kudu 分區方式

Range 分區

image-20200504172754851

hash 分區

image-20200504172724012

混合分區

Hash and Range Partitioning

image-20200504172824882

Hash and Hash Partitioning

image-20200504172840512

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章