hbase的java客户端连接hbase的时候只需要连接zookeeper集群即可找到Hbase集群的位置 核心对象如下:   hbase中的namespace起到是是类似于mysql中数据库的作用 可以将表进行分类别管理 , 在HDFS系统中其实对应不同的文件夹 Hbase在建表的时候指定表名和至少一个列族 当创建表以后 .由于表中的数据量比较少所以表默认是一个region , 那么此时在短时间内有大量的插入请求就出现了插入性的热点问题! 我们可以在建表的时候指定多个region来避免这种现象 shell客户端操作 在页面上查看   JAVA-API     封装一个展示数据内容的工具类    1 创建Maven项目
 
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="https://maven.apache.org/POM/4.0.0"          xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>org.example</groupId>     <artifactId>doit15-hbase</artifactId>     <version>1.0-SNAPSHOT</version>     <properties>         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>         <maven.compiler.source>1.8</maven.compiler.source>         <maven.compiler.target>1.8</maven.compiler.target>     </properties>     <dependencies>         <dependency>             <groupId>org.apache.zookeeper</groupId>             <artifactId>zookeeper</artifactId>             <version>3.4.6</version>         </dependency>         <dependency>             <groupId>junit</groupId>             <artifactId>junit</artifactId>             <version>4.12</version>             <scope>compile</scope>         </dependency>         <dependency>             <groupId>org.apache.hbase</groupId>             <artifactId>hbase-client</artifactId>             <version>2.0.4</version>         </dependency>         <dependency>             <groupId>org.apache.hadoop</groupId>             <artifactId>hadoop-client</artifactId>             <version>2.7.7</version>         </dependency>         <dependency>             <groupId>org.apache.hadoop</groupId>             <artifactId>hadoop-common</artifactId>             <version>2.7.7</version>         </dependency>         <dependency>             <groupId>org.apache.hbase</groupId>             <artifactId>hbase-server</artifactId>             <version>2.0.4</version>         </dependency>         <!-- 使用mr程序操作hbase 数据的导入 -->         <dependency>             <groupId>org.apache.hbase</groupId>             <artifactId>hbase-mapreduce</artifactId>             <version>2.0.4</version>         </dependency>         <dependency>             <groupId>com.google.code.gson</groupId>             <artifactId>gson</artifactId>             <version>2.8.5</version>         </dependency>         <!-- phoenix 凤凰 用来整合Hbase的工具 -->         <dependency>             <groupId>org.apache.phoenix</groupId>             <artifactId>phoenix-core</artifactId>             <version>5.0.0-HBase-2.0</version>         </dependency>     </dependencies>     <build>         <plugins>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-compiler-plugin</artifactId>                 <version>3.5.1</version>                 <configuration>                     <source>1.8</source>                     <target>1.8</target>                 </configuration>             </plugin>              <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-assembly-plugin</artifactId>                 <version>2.6</version>                 <configuration>                     <descriptorRefs>                         <descriptorRef>jar-with-dependencies</descriptorRef>                     </descriptorRefs>                 </configuration>                 <executions>                     <execution>                         <id>make-assembly</id>                         <!-- bind to the packaging phase -->                         <phase>package</phase>                         <goals>                             <goal>single</goal>                         </goals>                     </execution>                 </executions>             </plugin>          </plugins>     </build> </project>2 java-API 
2.1 客户端连接核心对象
 
package com._51doit.client;  import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Table;  import java.io.IOException;  /**  * @Auther: 多易教育-行哥  * OBJECT:  *   1  Configuration  : HBaseConfiguration.create();  *   2  Connection     : ConnectionFactory.createConnection(conf);  *   3  Table          : conn.getTable(TableName.valueOf("tb_b"));  可以对表操作  DML  *   4  Admin          : conn.getAdmin();  操作hbase系统   DDL  名称空间 tools ...  *  * @Date: 2020/6/12  * @Description:获取连接hbase的客户端对象  */ public class ConnectionDemo {     public static void main(String[] args) throws Exception {         // 直接连接ZK集群 就能找到对应的Hbase集群         // 1 创建一个配置信息的对象         Configuration conf = HBaseConfiguration.create();        // 2  设置配置存储   设置ZK集群的位置         conf.set("hbase.zookeeper.quorum" , "linux01:2181,linux02:2181,linux03:2181");         //3 创建连接对象         Connection conn = ConnectionFactory.createConnection(conf);         /**          * conn.getTable()  --> Table对象 可以对表操作  DML          *  Admin admin = conn.getAdmin() 获取管理对象    操作hbase系统   DDL  名称空间 tools ...          */         Table tb_b = conn.getTable(TableName.valueOf("tb_b"));         // 获取管理对象         Admin admin = conn.getAdmin();         // 获取系统中所有的用户自定义的表   Hbase中对表的抽象  TableName         TableName[] tableNames = admin.listTableNames() ;         // 变量表         for (TableName tableName : tableNames) {             // 获取表的名称  字节数组             byte[] name = tableName.getName();             // 打印             System.out.println(new String(name));         }          // 释放对象         conn.close();      } } 2.2 Java-API 名称空间
JAVAJAVA-](https://img-blog.csdnimg.cn/20200612110503738.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3OTMzMDE4,size_16,color_FFFFFF,t_70)
 
package com._51doit.client;  import com._51doit.utils.HbaseUtils; import org.apache.hadoop.hbase.NamespaceDescriptor; import org.apache.hadoop.hbase.client.Admin;  import java.io.IOException; import java.util.HashMap; import java.util.Map;  /**  * @Auther: 多易教育-行哥  * @Date: 2020/6/12  * @Description:  * 1 创建一个名称空间               c   reateNamespace  * 2 查看系统下所有的名称空间           listNamespaceDescriptors  * 3 修改名称空间                     modifyNamespace  * 4 删除                             deleteNamespace  */ public class NameSpaceDemo {     public static void main(String[] args) throws Exception {         // 创建一个名称空间         Admin admin = HbaseUtils.getHbaseAdmin();         admin.deleteNamespace("doit");         admin.close();     }      /**      * 修改名称空间的属性      * @param admin      * @throws IOException      */     private static void changeNameSpace(Admin admin) throws IOException {         NamespaceDescriptor.Builder doit = NamespaceDescriptor.create("doit");         doit.removeConfiguration("author") ;         doit.addConfiguration("author","JINLONG") ;         NamespaceDescriptor build = doit.build();         // 修改属性         admin.modifyNamespace(build);     }      /**      * 查看系统下所有的名称空间      * 并且查看配置信息      * @param admin      * @throws IOException      */     private static void getAllNameSpaces(Admin admin) throws IOException {         //查看系统下所有的名称空间         NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors();         // 遍历         for (NamespaceDescriptor namespaceDescriptor : namespaceDescriptors) {             // 一个名称空间对象             // 名字             String name = namespaceDescriptor.getName();             // 属性信息             Map<String, String> map = namespaceDescriptor.getConfiguration();             System.out.println(name+"--->"+map.entrySet());         }     }      /**      * 创建名称空间      * @param admin      * @throws IOException      */     private static void createNameSpace(Admin admin) throws IOException {         // 获取名称空间的构建器         NamespaceDescriptor.Builder doit = NamespaceDescriptor.create("doit");         Map<String,String> map = new HashMap<>() ;         map.put("author" , "DOIT") ;         map.put("desc" ,"my first namespace...");         // 对名称空间的属性设置         doit.addConfiguration(map) ;         //构造名称空间对象         NamespaceDescriptor namespaceDescriptor = doit.build();         // 调用方法  创建         admin.createNamespace(namespaceDescriptor);     } } 2.3 Java-API 建表
 
/**  * @Auther: 多易教育-行哥  * @Date: 2020/6/12  * @Description:  * 1 建表 : 表名和列族是必须  */ public class TableOperation {     public static void main(String[] args) throws Exception {         Admin admin = HbaseUtils.getHbaseAdmin();          admin.close();     }      /**      * 创建多个列族的表      * @param admin      * @throws IOException      */     private static void createTableWithMoreColumnFamilies(Admin admin) throws IOException {         //表的构建器 表名   1         TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_demo3"));         //--------------列族一         // 列族构建器         ColumnFamilyDescriptorBuilder cf1 = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes());         // 设置数据存储的版本的个数         cf1.setMaxVersions(3) ;         // 设置列族中数据的存储时间 单位秒         cf1.setTimeToLive(240) ;         // 列族的描述对象         ColumnFamilyDescriptor columnFamilyDescriptor1 = cf1.build();         //--------------列族二         // 列族构建器         ColumnFamilyDescriptorBuilder cf2 = ColumnFamilyDescriptorBuilder.newBuilder("cf2".getBytes());         // 设置数据存储的版本的个数         cf2.setMaxVersions(5) ;         // 设置列族中数据的存储时间 单位秒         cf2.setTimeToLive(300) ;         // 列族的描述对象         ColumnFamilyDescriptor columnFamilyDescriptor2 = cf2.build();         // -------存储多个列族         // 存储多个列族对象         List<ColumnFamilyDescriptor> cfs = new ArrayList<>() ;         cfs.add(columnFamilyDescriptor1) ;         cfs.add(columnFamilyDescriptor2) ;          // -------------------表中添加多个列族         // 表的构建器 添加列族         tableDescriptorBuilder.setColumnFamilies(cfs) ;          //表描述对象         TableDescriptor tableDescriptor = tableDescriptorBuilder.build();         // 创建表         admin.createTable(tableDescriptor);     }      /**      * 创建一个列族的表      * @param admin      * @throws IOException      */     private static void createTableWithOnColumnFamily(Admin admin) throws IOException {         //表的构建器 表名         TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_demo2"));         // 列族构建器         ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes());         // 设置数据存储的版本的个数         columnFamilyDescriptorBuilder.setMaxVersions(3) ;         // 设置列族中数据的存储时间 单位秒         columnFamilyDescriptorBuilder.setTimeToLive(240) ;         // 列族的描述对象         ColumnFamilyDescriptor columnFamilyDescriptor = columnFamilyDescriptorBuilder.build();         // 表中添加列族         // 表的构建器 添加列族         tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor) ;         //表描述对象         TableDescriptor tableDescriptor = tableDescriptorBuilder.build();         // 创建表         admin.createTable(tableDescriptor);     } } 2.3.1 预分region表
 
create "tb_spl1" , "cf1"  , SPLITS =>['e' , 'm' , 't'] Created table tb_spl1 Took 2.4596 seconds            # 查看表是否进行了预分region操作 hbase(main):010:0> list_regions "tb_spl1"                  SERVER_NAME |                                               REGION_NAME |  START_KEY |    END_KEY |  SIZE |   REQ |   LOCALITY |  --------------------------- | --------------------------------------------------------- | ---------- | ---------- | ----- | ----- | ---------- |  linux03,16020,1591783680511 |  tb_spl1,,1591824125893.63d4e1005eec815e2c6dd3f0b2762631. |            |          e |     0 |     0 |        0.0 |  linux02,16020,1591783680684 | tb_spl1,e,1591824125893.cfcb6ece7a484e579feb863eb9d0e084. |          e |          m |     0 |     0 |        0.0 |  linux01,16020,1591783680829 | tb_spl1,m,1591824125893.884c71c0cdca3f52674e39c99d374f38. |          m |          t |     0 |     0 |        0.0 |  linux02,16020,1591783680684 | tb_spl1,t,1591824125893.3b7eceae97ef9450eee90ca962c4245d. |          t |            |     0 |     0 |        0.0 |  4 rows Took 0.0561 seconds    ## 查看拆分点key的位置      hbase(main):012:0> locate_region "tb_spl1" , "e" HOST                           REGION                                                                                  linux02:16020                 {ENCODED => cfcb6ece7a484e579feb863eb9d0e084, NAME => 'tb_spl1,e,1591824125893.cfcb6ec                                e7a484e579feb863eb9d0e084.', STARTKEY => 'e', ENDKEY => 'm'}                           1 row(s) Took 0.0026 seconds                                                                           JAVAJAVA-](https://img-blog.csdnimg.cn/20200612145622692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3OTMzMDE4,size_16,color_FFFFFF,t_70)
 
   public static void main(String[] args) throws Exception {         Admin admin = HbaseUtils.getHbaseAdmin();         // 表的描述器         TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_spl2"));         // 列族的描述器         ColumnFamilyDescriptorBuilder cf = ColumnFamilyDescriptorBuilder.newBuilder("cf".getBytes());         ColumnFamilyDescriptor cfobj = cf.build();         // 添加到表中         tableDescriptorBuilder.setColumnFamily(cfobj);         TableDescriptor tableDescriptor = tableDescriptorBuilder.build();         byte[][] keys = new byte[][]{"e".getBytes(), "m".getBytes(),"t".getBytes()} ;         // 建表    指定预分region的key(数组)         admin.createTable(tableDescriptor,keys);          admin.close();     }2.4 Java-API  修改表结构
 
admin.modifyTable(tableDescriptor); 参数是表对象 可以修改表的列族名 和列族属性 添加删除列族等 
admin.modifyColumnFamily(TableName.valueOf("tb_demo1"), cfobj);  仅仅可以修改表的某个列族的属性值 
/**      * 修改表结构      * @param admin      * @throws IOException      */     private static void modifyTableDemo(Admin admin) throws IOException {         //   TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_demo1"));         ColumnFamilyDescriptorBuilder cf = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes());         // 仅修改某个列族的属性         cf.setMaxVersions(5);         ColumnFamilyDescriptor cfobj = cf.build();         // 添加到表中        /* tableDescriptorBuilder.setColumnFamily(cfobj);         TableDescriptor tableDescriptor = tableDescriptorBuilder.build();         // 添加列族  删除列族         admin.modifyTable(tableDescriptor);         */         admin.modifyColumnFamily(TableName.valueOf("tb_demo1"), cfobj);     }2.5 Java-API  删除表 (禁用 是否禁用启用)
 
 /**      * 删除表  先禁用      * @param admin      * @throws IOException      */     private static void deleteTable(Admin admin) throws IOException {         TableName tn = TableName.valueOf("tb_demo1");         // 如果表存在         if(admin.tableExists(tn)){             admin.disableTable(tn);             if(admin.isTableDisabled(tn)){                 admin.deleteTable(tn);             }else{                 System.out.println("请先禁用表");             }         }else {             System.out.println("表不存在");         }     } 2.6 Java-API  插入更新数据 put
 
 public static void main(String[] args) throws Exception {         // 1 获取表对象  DML         Table tb = HbaseUtils.getHbaseTable("tb_spl2");         // tb.getDescriptor().getColumnFamilyNames();  // 获取所有的列族         //2 Put对象 表  行  列族:属性  值         // 参数  行建的值        // Put put = new Put("rk001".getBytes());         /**          * 参数一 列族          * 参数二 属性          * 参数三 值          */      /*   put.addColumn("cf".getBytes(), "uid".getBytes(), "uid001".getBytes());         put.addColumn("cf".getBytes(), "name".getBytes(), "LSS".getBytes());         put.addColumn("cf".getBytes(), "gender".getBytes(), "M".getBytes());*/         // 3  执行嘻插入         // tb.put(put);  // rpc请求 一次插入一个属性         List<Put> puts = new ArrayList<>();         Put put1 = new Put("rk002".getBytes());         Put put2 = new Put("rk003".getBytes());         Put put3 = new Put("rk004".getBytes());         put1.addColumn("cf".getBytes(), "uid".getBytes(), "uid002".getBytes());         put1.addColumn("cf".getBytes(), "name".getBytes(), "ZSS".getBytes());          put2.addColumn("cf".getBytes(), "age".getBytes(), "23".getBytes());          put3.addColumn("cf".getBytes(), "addres".getBytes(), "Beijing".getBytes());         put3.addColumn("cf".getBytes(), "name".getBytes(), "gunayu".getBytes());          puts.add(put1);         puts.add(put2);         puts.add(put3);          tb.put(puts);          // 4 释放资源         tb.close();      }2.6 Java-API 获取数据-get()
 
 /**      * 获取多行数据      * @param tb      * @throws IOException      */     private static void getData(Table tb) throws IOException {         Get get1 = new Get("rk001".getBytes()) ;         Get get2 = new Get("rk002".getBytes()) ;         Get get3 = new Get("rk003".getBytes()) ;         // 指定获取数据的  哪个列族的哪个属性         get1.addColumn("cf".getBytes(),"name".getBytes());         // 指定获取哪个列族的数据         get1.addFamily("cf1".getBytes());          List<Get> list =  new ArrayList<>() ;         // 将多个get存储在集合中         list.add(get1) ;         list.add(get2) ;         list.add(get3) ;         // 查询多行数据 返回每行组成的数组         Result[] results = tb.get(list);         // 遍历=数组 获取每行数据         for (Result result : results) {           HbaseUtils.showData(result);         }     }      /**      * 获取一行数据      * @param tb      * @throws IOException      */     private static void getOneRowData(Table tb) throws IOException {         // get对象 代表一行数据  (所有的列族 属性)         Get get =  new Get("rk001".getBytes()) ;         // 一行结果数据  有很多单元格  单元格的个数不确定  稀疏性         Result result = tb.get(get);         while(result.advance()){ // 只要有下一个单元格进入循环             // 获取当前的单元格对象             Cell cell = result.current();          /*   cell.getFamilyArray() ;//列族             cell.getQualifierArray() ;// 属性             cell.getValueArray() ; // 值*/             byte[] r = CellUtil.cloneRow(cell);  // 行             byte[] family = CellUtil.cloneFamily(cell); // 列族             byte[] qualifier = CellUtil.cloneQualifier(cell); // 属性             byte[] value = CellUtil.cloneValue(cell); // 值             System.out.println(" 行: "+new String(r)+" 列族: "+new String(family)+" 属性:  "+new String(qualifier)+" 值: "+new String(value));         }     }  
 /**      * 展示单元格数据      * @param result      */     public  static  void showData(Result result){         while(result.advance()){             Cell cell = result.current();             String row = new String(CellUtil.cloneRow(cell));             String family = new String(CellUtil.cloneFamily(cell));             String qualifier = new String(CellUtil.cloneQualifier(cell));             String value = new String(CellUtil.cloneValue(cell));             System.out.println(row+"->"+family+":"+qualifier+"->"+value);         }      }2.7 Java-API 获取数据-scan()
 
 /**      * 扫面数据      * @param tb      * @throws IOException      */     private static void scanData(Table tb) throws IOException {         Scan scan = new Scan();// 扫描对象         scan.withStartRow("rk002".getBytes()) ;// 起始行  包括         scan.withStopRow("rk004".getBytes()); // 结束行不包含         ResultScanner scanner = tb.getScanner(scan);         Iterator<Result> iterator = scanner.iterator();         while (iterator.hasNext()){             Result result = iterator.next();             HbaseUtils.showData(result);         }     } 2.8 Java-API 删除数据 delete
 
public static void main(String[] args) throws Exception {         Table tb = HbaseUtils.getHbaseTable("tb_gy");         // 获取删除对象  指定行         Delete delete = new Delete(Bytes.toBytes("sb001"));         //设置参数  删除某个属性         delete.addFamily(Bytes.toBytes("cf1"));       /*  delete.addColumn();         delete.addColumn();*/         // 没有进行任何的参数设置  删除整行数据         tb.delete(delete);          tb.close();     }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
 官方软件产品操作指南 (170)
官方软件产品操作指南 (170)