热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:HBase的java客户端测试DDL操作

篇首语:本文由编程笔记#小编为大家整理,主要介绍了HBase的java客户端测试---DDL操作相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了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 keyVals=hcd.getValues();
215 //遍历当前列族下的所有键值对
216 Set> entrys=keyVals.entrySet();
217 for(Entry 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

 



推荐阅读
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
author-avatar
七锦少年
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有