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 }
测试结果:
在命令端查看,查看方式,可参考:http://www.cnblogs.com/mmzs/p/8135327.html