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 ( ) ;
}