Hbase 基本操作用 在java 上的实现

1.首先确保hbase处于开启状态
2.创建maven 项目 导入依赖

<dependencies>
  <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.2.0</version>
</dependency>
  <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-server</artifactId>
    <version>1.2.0</version>
</dependency>

3.在resources文件下添加两个文件
1.hbase-site.xml

  <?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master,slave1,slave2</value>
                <description>The directory shared by RegionServers.</description>
        </property>

        <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
        </property>
</configuration>

2.log4j.properties
  # Global logging configuration
log4j.rootLogger=INFO, stdout
# MyBatis logging configuration...
log4j.logger.org 

.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.实现基本操作

package com.test.bd17;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.NavigableMap;
import java.util.Random;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellScanner;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
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.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class HbaseTest {
    public Connection connection;
    //用hbaseconfiguration初始化配置信息时会自动加载当前应用classpath下的hbase-site.xml
    public static Configuration configuration = HBaseConfiguration.create();
    public Table table;
    public Admin admin;

    public HbaseTest() throws Exception{
        //对connection初始化
        connection = ConnectionFactory.createConnection(configuration);
        admin = connection.getAdmin();
    }
    //创建表
    public void createTable(String tablename,String... cf1) throws Exception{
        //获取admin对象
        Admin admin = connection.getAdmin();
        //创建tablename对象描述表的名称信息
        TableName tname = TableName.valueOf(tablename);//bd17:mytable
        //创建HTableDescriptor对象,描述表信息
        HTableDescriptor tDescriptor = new HTableDescriptor(tname);
        //判断是否表已存在
        if(admin.tableExists(tname)){
            System.out.println("表"+tablename+"已存在");
            return;
        }
        //添加表列簇信息
        for(String cf:cf1){
            HColumnDescriptor famliy = new HColumnDescriptor(cf);
            tDescriptor.addFamily(famliy);
        }
        //调用admin的createtable方法创建表
        admin.createTable(tDescriptor);
        System.out.println("表"+tablename+"创建成功");
    }
    //删除表
    public void deleteTable(String tablename) throws Exception{
        Admin admin = connection.getAdmin();
        TableName tName = TableName.valueOf(tablename);
        if(admin.tableExists(tName)){
            admin.disableTable(tName);
            admin.deleteTable(tName);
            System.out.println("删除表"+tablename+"成功!");
        }else{
            System.out.println("表"+tablename+"不存在。");
        }
    }
    //新增数据到表里面Put
    public void putData() throws Exception{
        TableName tableName = TableName.valueOf("bd17:fromjava");
        Table table = connection.getTable(tableName);
        Random random = new Random();
        List<Put> batPut = new ArrayList<Put>();
        for(int i=0;i<10;i++){
            //构建put的参数是rowkey   rowkey_i (Bytes工具类,各种java基础数据类型和字节数组之间的相互转换)
            Put put = new Put(Bytes.toBytes("rowkey_"+i));
            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("username"), Bytes.toBytes("un_"+i));
            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("age"), Bytes.toBytes(random.nextInt(50)+1));
            put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("birthday"), Bytes.toBytes("20170"+i+"01"));
            put.addColumn(Bytes.toBytes("j"), Bytes.toBytes("phone"), Bytes.toBytes("电话_"+i));
            put.addColumn(Bytes.toBytes("j"), Bytes.toBytes("email"), Bytes.toBytes("email_"+i));
            //单记录put
//          table.put(put);
            batPut.add(put);
        }
        table.put(batPut);
        System.out.println("表插入数据成功!");
    }
    public void getData() throws Exception{
        TableName tableName = TableName.valueOf("bd17:fromjava");
        table = connection.getTable(tableName);
        //构建get对象
        List<Get> gets = new ArrayList<Get>();
        for(int i=0;i<5;i++){
            Get get = new Get(Bytes.toBytes("rowkey_"+i));
            gets.add(get);
        }
        Result[] results = table.get(gets);
        for(Result result:results){
            //一行一行读取数据
//          NavigableMap<byte[],NavigableMap<byte[],NavigableMap<Long,byte[]>>> maps = result.getMap();
//          for(byte[] cf:maps.keySet()){
//              NavigableMap<byte[],NavigableMap<Long,byte[]>> valueWithColumnQualify = maps.get(cf);
//              for(byte[] columnQualify:valueWithColumnQualify.keySet()){
//                  NavigableMap<Long,byte[]> valueWithTimeStamp = valueWithColumnQualify.get(columnQualify);
//                  for(Long ts:valueWithTimeStamp.keySet()){
//                      byte[] value = valueWithTimeStamp.get(ts);
//                      System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnFamliy:"+
//                              Bytes.toString(cf)+",comlumnQualify:"+Bytes.toString(columnQualify)+",timestamp:"
//                              +new Date(ts)+",value:"+Bytes.toString(value)
//                              );
//                  }
//              }
//          }

            //使用字段名称和列簇名称来获取value值
//          System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnfamily:i,columnqualify:username,value:"+
//                  Bytes.toString(result.getValue(Bytes.toBytes("i"), Bytes.toBytes("username")))
//                  );
//          System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnfamily:i,columnqualify:age,value:"+
//                  Bytes.toInt(result.getValue(Bytes.toBytes("i"), Bytes.toBytes("age")))
//                  );

            //使用cell获取result里面的数据
            CellScanner cellScanner = result.cellScanner();
            while(cellScanner.advance()){
                Cell cell = cellScanner.current();
                //从单元格cell中把数据获取并输出
                //使用 CellUtil工具类,从cell中把数据获取出来
                String famliy = Bytes.toString(CellUtil.cloneFamily(cell));
                String qualify = Bytes.toString(CellUtil.cloneQualifier(cell));
                String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
                String value = Bytes.toString(CellUtil.cloneValue(cell));
                System.out.println("rowkey:"+rowkey+",columnfamily:"+famliy+",qualify:"+qualify+",value:"+value);
            }
        }
    }
    //关闭连接
    public void cleanUp() throws Exception{
        connection.close();
    }
    public static void main(String[] args) throws Exception {
        HbaseTest hbaseTest = new HbaseTest();
//      hbaseTest.createTable("bd17:fromjava", "i","j");
//      hbaseTest.deleteTable("bd17:fromjava");
//      hbaseTest.putData();
        hbaseTest.getData();
        hbaseTest.cleanUp();
    }
}

时间: 2024-09-29 15:10:55

Hbase 基本操作用 在java 上的实现的相关文章

JAVA 上加密算法的实现用例

 JAVA 上加密算法的实现用例    1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.但是加密的安全性依靠密钥保管的安全性 , 在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并且如果在多用户的情况下密钥的保管安全性也是一个问题. 单钥密码体制的代表是美国的 DES 1.2. 消息摘要 一个消息摘要就是一个数据块的数字指纹.即对一个任意长

java上传视频截图

1,到CSDN下载: ffmpeg和mencoder命令使用的总结(超级全面) 2,两个程序: package national; import java.util.ArrayList; import java.util.List; public class VideoProcess { public static boolean processTransToImg2(String oldfilepath,String newfilename,String newimg){ System.out

开源-java上传下载文件服务器选择

问题描述 java上传下载文件服务器选择 目前在做一个ssh的项目,项目中的图片文件比较多, 寻思着再搭建一个文件服务器,可以通过api进行文件上传下载就可以了. 对着方面不太了解,不知道可以采用哪个. 最好是流行,开源的,稍微了解了一下seafile,FASTDfs. 希望熟悉的人能给我推荐一个啊. 解决方案 直接用aws,提供了现成的blob file server

java上传附件问题弹出大小限制

问题描述 java上传附件问题弹出大小限制 Java中上传附件大小限制都取消了,不知道哪还是弹出来"上传文件大小不能超过8M的最高限额,请重新上传" 解决方案 把代码贴出来看看.1.代码中的限制没清楚掉,java或者使用的上传附件插件中有限制2.你将附件上传到哪啊,如果是附件服务器或者ftp 可以看一下是否服务器有限制. 解决方案二: java文件上传大小限制在xml和js,以及后台都可以设置的.看看是不是其中的一个没有改掉啊.

java上传doc和Excel文件怎样去验证文件内容以及如何做安全防范

问题描述 java上传doc和Excel文件怎样去验证文件内容以及如何做安全防范 我用java做了一个文件上传功能 要求只能上传doc 和 excel 文件,验证了文件名后缀以及文件头,但是这种防范都可以绕过 !- 有么有更好的验证方法 求大神们指教 !- 小弟在此拜谢 解决方案 把doc,excel等用文本打开,然后检查一些文件头等信息. 解决方案二: 除非你用poi这样的库全部解析下.

云计算-我在java上运行Hadoop的例程 FindFileOnHDFS 结果报错了

问题描述 我在java上运行Hadoop的例程 FindFileOnHDFS 结果报错了 Exception in thread "main" java.lang.ClassCastException: org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.hadoop.hdfs.DistributedFileSystem at org.apache.hadoop.examples.FindFileOnHDF

图片-java上传文件到tomcat服务器返回302

问题描述 java上传文件到tomcat服务器返回302 前段时间做一个图片上传的功能, 惟独用手机上传大于2M的图片时会上传不了,后台代码也没有报错,只是返回"The document has moved here"这样一个字符串,错误码是302 初步确定是服务器的问题因为我将服务器端口由80改成8080就没问题了..接下来就不知道该怎么测试了,求指点... 解决方案 http://blog.csdn.net/dinner1984/article/details/7901954 解决

ftp服务器-Java上传到fth时提示Connection closed without indication.

问题描述 Java上传到fth时提示Connection closed without indication. 如题,自己在系统中直接上传的话是可以的,但用代码上传就不行了,代码是这样的 package cn.com.sensetech.ftp; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache

java上传

问题描述 java上传 代码 例子 项目开发 !!! 解决方案 http://wenku.baidu.com/view/73a4140cba1aa8114431d974.html这个详细讲解了文件上传 要学会baidu 自学解决方案二:这个开源的jar包好多的,smartupload.jar等等.个人觉得smartupload用起来比较简单,如果需要Demo的话,本人可以提供.解决方案三:这个有点详细:http://www.blueidea.com/tech/program/2008/5258.