分享

hbase编程:Eclipse远程连接创建hbase表以及填充列与列数据


问题导读
1.如何通过Java ap创建表?
2.如何对已存在的表插入列以及列值?





环境:
hadoop2.2
hbase0.96
环境搭建文档:
hadoop2.2完全分布式最新高可靠安装文档
hbase 0.96整合到hadoop2.2三个节点全分布式安装高可靠文档








远程创建表与数据,这是在hbase开发环境搭建及运行hbase小实例(HBase 0.98.3新api)基础上一个基础,我们创建表之后,该如何填充数据,

我们看下面代码.首先实例化HTable
HTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel负责跟记录相关的操作如增删改查等
HTable 表已经存在,我们该如何填充列,如何填充列族
(1)获取所有列

HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 获取所有的列族
(2)获取所有列之后,如何添加列
put.add(Bytes.toBytes(familyName),Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));
上面三个字段:分别为列族名,列名、列值

那么下面函数具体是怎么实现的那?
1.首先是通过createTable(); 创建blog表,blog表中有一个列族article
2.我们要插入的是
列名 title
列值AboutYunArticle





看到上面该如何实现,下面贴上代码

  1. package www.aboutyun.com;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.hbase.HBaseConfiguration;
  5. import org.apache.hadoop.hbase.HColumnDescriptor;
  6. import org.apache.hadoop.hbase.HTableDescriptor;
  7. import org.apache.hadoop.hbase.MasterNotRunningException;
  8. import org.apache.hadoop.hbase.TableName;
  9. import org.apache.hadoop.hbase.ZooKeeperConnectionException;
  10. import org.apache.hadoop.hbase.client.HBaseAdmin;
  11. import org.apache.hadoop.hbase.client.HTable;
  12. import org.apache.hadoop.hbase.client.Put;
  13. import org.apache.hadoop.hbase.util.Bytes;
  14. public class testHbase {
  15.         private static Configuration conf = null;
  16.         static {
  17.                 conf = HBaseConfiguration.create();
  18.                 conf.set("hbase.zookeeper.quorum", "master");// 使用eclipse时必须添加这个,否则无法定位master需要配置hosts
  19.                 conf.set("hbase.zookeeper.property.clientPort", "2181");
  20.         }
  21.         public static void main(String[] args) throws IOException {
  22.                 String[] cols = new String[1];
  23.                 String[] colsValue = new String[1];
  24.                 cols[0] = "title";
  25.                 colsValue[0] = "AboutYunArticle";
  26.                 // 创建表
  27.                 createTable();
  28.                 // 添加值
  29.                 addData("www.aboutyun.com", "blog", cols, colsValue);
  30.         }
  31.         private static void createTable() throws MasterNotRunningException,
  32.                         ZooKeeperConnectionException, IOException {
  33.                 HBaseAdmin admin = new HBaseAdmin(conf);// 新建一个数据库管理员//新api
  34.                 if (admin.tableExists(TableName.valueOf("LogTable"))) {
  35.                         System.out.println("table is not exist!");
  36.                         System.exit(0);
  37.                 } else {
  38.                         HTableDescriptor desc = new HTableDescriptor(
  39.                                         TableName.valueOf("blog"));
  40.                         desc.addFamily(new HColumnDescriptor("article"));
  41.                         admin.createTable(desc);
  42.                         admin.close();
  43.                         System.out.println("create table Success!");
  44.                 }
  45.         }
  46.         /*
  47.          * 为表添加数据(适合知道有多少列族的固定表)
  48.          *
  49.          * @rowKey rowKey
  50.          *
  51.          * @tableName 表名
  52.          *
  53.          * @column1 第一个列族列表
  54.          *
  55.          * @value1 第一个列的值的列表
  56.          *
  57.          */
  58.         private static void addData(String rowKey, String tableName,String[] column1, String[] value1) throws IOException {
  59.                 Put put = new Put(Bytes.toBytes(rowKey));// 设置rowkey
  60.                 HTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel负责跟记录相关的操作如增删改查等//
  61.                                                                                                                                         // 获取表
  62.                 HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 获取所有的列族
  63.                                 .getColumnFamilies();
  64.                 for (int i = 0; i < columnFamilies.length; i++) {
  65.                         String familyName = columnFamilies[i].getNameAsString(); // 获取列族名
  66.                         if (familyName.equals("article")) { // article列族put数据
  67.                                 for (int j = 0; j < column1.length; j++) {
  68.                                         put.add(Bytes.toBytes(familyName),
  69.                                                         Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));
  70.                                 }
  71.                         }
  72.                 }
  73.                 table.put(put);
  74.                 System.out.println("add data Success!");
  75.         }
  76. }
复制代码

下面为程序运行后结果
shuzi.png




已有(4)人评论

跳转到指定楼层
buildhappy 发表于 2014-10-14 09:43:40
sorry sorry  
刚才是端口写错了

点评

解决问题能力很强  发表于 2014-10-14 11:31
回复

使用道具 举报

buildhappy 发表于 2014-10-14 08:49:32
你好我现在搭建了有两个机器的集群,集群的HMaster、HQuorumPeer、hregionserver都正常启动。
但是用eclipse链接HBase时,一直提示错误: Session 0x0 for server null
ps:我用的是HBase自带的zookeeper
回复

使用道具 举报

stark_summer 发表于 2015-2-13 14:26:21
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条