Java代码操作HBase
pom依赖,依赖版本要和软件一致
<dependencies>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-protocol</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>2.5.5</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-mapreduce</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-zookeeper</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>3.2.4</version>
</dependency>
</dependencies>
操作命名空间
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
private Connection connection;
private Admin admin;
@Before
public void connect() throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hadoop:2181");
connection = ConnectionFactory.createConnection(conf);
admin = connection.getAdmin();
}
@After
public void close() throws IOException {
if (admin != null) admin.close();
if (connection != null) connection.close();
}
@Test
public void createNamespace() throws IOException {
NamespaceDescriptor nd = NamespaceDescriptor.create("api").build();
admin.createNamespace(nd);
}
@Test
public void listNamespace() throws IOException {
String[] namespaces = admin.listNamespaces();
for (String namespace : namespaces) {
System.out.println(namespace);
}
}
@Test
public void dropNamespace() throws IOException {
admin.deleteNamespace("api");
}
操作表
private Connection connection;
private Admin admin;
private Table table;
@Test
public void createTable() throws Exception{
ColumnFamilyDescriptor cl1 = ColumnFamilyDescriptorBuilder.newBuilder("basic".getBytes()).build();
ColumnFamilyDescriptor cl2 = ColumnFamilyDescriptorBuilder.newBuilder("info".getBytes()).build();
TableDescriptor table1 = TableDescriptorBuilder.newBuilder(TableName.valueOf("user"))
.setColumnFamily(cl1)
.setColumnFamily(cl2)
.build();
admin.createTable(table1);
}
@Test
public void append() throws IOException {
Append append = new Append("u1".getBytes());
byte[] basic = "basic".getBytes();
append.addColumn(basic,"name".getBytes(),"hsk".getBytes());
append.addColumn(basic,"age".getBytes(),"15".getBytes());
byte[] info = "info".getBytes();
append.addColumn(info,"phone".getBytes(),"nonono".getBytes());
append.addColumn(info,"address".getBytes(),"beijing".getBytes());
table.append(append);
}
@Test
public void putMillions() throws Exception{
ArrayList<Put> list = new ArrayList<Put>();
long start = System.currentTimeMillis();
byte[] basic = "basic".getBytes();
byte[] password = "passWoed".getBytes();
for (int i = 0; i < 1000000; i++) {
byte[] rowKey = ("m" + i).getBytes();
Put put = new Put(rowKey);
put.addColumn(basic,password,reducePassword());
list.add(put);
if(i==10000){
table.put(list);
list.clear();
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
@Test
public void delete() throws Exception{
Delete delete = new Delete("u1".getBytes());
delete.addFamily("basic".getBytes());
table.delete(delete);
}
@Test
public void deleteAll() throws Exception{
Delete delete = new Delete("u1".getBytes());
table.delete(delete);
}
@Test
public void getCell() throws Exception{
Get get = new Get("u1".getBytes());
get.addColumn("basic".getBytes() ,"name".getBytes());
Result result = table.get(get);
byte[] value = result.getValue("basic".getBytes(), "name".getBytes());
System.out.println(new String(value));
}
@Test
public void getColumn() throws Exception{
Get get = new Get("u1".getBytes());
get.addFamily("basic".getBytes());
Result result = table.get(get);
NavigableMap<byte[], byte[]> familyMap = result.getFamilyMap("basic".getBytes());
for (Map.Entry<byte[], byte[]> entry : familyMap.entrySet()) {
System.out.println(new String(entry.getKey())+" "+new String(entry.getValue()));
}
}
@Test
public void getLineByFor() throws IOException{
Get get = new Get("u1".getBytes());
Result result = table.get(get);
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = result.getMap();
for (Map.Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> navigableMapEntry : map.entrySet()) {
System.out.println("Column Family\t:"+new String(navigableMapEntry.getKey()));
for (Map.Entry<byte[], NavigableMap<Long, byte[]>> mapEntry : navigableMapEntry.getValue().entrySet()) {
System.out.println("Column Name\t:"+new String(mapEntry.getKey()));
for (Map.Entry<Long, byte[]> longEntry : mapEntry.getValue().entrySet()) {
System.out.println("\t\tTimeStamp\t:"+longEntry.getKey());
System.out.println("\t\tCellValue\t:"+new String(longEntry.getValue()));
}
}
}
}
@Test
public void getLineByLambda() throws IOException{
Get get = new Get("u1".getBytes());
Result result = table.get(get);
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> row = result.getMap();
row.forEach((key,value) ->{
System.out.println("Column Family\t:"+new String(key));
value.forEach((keyy,valuee)->{
System.out.println("\tColumn Name\t:"+new String(keyy));
valuee.forEach((keyyy,valueee)->{
System.out.println("\t\tTimstamp\t:"+keyyy+ "\t\tvalue\t:"+new String(valueee));
});
});
});
}
@Test
public void scan() throws IOException{
Scan scan = new Scan();
ResultScanner results = table.getScanner(scan);
Iterator<Result> iterator = results.iterator();
while(iterator.hasNext() ){
Result next = iterator.next();
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> row = next.getMap();
row.forEach((key,value) ->{
System.out.println("Column Family\t:"+new String(key));
value.forEach((keyy,valuee)->{
System.out.println("\tColumn Name\t:"+new String(keyy));
valuee.forEach((keyyy,valueee)->{
System.out.println("\t\tTimstamp\t:"+keyyy+ "\t\tvalue\t:"+new String(valueee));
});
});
});
System.out.println("----------------------------------------------------------");
NavigableMap<byte[], byte[]> familyMap = next.getFamilyMap("basic".getBytes());
familyMap.forEach((k,v)->{
System.out.println("ColumnName"+new String(k)+"\t--"+new String(v));
});
System.out.println("----------------------------------------------------------");
byte[] value = next.getValue("basic".getBytes(), "password".getBytes());
System.out.println(value == null ? "null":new String(value));
}
}
@Test
public void filter() throws IOException {
Scan scan = new Scan();
Filter f = new ValueFilter(CompareOperator.EQUAL, new RegexStringComparator(".*A.*"));
scan.setFilter(f);
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
byte[] value = r.getValue("basic".getBytes(), "passWoed".getBytes());
System.out.println(value == null ? "null" : new String(value));
}
}
public byte[] reducePassword(){
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 6; i++) {
stringBuilder.append((char)(Math.random()*26+65));
}
return stringBuilder.toString().getBytes();
}