zoukankan      html  css  js  c++  java
  • HBase的java客户端测试(一)---DDL操作

    测试准备

    【首先同步时间:】

    for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node "date -s '2017-12-30 21:32:30'";done

    【slave各节点启动zookeeper集群:】

    cd /software/zookeeper-3.4.10/bin/ && ./zkServer.sh start && cd - && jps

    【master01启动HDFS集群:】

    cd /software/ && start-dfs.sh && jps

    【master01启动HBase:】

    cd /software/hbase-1.2.6/bin && start-hbase.sh && jps

    【master02上启动HBase:】

    cd /software/hbase-1.2.6/bin && hbase-daemon.sh start master && jps

    如有节点启动出现故障:
    单独启动master:
    cd /software/hbase-1.2.6/bin && hbase-daemon.sh start master && jps
    单独启动regionserver:
    cd /software/hbase-1.2.6/bin && hbase-daemon.sh start regionserver && jps
    通过命令终端查看:
    hbase(main):009:0> status
    通过web终端查看:
    http://master01的IP地址:16010/

    【在主机CloudDeskTop导入java客户端开发所需jar包:】HBase1.2.6-All.zip

    测试目标:

     运用java代码编写程序操作HBase数据库,本次测试致力于对DDL语法的java客户端操作;

    测试代码:大数据学习交流QQ群:217770236 让我们一起学习大数据

      1 package com.mmzs.bigdata.hbase.ddl;
      2 
      3 import java.io.IOException;
      4 import java.util.Map;
      5 import java.util.Map.Entry;
      6 import java.util.Set;
      7 
      8 import org.apache.hadoop.conf.Configuration;
      9 import org.apache.hadoop.hbase.HBaseConfiguration;
     10 import org.apache.hadoop.hbase.HColumnDescriptor;
     11 import org.apache.hadoop.hbase.HTableDescriptor;
     12 import org.apache.hadoop.hbase.NamespaceDescriptor;
     13 import org.apache.hadoop.hbase.TableName;
     14 import org.apache.hadoop.hbase.TableNotFoundException;
     15 import org.apache.hadoop.hbase.client.Admin;
     16 import org.apache.hadoop.hbase.client.Connection;
     17 import org.apache.hadoop.hbase.client.ConnectionFactory;
     18 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
     19 
     20 /**
     21  * DDL:
     22  *     createTable|disableTable|deleteTable|modifyTable|modifyColumn|getTableDescriptor
     23  * 
     24  *  表空间——>表——>列族——>列(字段)——>列值(字段值)
     25  *  
     26  * @author hadoop
     27  *
     28  */
     29 public class DDLMain {
     30     /**
     31      * 操作HBase集群的客户端
     32      */
     33     private static Admin admin;//操作HBase集群的客户端
     34     
     35     static{
     36         //创建HBase配置
     37         Configuration conf = HBaseConfiguration.create();
     38         //要和hbase-site.xml中configuration配置的一样
     39         conf.set("hbase.zookeeper.quorum", "slave01:2181,slave02:2181,slave03:2181");
     40         //根据HBase配置获取集群路径
     41         Connection conn;
     42         try {
     43             conn = ConnectionFactory.createConnection(conf);
     44             admin = conn.getAdmin();
     45         } catch (IOException e) {
     46             e.printStackTrace();
     47         }
     48     }
     49 
     50     public static void main(String[] args) {
     51 //        createNamespace("mmzs02");
     52 //        try {
     53 //            createHTable("mmzs:myuser");
     54 //        } catch (IOException e) {
     55 //            e.printStackTrace();
     56 //        }
     57         existHTable("mmzs:myuser");
     58 //        modifyHTableByAddFamily("mmzs:myuser","attach00");
     59 //        modifyHTableByDelFamily("mmzs:myuser","attach00");
     60 //        modifyHTableByModFamily("mmzs:myuser","base",5);
     61         //deleteHTable("mmzs:myuser");
     62 //        iterateNameSpace();
     63         
     64         
     65         
     66     }
     67 
     68     /**
     69      * 创建表空间
     70      * @param namespaceNameStr
     71      * @throws IOException
     72      */
     73     public static void createNamespace(String namespaceNameStr){
     74         NamespaceDescriptor.Builder builder=NamespaceDescriptor.create(namespaceNameStr);
     75         NamespaceDescriptor nd=builder.build();
     76         try {
     77             admin.createNamespace(nd);
     78         } catch (IOException e) {
     79             e.printStackTrace();
     80         }
     81         
     82     }
     83     
     84     //删除表空间
     85     public static void deleteNamespace(String namespaceNameStr){
     86         try {
     87             admin.deleteNamespace(namespaceNameStr);
     88         } catch (IOException e) {
     89             e.printStackTrace();
     90         }
     91     }
     92     
     93 
     94     //创建HBase表
     95     public static void createHTable(String tabNameStr) throws IOException{ 
     96         //转化为表名
     97         TableName  tabname=TableName.valueOf(tabNameStr);
     98         //根据表名创建表结构
     99         HTableDescriptor htd = new HTableDescriptor(tabname);
    100         //定义列族名字“base”
    101         HColumnDescriptor base = new HColumnDescriptor("base");
    102         base.setMaxVersions(3);
    103         // 定义列族名字为”extra“
    104         HColumnDescriptor extra = new HColumnDescriptor("extra");
    105         extra.setMaxVersions(3);
    106         
    107         htd.addFamily(base);
    108         htd.addFamily(extra);
    109         try {
    110             admin.createTable(htd);
    111             
    112         } catch (IOException e) {
    113             e.printStackTrace();
    114         }
    115     }
    116     
    117     /**
    118      * 判断某表是否存在
    119      * @param tabNameStr
    120      */
    121     public static void existHTable(String tabNameStr){
    122         TableName tabName=TableName.valueOf(tabNameStr);
    123         Boolean flag = null;
    124         try {
    125             flag = admin.tableExists(tabName);
    126         } catch (IOException e) {
    127             e.printStackTrace();
    128         }
    129         if (flag) {
    130             System.out.println(tabName+"存在");
    131         } else {
    132             System.out.println(tabName+"不存在");
    133         }
    134     }
    135     
    136     //增加一个列族
    137     public static void modifyHTableByAddFamily(String tabNameStr,String familyName){
    138         //转化为表名
    139         TableName tabname=TableName.valueOf(tabNameStr);
    140         try {
    141             //根据表名得到表
    142             HTableDescriptor htd = admin.getTableDescriptor(tabname);
    143             //新建一个列族
    144             HColumnDescriptor attach = new HColumnDescriptor(familyName);
    145             attach.setMaxVersions(3);
    146             //将新建的列族添加到表中
    147             htd.addFamily(attach);
    148             
    149             //修改指定的表
    150             admin.modifyTable(tabname, htd);
    151         } catch (TableNotFoundException e) {
    152             e.printStackTrace();
    153         } catch (IOException e) {
    154             e.printStackTrace();
    155         }
    156     }
    157     
    158     //修改列族
    159     public static void modifyHTableByModFamily(String tabNameStr,String familyName,Integer max){
    160         //转化为表名
    161         TableName tabname=TableName.valueOf(tabNameStr);
    162         try {
    163             //根据表名得到表
    164             HTableDescriptor htd = admin.getTableDescriptor(tabname);
    165             //得到指定的列族
    166             HColumnDescriptor hcd =htd.getFamily(familyName.getBytes());
    167             hcd.setMaxVersions(max);
    168             
    169             //修改表中的指定列族
    170             admin.modifyColumn(tabname, hcd);
    171         } catch (TableNotFoundException e) {
    172             e.printStackTrace();
    173         } catch (IOException e) {
    174             e.printStackTrace();
    175         }
    176     }
    177     
    178     //删除列族
    179     public static void modifyHTableByDelFamily(String tabNameStr,String familyName){
    180         TableName  tabname=TableName.valueOf(tabNameStr);
    181         try {
    182             HTableDescriptor htd = admin.getTableDescriptor(tabname);
    183             htd.removeFamily(familyName.getBytes());
    184             
    185             //删除表中的指定列族
    186             admin.modifyTable(tabname, htd);
    187         } catch (TableNotFoundException e) {
    188             e.printStackTrace();
    189         } catch (IOException e) {
    190             e.printStackTrace();
    191         }
    192     }
    193     
    194     
    195     //遍历所有的表空间
    196     public static void iterateNameSpace(){
    197         try {
    198             //取出所有的表空间的结构
    199             NamespaceDescriptor[] nds=admin.listNamespaceDescriptors();
    200             for(NamespaceDescriptor nd:nds){
    201                 //获取表空间的名字
    202                 String namespaceName=nd.getName();
    203                 //获取表空间下所有的表的结构
    204                 HTableDescriptor[] htds=admin.listTableDescriptorsByNamespace(namespaceName);
    205                 for(HTableDescriptor htd:htds){
    206                     //获取表的名字
    207                     String tabName=htd.getTableName().getNameAsString();
    208                     //获取表下的所有的列族的结构
    209                     HColumnDescriptor[] hcds=htd.getColumnFamilies();
    210                     for(HColumnDescriptor hcd:hcds){
    211                         //获取列族的名字
    212                         String familyName=hcd.getNameAsString();
    213                         //获取列族下的所有键值对
    214                         Map<ImmutableBytesWritable,ImmutableBytesWritable> keyVals=hcd.getValues();
    215                         //遍历当前列族下的所有键值对
    216                         Set<Entry<ImmutableBytesWritable, ImmutableBytesWritable>> entrys=keyVals.entrySet();
    217                         for(Entry<ImmutableBytesWritable, ImmutableBytesWritable> entry:entrys){
    218                             String key=new String(entry.getKey().get());
    219                             String value=new String(entry.getValue().get());
    220                             String info=new StringBuilder(namespaceName)
    221                                     .append("	")
    222                                     .append(tabName)
    223                                     .append("	")
    224                                     .append(familyName)
    225                                     .append("	")
    226                                     .append(key)
    227                                     .append(":")
    228                                     .append(value)
    229                                     .toString();
    230                             
    231                             //输出结果
    232                             System.out.println(info);
    233                         }
    234                     }
    235                 }
    236             }
    237         } catch (IOException e) {
    238             e.printStackTrace();
    239         }
    240         
    241     }
    242     
    243     //删除HBase表
    244     public static void deleteHTable(String tabNameStr) { 
    245         TableName tableName = TableName.valueOf(tabNameStr);
    246         
    247         try {
    248             //先禁用表
    249             admin.disableTable(tableName);
    250             //在删除表
    251             admin.deleteTables(tabNameStr);
    252         } catch (IOException e) {
    253             e.printStackTrace();
    254         }
    255     }
    256     
    257 }
    DDLMain

    测试结果:

     在命令端查看,查看方式,可参考:http://www.cnblogs.com/mmzs/p/8135327.html

  • 相关阅读:
    基于golang的分布式任务管理系统
    golang sql 包连接池分析
    Go web框架构建三层架构
    004-位置参数变量
    003_1-当前系统语言的相关知识
    003-环境变量
    002-自定义变量
    001--变量概述
    2017-07-04(sudo wc sort)
    优化分页的查询
  • 原文地址:https://www.cnblogs.com/mmzs/p/8135334.html
Copyright © 2011-2022 走看看