HBase基础编程
一、实验目标
- 掌握如何通过HBase shell命令来设计HBase表结构实例,从而理解HBase的列式存储结构
- 掌 握 java编程创建HBase表和删除HBase表。
二、实验要求及注意事项
- 给出每个实验的主要实验步骤、实现代码和测试效果截图。
- 对本次实验工作进行全面的总结分析。
- 所有程序需要本地测试和集群测试,给出相应截图。
- 建议工程名,类名或包名等做适当修改,显示个人学号或者姓名
三、实验内容及步骤
实验任务1:HBase表设计。通过HBase shell命令来设计并创建三张相关的表,其中后两张表可以关联起来,例如店铺与商品表。建议自拟表名和表内容。
主要实现步骤和运行效果图:
完整程序
create 'shop','info','item' put 'shop','s_01','item:item_id','i_01' put 'shop','s_01','info:name','iphone' put 'shop', 's_01','info:address','tianmao' put 'shop','s_01','info:regdate','11-11' create 'Item','info','item' put 'Item','i_01','item:shop_id','s_01' put 'Item','i_01','info:name','iphone' put 'Item','i_01','info:price','4534' put 'Item','i_01','info:detail','ios10.3.2' put 'Item','i_01','info:title','phoneOfApple'
程序分析
这是一组HBase的命令,主要是创建和操作两个表格——‘shop’和’Item’。
首先,在’shop’表格中添加一行数据,该行的行键为’s_01’,列限定符为’item:item_id’,值为’i_01’。然后,再在’shop’表格中添加三个列:‘info:name’,值为’iphone’;‘info:address’,值为’tianmao’;‘info:regdate’,值为’11-11’。
接下来,创建’Item’表格,并添加一行数据。该行的行键为’i_01’,列限定符为’item:shop_id’,值为’s_01’。然后,再添加四个列:‘info:name’,值为’iphone’;‘info:price’,值为’4534’;‘info:detail’,值为’ios10.3.2’;‘info:title’,值为’phoneOfApple’。
运行结果
实验任务2:使用Java编程创建表和删除表,表名和列族自拟。
主要实现步骤和运行效果图:
完整程序
WjwCreateTable
package hbase; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.conf.*; import org.apache.hadoop.hbase.*; public class WjwCreateTable { static Configuration conf; static{ conf = new Configuration(); } public static void createtb(String tbname, String[] tbfamily) throws Exception{ HBaseAdmin admin = new HBaseAdmin(conf); HTableDescriptor hd = new HTableDescriptor(tbname); for(int i=0;i<tbfamily.length;i++){ hd.addFamily(new HColumnDescriptor(tbname)); } if(admin.tableExists(tbname)){ System.out.println(tbname); }else{ admin.createTable(hd); System.out.println("create table success"); } } public static void deltb(String tbname) throws Exception{ HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tbname); admin.deleteTable(tbname); if(admin.tableExists(tbname)){ System.out.println(tbname+"is not exists"); }else{ System.out.println("success del"); } } public static void main(String[] args) { // TODO Auto-generated method stub String str[] = {"cf1"}; createtb("wjw01", str); } }
这是一个使用HBase Java API创建和删除表格的示例程序。
首先,在静态代码块中创建了一个Configuration对象,这是一个包含HBase的配置信息的对象。
然后,定义了一个名为’createtb’的方法,该方法接收两个参数:表格名和表格列族名。在该方法中,首先通过HBaseAdmin类创建了一个HBaseAdmin对象,然后通过HTableDescriptor类创建了一个HTableDescriptor对象,用于描述表格的结构。接着,通过循环遍历表格列族名数组,添加每个列族并将其加入HTableDescriptor对象中。最后,判断该表是否已经存在,如果存在则打印出表格名,否则调用HBaseAdmin的createTable方法创建表格,并打印出"create table success"。
然后,定义了一个名为’deltb’的方法,该方法接收一个参数:表格名。在该方法中,同样通过HBaseAdmin类创建了一个HBaseAdmin对象,并调用其disableTable方法禁用该表格,然后调用其deleteTable方法删除该表格。最后,判断该表是否已经被删除,如果未删除则打印出表格名和"is not exists",否则打印出"success del"。
最后,在main方法中调用createtb方法创建了一个名为"wjw01",列族名为"cf1"的表格。
WjwDeleteTable
package hbase; import java. io. IOException; import org. apache. hadoop. conf.*; import org. apache. hadoop. hbase.HBaseConfiguration; import org. apache. hadoop. hbase. MasterNotRunningException; import org. apache. hadoop. hbase. ZooKeeperConnectionException; import org. apache. hadoop. hbase. client. HBaseAdmin; import org. apache. hadoop. hbase. client. HTable; public class WjwDeleteTable { public Configuration conf; public HTable table; public HBaseAdmin admin; public void HBaseTest() throws MasterNotRunningException, ZooKeeperConnectionException, IOException { conf = HBaseConfiguration. create(); conf. set("hbase. master", "master:60000"); System. out. println(conf. get("hbase. master")); conf. set("hadoop. zkk. property. clientPort", "2181"); System. out. println(conf. get("hadoop. zkk. property. clientPort")); conf. set("hbase. zookeeper. quorum", "master"); System. out. println(conf. get("hbase. zookeeper. quorum")); admin= new HBaseAdmin(conf); table = new HTable(conf, "test01"); } public static void main(String[] args) throws Exception { WJW02 hc = new WjwDeleteTable(); hc. HBaseTest(); } }
这是一个使用HBase Java API删除表的示例程序。
首先,在HBaseTest方法中创建了一个Configuration对象,然后通过该对象设置了HBase集群的master和zookeeper相关参数,包括hbase.master、hadoop.zkk.property.clientPort和hbase.zookeeper.quorum。然后,创建了一个HBaseAdmin对象和一个HTable对象。
接着,在main方法中创建了一个WjwDeleteTable对象,并调用其HBaseTest方法进行HBase连接测试。
运行结果