大数据:Java操作KUDU

新建maven文件,pom中添加依赖

  •         <!-- https://mvnrepository.com/artifact/org.apache.kudu/kudu-client -->
            <dependency>
                <groupId>org.apache.kudu</groupId>
                <artifactId>kudu-client</artifactId>
                <version>1.7.1</version>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.kudu/kudu-client-tools -->
            <dependency>
                <groupId>org.apache.kudu</groupId>
                <artifactId>kudu-client-tools</artifactId>
                <version>1.7.1</version>
            </dependency>

主类:

  • public class JavaTestKudu {
    
        //创建KuduClient客户端对象
        private static KuduClient kuduClient;
        //定义表名
        private static String tableName = "表名";
        //初始化方法
        @Before
        public void init() {
            //指定master主机地址
            String masterAddress = "node1,node2,node3";
            //建立kudu数据库连接
            kuduClient = new KuduClient.KuduClientBuilder(masterAddress).defaultSocketReadTimeoutMs(6000).build();
        }
    
        //构建表schema的字段信息  字段名称 数据类型 是否为主键
        public ColumnSchema newColumn(String name, Type type, boolean isKey) {
            //字段构建对象
            ColumnSchema.ColumnSchemaBuilder column = new ColumnSchema.ColumnSchemaBuilder(name, type);
            //设置主键字段
            column.key(isKey);
            return column.build();
        }
    }

测试方法:建表

  • @Test
        public void createTable() throws KuduException {
            //设置表的schema
            List<ColumnSchema> columns = new LinkedList<ColumnSchema>();
            //新建并添加新的字段(字段名,类型,是否主键)
            columns.add(newColumn("Id", Type.INT32, true));
            columns.add(newColumn("Name", Type.STRING, false));
            columns.add(newColumn("Gender", Type.STRING, false));
            columns.add(newColumn("Tel", Type.STRING, false));
            Schema schema = new Schema(columns);
            //创建表选项:副本 + 分区(hash,range,...)
            CreateTableOptions tableOptions = new CreateTableOptions();
            //设置表副本个数
            tableOptions.setNumReplicas(1);
            //分区设置
            LinkedList<String> list = new LinkedList<String>();
            list.add("Id");
            //类型1:设置range分区
            //tableOptions.setRangePartitionColumns(list);
            //类型2:设置hash分区和分区的数量
            tableOptions.addHashPartitions(list, 3);
            try {
                kuduClient.createTable("表名", schema, tableOptions);
            } catch (Exception e) {
                e.printStackTrace();
            }
            kuduClient.close();
        }

测试方法:插入操作

  •     //插入数据insert
        @Test
        public void loadData() throws KuduException {
            //打开表
            KuduTable kuduTable = kuduClient.openTable(tableName);
            //创建KuduSession对象 kudu必须通过KuduSession写入数据
            KuduSession kuduSession = kuduClient.newSession();
            //采用flush方式 手动刷新
            kuduSession.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
            kuduSession.setMutationBufferSpace(3000);
            //准备数据
            for (int i = 1; i <= 10; i++) {
                Insert insert = kuduTable.newInsert();
                //设置字段的内容
                insert.getRow().addInt(":Id", i);
                insert.getRow().addString("Name", "名字" + i);
                insert.getRow().addString("Gender", "male");
                insert.getRow().addString("Tel", "123" + i);
                kuduSession.flush();
                kuduSession.apply(insert);
            }
            kuduSession.close();
            kuduClient.close();
        }

测试方法:查询数据(全部)

  •     //查询数据
        @Test
        public void queryData() throws KuduException {
            //打开表
            KuduTable kuduTable = kuduClient.openTable(tableName);
            //获取scanner扫描器
            KuduScanner.KuduScannerBuilder scannerBuilder = kuduClient.newScannerBuilder(kuduTable);
            KuduScanner scanner = scannerBuilder.build();
            //遍历
            while (scanner.hasMoreRows()) {
                RowResultIterator rowResults = scanner.nextRows();
                while (rowResults.hasNext()) {
                    RowResult result = rowResults.next();
                    int Id = result.getInt("Id");
                    String name = result.getString("Name");
                    String gender = result.getString("Gender");
                    String Tel = result.getString("Tel");
                    System.out.print("Id:" + Id + " ");
                    System.out.print("name:" + name + " ");
                    System.out.print("gender:" + gender + " ");
                    System.out.println("Tel:" + Tel);
                }
            }
            //关闭
            scanner.close();
            kuduClient.close();
        }

测试方法:修改数据

  •     //修改数据
        @Test
        public void updateData() throws KuduException {
            //打开表
            KuduTable kuduTable = kuduClient.openTable(tableName);
            //构建kuduSession对象
            KuduSession kuduSession = kuduClient.newSession();
            //设置刷新数据模式,自动提交
            kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_BACKGROUND);
            //更新数据需要获取Update对象
            Update update = kuduTable.newUpdate();
            //获取row对象
            PartialRow row = update.getRow();
            //设置要更新的数据信息
            row.addInt("Id", 1);
            row.addString("Name", "kobe");
            //操作这个update对象
            kuduSession.apply(update);
            kuduSession.close();
        }

测试方法:删除数据

  •     //删除数据
        @Test
        public void deleteData() throws KuduException {
            //打开表
            KuduTable kuduTable = kuduClient.openTable(tableName);
            KuduSession kuduSession = kuduClient.newSession();
            //获取Delete对象
            Delete delete = kuduTable.newDelete();
            //构建要删除的行对象
            PartialRow row = delete.getRow();
            //设置删除数据的条件 删除id=2这行
            row.addInt("Id", 2);
            kuduSession.flush();
            kuduSession.apply(delete);
            kuduSession.close();
            kuduClient.close();
        }

测试方法:删除表

  •     //删除表
        @Test
        public void dropTable() throws KuduException {
            //删除表
            DeleteTableResponse response = kuduClient.deleteTable(tableName);
            //关闭客户端连接
            kuduClient.close();
        }
    

猜你喜欢

转载自blog.csdn.net/JinChao94/article/details/109640015