创建一个maven项目
修改配置文件pom.xml,添加依赖
<dependencies>
<dependency>
<!--zookeeper版本-->
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<!--Hadoop版本-->
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<!--hbase版本-->
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>2.2.5</version>
</dependency>
<!-- 使用mr程序操作hbase 数据的导入 -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-mapreduce</artifactId>
<version>2.2.5</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<!-- phoenix 凤凰 用来整合Hbase的工具 -->
<!-- <dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>5.0.0-HBase-2.0</version>
</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<!--<mainClass>util.Microseer</mainClass> -->
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
HbaseUtils
package com.doit.Utils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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.Table;
import java.io.IOException;
public class HbaseUtils {
//获取Hbase的管理对象
public static Admin getAdmin() throws IOException {
Connection conn = getHbaseConnection();
//DDL 和 TOOLS 有关的操作在admin对象中
Admin admin = conn.getAdmin();
return admin;
}
//获取表对象 可以对表进行DML语言操作
public static Table getTable(String name) throws IOException {
Connection conn = getHbaseConnection();
Table table = conn.getTable(TableName.valueOf(name));
return table;
}
//获取Hbase的连接对象
public static Connection getHbaseConnection() throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","linux01:2181,linux02:2181,linux03:2181");
Connection conn = ConnectionFactory.createConnection(conf);
return conn;
}
}
获取系统中所有的表(list)
public class Demo02 {
public static void main(String[] args) throws Exception {
Admin admin = getAdmin();
TableName[] tablename = admin.listTableNames(); // 获取系统中所有的表
// TableName[] tablename = admin.listTableNamesByNamespace("default");
for (TableName tableName : tablename) {
byte[] name = tableName.getName();
byte[] namespace = tableName.getNamespace(); //名称空间
byte[] qualifier = tableName.getQualifier();
System.out.println(new String(name));
System.out.println(new String(namespace));
System.out.println(new String(qualifier));
}
admin.close();
}
}
创建表(一个列族)
/**
* 创建表和一个列族
* @throws IOException
*/
private static void createTableWithOneColumnFamily() throws IOException {
Admin admin = HbaseUtils.getAdmin();
//建表 表名
TableName tableName = TableName.valueOf("people");
//表的描述构建器
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);
//列族的构建器
ColumnFamilyDescriptorBuilder build = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf"));
//构建列族描述器
ColumnFamilyDescriptor cf = build.build();
builder.setColumnFamily(cf);
//表的描述器
TableDescriptor tableBuild = builder.build();
admin.createTable(tableBuild);
admin.close();
}
创建表(多个列族)
/**
* 创建表且添加多个列族
* @throws IOException
* @throws HBaseException
*/
private static void createTableWithMoreCF() throws IOException, HBaseException {
Admin admin = HbaseUtils.getAdmin();
// 表的描述构建器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("em"));
//列族的构建器
ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("info"));
// 设置列族的属性
cfBuilder.setTimeToLive("FOREVER");
cfBuilder.setMaxVersions(3);
ColumnFamilyDescriptor cf = cfBuilder.build();
//创建extr列族
ColumnFamilyDescriptorBuilder cf2Builder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("extr"));
ColumnFamilyDescriptor cf2 = cf2Builder.build();
//创建cf3列族
ColumnFamilyDescriptorBuilder cf3Builder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf3"));
ColumnFamilyDescriptor cf3 = cf3Builder.build();
List<ColumnFamilyDescriptor> list = new ArrayList<>();
list.add(cf);
list.add(cf2);
list.add(cf3);
//添加列族
tableDescriptorBuilder.setColumnFamilies(list);
TableDescriptor build = tableDescriptorBuilder.build();
admin.createTable(build);
admin.close();
}
创建预分region
private static void regionSplits() throws IOException {
Admin admin = HbaseUtils.getAdmin();
//表的描述器构建器
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(TableName.valueOf("people"));
//列族描述器构建器
ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf"));
//列族描述器
ColumnFamilyDescriptor cf = cfBuilder.build();
builder.setColumnFamily(cf);
//表的描述器
TableDescriptor build = builder.build();
/**
* 预分region表: 对表的数据进行合理的规划 , 将数据存储不同的region中 避免插入热点
* 参数一 表的描述器
* 参数二 预分region的splitKey
*/
byte[][] splits = new byte[][]{"g".getBytes(),"o".getBytes()};
admin.createTable(build,splits);
admin.close();
}