当前位置 博文首页 > ChinaManor的博客:Kudu案例库V1.0版

    ChinaManor的博客:Kudu案例库V1.0版

    作者:[db:作者] 时间:2021-07-06 21:38

    项目案例库

    案例一:Java 操作 Kudu之创建KuduClient实例

    pom.xml

    <!-- 指定仓库位置,依次为aliyun、cloudera和jboss仓库 -->
    <repositories>
        <repository>
            <id>aliyun</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
        <repository>
            <id>jboss</id>
            <url>http://repository.jboss.com/nexus/content/groups/public</url>
        </repository>
    </repositories>
    
    <!-- 版本属性 -->
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <kudu.version>1.9.0-cdh6.2.1</kudu.version>
        <junit.version>4.12</junit.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.apache.kudu</groupId>
            <artifactId>kudu-client</artifactId>
            <version>${kudu.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.kudu</groupId>
            <artifactId>kudu-client-tools</artifactId>
            <version>${kudu.version}</version>
        </dependency>
    
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    代码实现

    	// 定声明KuduClient实例对象
    	private KuduClient kuduClient ;
    
    	@Before
    	public void init() {
    		String masterAddresses = "node2.itcast.cn:7051" ;
    		// 构建KuduClient实例对象,连接Kudu集群(Kudu Master)
    		kuduClient = new KuduClient.KuduClientBuilder(masterAddresses)
    				.defaultSocketReadTimeoutMs(10000) // 设置连接Socket超时时间
    				.defaultOperationTimeoutMs(10000)
    				.build();
    	}
    

    案例二:Java 操作 Kudu之创建KuduTable

    /**
    	 * 用于构建Kudu表中每列的字段信息Schema
    	 *
    	 * @param name 字段名称
    	 * @param type 字段类型
    	 * @param isKey 是否为Key
    	 * @return ColumnSchema对象
    	 */
    	private ColumnSchema newColumnSchema(String name, Type type, boolean isKey) {
    		// 创建ColumnSchemaBuilder实例对象
    		ColumnSchema.ColumnSchemaBuilder column = new ColumnSchema.ColumnSchemaBuilder(name, type);
    		// 设置是否为主键
    		column.key(isKey) ;
    		// 构建 ColumnSchema
    		return column.build() ;
    	}
    
    	/**
    	 * 创建Kudu中的表,表的结构如下所示:
    	 create table itcast_users(
    		 id int,
    		 name string,
    		 age byte,
    		 primary key(id)
    	 )
    	 paritition by hash(id) partitions 3
    	 stored as kudu ;
    	 */
    	@Test
    	public void createKuduTable() throws KuduException {
    		// a. 定义Kudu表的Schema信息
    		// 定义Kudu表每列Schema信息
    		List<ColumnSchema> columns = new ArrayList<>();
    		columns.add(new ColumnSchema.ColumnSchemaBuilder("id", Type.INT32).key(true).build());
    		columns.add(newColumnSchema("name", Type.STRING, false));
    		columns.add(newColumnSchema("age", Type.INT8, false));
    
    		Schema schema = new Schema(columns) ;
    
    		// b. 定义Kudu表的属性,分区策略,分区数目和副本数
    		CreateTableOptions options = new CreateTableOptions() ;
    		// 设置分区策略
    		options.addHashPartitions(Collections.singletonList("id"), 3);
    		// 设置副本数目
    		options.setNumReplicas(1) ;
    
    		/*
    		public KuduTable createTable(String name, Schema schema, CreateTableOptions builder)
    		 */
    		KuduTable kuduTable = kuduClient.createTable("itcast_users", schema, options);
    		System.out.println("TableId: " + kuduTable.getTableId());
    	}
    

    案例三:Java 操作 Kudu之修改表中字段,增加列:address,String

    /**
    	 * 对Kudu中表进行修改,增加列:address,String
    	 */
    	@Test
    	public void alterKuduTableAddColumn() throws KuduException {
    		// 添加一列:gender
    		AlterTableOptions ato = new AlterTableOptions() ;
    		//ato.addColumn(newColumnSchema("gender", Type.STRING, false)) ;
    		ato.addColumn("gender", Type.STRING, "male") ;
    
    		//  public AlterTableResponse alterTable(String name, AlterTableOptions ato)
    		AlterTableResponse response = kuduClient.alterTable("itcast_users", ato);
    		System.out.println(response.getTableId());
    	}
    

    案例四:对Kudu表进行修改,删除列:address

    	@Test
    	public void alterKuduTableDropColumn() throws KuduException {
    		// 删除:gender
    		AlterTableOptions ato = new AlterTableOptions() ;
    		ato.dropColumn("gender") ;
    
    		//  public AlterTableResponse alterTable(String name, AlterTableOptions ato)
    		AlterTableResponse response = kuduClient.alterTable("itcast_users", ato);
    		System.out.println(response.getTableId());
    	}
    

    案例五:对Kudu表中进行插入数据

    将数据插入到Kudu Table中: INSERT INTO (id, name, age) VALUES (1001, "zhangsan", 26)
    
    	@Test
    	public void insertKuduDataSingle() throws KuduException {
    		// a. 获取Kudu表的句柄,传递表的名称
    		KuduTable kuduTable = kuduClient.openTable("itcast_users") ;
    
    		// b. 获取KuduSession会话对象
    		KuduSession kuduSession = kuduClient.newSession();
    
    		// c. 构建Insert插入对象
    		Insert insert = kuduTable.newInsert();
    		// 获取Row对象,设置插入的值
    		PartialRow row = insert.getRow();
    		row.addInt("id", 1);
    		row.addString("name", "itcast");
    		row.addByte("age", (byte)15)
    
    下一篇:没有了