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("\t")
222                                     .append(tabName)
223                                     .append("\t")
224                                     .append(familyName)
225                                     .append("\t")
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

原文地址:https://www.cnblogs.com/mmzs/p/8135334.html

时间: 2024-11-10 05:05:24

HBase的java客户端测试(一)---DDL操作的相关文章

HBase的java客户端测试(二)---DML操作

测试准备 [首先同步时间:] 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 - &&

淘宝分布式 key/value 存储引擎Tair安装部署过程及Java客户端测试一例

目录 1. 简介 2. 安装步骤及问题小记 3. 部署配置 4. Java客户端测试 5. 参考资料 声明 1. 下面的安装部署基于Linux系统环境:centos 6(64位),其它Linux版本可能有所差异. 2. 网上有人说tair安装失败可能是因为gcc版本问题,高版本的gcc可能不支持某些特性导致安装失败,经过实验证明,该说法是错误的,tair安装失败有各种可能的原因但绝对与gcc版本无关,比如我的gcc开始版本为4.4.7,后来tair安装失败,我重新编译低版本的gcc(gcc4.1

docker安装fastdfs与java客户端测试

一.docker 安装FastDFS 1.拉取镜像 docker pull morunchang/fastdfs 2.创建并启动tracker容器 docker run -d --name=tracker -v /home/fastdfs_docker/fdfs/tracker:/data/fast_data --privileged=true --net=host morunchang/fastdfs sh tracker.sh 3.创建并启动storage容器.此处只做单机版测试 注意:由于

使用Java客户端对Redis进行操作

一.背景 上篇文章我们介绍了如何在centos7下面进行安装单机版redis以及redis集群.这篇文章,我们来聊一聊如何使用java客户端来进行操作redis.我们知道redis的java客户端有很多,如:jedis.redission等.这篇文章着重介绍我们平常使用最多的redis的java客户端jedis. 二.通过单元测试来小试牛刀 1.首先在maven的pom.xml中引入jedis-client的依赖 <dependency> <groupId>redis.client

RabbitMQ/JAVA 客户端测试(补:利用线程)

上次进行了简单的连接测试.这次主要进行一下小小的补充.利用线程将生产者消费者代码合到一个文件中. 我是将Recv.java(消费者)文件放在一个线程里添加到Send.java(生产者)中. 代码如下: package MYRABBITMQ; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.ConsumerCancelledException; import com.rabbitmq.client.Q

读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Java客户端

HBase Shell HBase shell使用起来最方便,进入HBase shell控制台即可使用. $ $HBASE_HOME/bin/hbase shell 常见操作有create(创建表)/put(插入或更新数据)/get(根据rowkey查询)/scan(范围查询)/delete(删除列)/deleteAll(根据rowkey删除整行数据)/disable&drop(禁用表之后再删除). 基于数据库的项目,往往会在某个目录下存储专门的sql脚本,记录每次迭代数据库变更:同理,HBas

HDFS的Java客户端操作代码(HDFS的查看、创建)

1.HDFS的put上传文件操作的java代码: 1 package Hdfs; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.net.URI; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.F

HBase 常用java api获得客户端,创建表,查询,删除

1,前期准备 (1) 本文采用的hbase是采用三台服务器搭建的集群,zookeeper也是相同服务器搭建的集群,集群ip分别是192.168.183.101: 192.168.183.102: 192.168.183.103.其中102是主节点(HMaster),101以及103都是HRegionServer (2) 这次测试安装的hbase的版本是 hbase-0.99.2.-bin.tar (3)java api引用的maven依赖路径如下 <dependency> <groupI

linux 下通过过 hbase 的Java api 操作hbase

hbase版本:0.98.5 hadoop版本:1.2.1 使用自带的zk 本文的内容是在集群中创建java项目调用api来操作hbase,主要涉及对hbase的创建表格,删除表格,插入数据,删除数据,查询一条数据,查询所有数据等操作. 具体流程如下:1.创建项目2.获取jar包到项目的lib目录下(这边试用的事hbase 0.98 lib目录下的所有jar包)3.编写java程序4.编写ant脚本 package test2; import java.util.ArrayList; impor