JUnit 4 开始使用 Java 5 中的注解,常用的几个 注解为: @BeforeClass:针对所有测试,只执行一次,且必须为static void @Before:初始化方法 @Test:测试方法,在这里可以测试期望异常和超时时间 @After:释放资源 @AfterClass:针对所有测试,只执行一次,且必须为static void @Ignore:忽略的测试方法
我们的Hbase API只是在执行每个方法,所以我们只用上面的三种方法(@Before@Test@After)就足够了。
下面是代码实现
package test
.api
import java
.io.IOException
import java
.util.ArrayList
import java
.util.Iterator
import java
.util.List
import org
.apache.hadoop.conf.Configuration
import org
.apache.hadoop.hbase.Cell
import org
.apache.hadoop.hbase.CellUtil
import org
.apache.hadoop.hbase.TableName
import org
.apache.hadoop.hbase.client.Connection
import org
.apache.hadoop.hbase.client.ConnectionFactory
import org
.apache.hadoop.hbase.client.Delete
import org
.apache.hadoop.hbase.client.Get
import org
.apache.hadoop.hbase.client.Put
import org
.apache.hadoop.hbase.client.Result
import org
.apache.hadoop.hbase.client.ResultScanner
import org
.apache.hadoop.hbase.client.Row
import org
.apache.hadoop.hbase.client.Table
import org
.apache.hadoop.hbase.util.Bytes
import org
.junit.After
import org
.junit.Before
import org
.junit.Test
public class api {
Connection conn
@Before
public void init() {
//配置参数信息
Configuration conf = new Configuration()
conf
.set(
"hbase.zookeeper.quorum",
"oracle")
conf
.set(
"hbase.rootdir",
"hdfs://oracle:9000/hbase")
//建立链接,这里需要注意的是我已经在电脑中的host文件添加了集群的主机名对应的IP
//若没有添加,
"oralce"的位置还是应该写成IP地址
try {
conn = ConnectionFactory
.createConnection(conf)
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@After
public void close() {
try {
conn
.close()
} catch (IOException e) {
e
.printStackTrace()
}
}
@Test
public void testPut() {
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
Put member = new Put(Bytes
.toBytes(
"Jerry"))
member
.addColumn(Bytes
.toBytes(
"students"), Bytes
.toBytes(
"sex"), Bytes
.toBytes(
"F"))
table
.put(member)
table
.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testPutList() {
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
List<Put> members = new ArrayList<Put>()
Put Sage = new Put(Bytes
.toBytes(
"Jerry"))
Sage
.addColumn(Bytes
.toBytes(
"students"), Bytes
.toBytes(
"age"), Bytes
.toBytes(
"14"))
Put Tsex = new Put(Bytes
.toBytes(
"Mery"))
Tsex
.addColumn(Bytes
.toBytes(
"teachers"), Bytes
.toBytes(
"sex"), Bytes
.toBytes(
"F"))
Put Tage = new Put(Bytes
.toBytes(
"Mery"))
Tage
.addColumn(Bytes
.toBytes(
"teachers"), Bytes
.toBytes(
"age"), Bytes
.toBytes(
"30"))
members
.add(Sage)
members
.add(Tsex)
members
.add(Tage)
table
.put(members)
table
.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
//怎么感觉这段有点问题啊,因为timestamp的存在,好像每次都能加上
@Test
public void testCheckAndPut(){
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
Put member = new Put(Bytes
.toBytes(
"Mery"))
member
.addColumn(Bytes
.toBytes(
"teachers"), Bytes
.toBytes(
"sex"), Bytes
.toBytes(
"F"))
boolean result = table
.checkAndPut(Bytes
.toBytes(
"Mery"),Bytes
.toBytes(
"teachers"),
Bytes
.toBytes(
"sex"), Bytes
.toBytes(
"F"), member)
table
.close()
System
.out.println(result)
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testDelete(){
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
Delete member = new Delete(Bytes
.toBytes(
"Jerry"))
//member
.deleteColumn(Bytes
.toBytes(
"students"), Bytes
.toBytes(
"age"))
table
.delete(member)
table
.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testDeleteList(){
try {
Table table = conn
.getTable(TableName
.valueOf(
"table"))
Delete member1 = new Delete(Bytes
.toBytes(
"Jerry"))
member1
.addColumn(Bytes
.toBytes(
"students"), Bytes
.toBytes(
"sex"))
Delete member2 = new Delete(Bytes
.toBytes(
"Merry"))
member2
.addColumn(Bytes
.toBytes(
"teacher"), Bytes
.toBytes(
"age"))
List<Delete> members = new ArrayList<Delete>()
members
.add(member1)
members
.add(member2)
table
.delete(members)
table
.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testCheckAndDelete(){
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
Delete member = new Delete(Bytes
.toBytes(
"Mery"))
member
.addColumn(Bytes
.toBytes(
"teachers"), Bytes
.toBytes(
"age"))
boolean result = table
.checkAndDelete(Bytes
.toBytes(
"Mery"), Bytes
.toBytes(
"teachers"),
Bytes
.toBytes(
"age"), Bytes
.toBytes(
"30"), member)
System
.out.println(result)
table
.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testGet(){
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
Get get = new Get(Bytes
.toBytes(
"Jerry"))
get
.addFamily(Bytes
.toBytes(
"students"))
Result result = table
.get(get)
List<Cell> cells = result
.listCells()
for (Cell cell : cells) {
String qualifier = Bytes
.toString(CellUtil
.cloneQualifier(cell))
//System
.out.println(qualifier)
String string =Bytes
.toString(CellUtil
.cloneValue(cell))
System
.out.println(
"qualifier:"+qualifier+
"\t"+
"value:"+string)
}
table
.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testGetList(){
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
Get get1 = new Get(Bytes
.toBytes(
"Jerry"))
get1
.addFamily(Bytes
.toBytes(
"students"))
Get get2 = new Get(Bytes
.toBytes(
"Mery"))
get2
.addFamily(Bytes
.toBytes(
"teachers"))
List<Get> gets = new ArrayList<Get>()
gets
.add(get1)
gets
.add(get2)
Result[] result = table
.get(gets)
for (Result result2 : result) {
List<Cell> cells = result2
.listCells()
for (Cell cell : cells) {
String qualifier = Bytes
.toString(CellUtil
.cloneQualifier(cell))
//System
.out.println(qualifier)
String string =Bytes
.toString(CellUtil
.cloneValue(cell))
System
.out.println(
"qualifier:"+qualifier+
"\t"+
"value:"+string)
}
}
table
.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testBatch(){
try {
Table table = conn
.getTable(TableName
.valueOf(
"school"))
List<Row> actions = new ArrayList<Row>()
actions
.add(new Put(Bytes
.toBytes(
"Jerry"))
.addColumn(Bytes
.toBytes(
"students"),
Bytes
.toBytes(
"sex"), Bytes
.toBytes(
"F")))
actions
.add(new Delete(Bytes
.toBytes(
"Jerry"))
.addColumn(Bytes
.toBytes(
"students"),
Bytes
.toBytes(
"sex")))
Object[] results = new Object[actions
.size()]
table
.batch(actions, results)
for (int i =
0
System
.out.println(
"Result[" + i +
"]: type = " +
results[i]
.getClass()
.getSimpleName() +
"; " + results[i])
}
table
.close()
} catch (Exception e) {
// TODO Auto-generated catch block
e
.printStackTrace()
}
}
@Test
public void testScan() {//扫描
try {
Table table = conn
.getTable(TableName
.valueOf(
"shool"))
//没有指定起始行,则从表的起始位置开始获取
ResultScanner resultScanner = table
.getScanner(Bytes
.toBytes(
"Mery"))
Iterator<Result> iter = resultScanner
.iterator()
while(iter
.hasNext()) {
Result result = iter
.next()
System
.out.println(new String(result
.value()))
}
resultScanner
.close()
table
.close()
} catch (Exception e) {
e
.printStackTrace()
}
}
}