HBase安装 基础shell命令 查询api

安装

1. 下载hbase地址  http://mirrors.hust.edu.cn/apache/hbase/   选择对应的版本

     需要安装jdk与hadoop 


2. 添加jdk,zookeeper,hadoop,hbase环境变量

#JDK
export JAVA_HOME=/usr/local/src/jdk/jdk1.8.0_144
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH


#ZOOKEEPER
export ZOOKEEPER_HOME=/usr/local/src/zookeeper/zookeeper-3.4.5/
export PATH=$PATH:$ZOOKEEPER_HOME/bin


#HADOOP
export HADOOP_HOME=/usr/local/src/hadoop/hadoop-2.6.0-cdh5.8.0
export PATH=$PATH:$HADOOP_HOME/bin 
export PATH=$PATH:$HADOOP_HOME/sbin 
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop


#Hbase
export HBASE_HOME=/usr/local/src/hbase-0.98.24-hadoop2
export PATH=$HBASE_HOME/bin:$PATH


3. 编辑<hbase_home>/conf/hbase-env.sh 

export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
#定义jdk
export JAVA_HOME=/usr/local/src/jdk/jdk1.8.0_144            
#<hadoop_home>/etc/hadoop,定义hadoop变量
export HBASE_CLASSPATH=/usr/local/hadoop-2.6.0-cdh5.8.0/etc/hadoop
#是否使用单机的zookeeper  (使用集群zk)
export HBASE_MANAGES_ZK=false   


4. 编辑<hbase_home>/conf/hbase-site.xml

<configuration>
<!-- 指定 hbase 在 HDFS 上存储的路径,保持与 core-site.xml 中的 hdfs 路径一致 -->
    <property>
         <name>hbase.rootdir</name>
         <value>hdfs://mini1:9000/hbase</value>
    </property>
    <!-- 指定 hbase 是分布式的 -->
    <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
    </property>
    <!-- 指定 zk 的地址,多个用“,”分割 ,hbase.zookeeper.quorum 的个数必须是奇数,至少是3个-->
    <property>
            <name>hbase.zookeeper.quorum</name><!-- quorum : 法定人数 -->
            <value>mini1:2181,mini2:2181,mini3:2181</value>
    </property>

</configuration>

5. 启动与停止

 (1) 启动主节点进行 <hbase_home>/bin/hbase-daemon.sh start master

 (2) 启动从节点进程 <hbase_home>/bin/hbase-daemon.sh start regionserver

   停止进程,即将对于节点上启动命令的start改成stop  

   <hbase_home>/bin/hbase-daemon.sh stop regionserver


6. 进入hbase客户端

<hbase_home>/bin/hbase shell 

7.基本命令

 创建表 : 

 create "表名","列簇1","列簇2"

 查询表 : 

 list

 添加数据 : 

 put "表名","行键","列簇:列","值"

 查询表所有数据 : 

 scan "表名"

 删除数据 : 

 delete "表名","行键","列簇:列"





8. java api查询操作

maven依赖,根据自己hbase的版本导入对应的依赖

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>0.98.24-hadoop2</version>

</dependency>


java代码


import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;



public class Text {

    /**
     * 过滤器实现了类介绍
     * 行键过滤 RowFilter
     * 列簇名过滤 FamilyFilter
     * 列过滤 QualifierFilter
     * 值过滤 ValueFilter
     */

    public static void main(String[] args) throws IOException {
        //分页查询
        String page = getPage("00003", 2);//分页查询传入起始位置与返回数量
        System.out.println("下一个起始页码" + page);
    }

    /**
     *
     * @param lastRowkey  起始行键
     * @param page 页码
     * @return 下一次查询的起始行键
     * @throws IOException
     */
    public static String getPage(String lastRowkey, Integer page) throws IOException {
        //配置参数
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "zookeeper_ip");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.master", "hbase_master_ip:6000");

        //创建查询类
        Scan scan = new Scan();

        //定义过滤器
        Filter filter1 = new ValueFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator(".*"));
        Filter filter2 = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^c"));
        Filter filter3 = new PageFilter(page);//查询条数

        //过滤器组合
        FilterList filterlist = new FilterList();
        filterlist.addFilter(filter1);
        filterlist.addFilter(filter2);
        filterlist.addFilter(filter3);

        //组合查询
        scan.setFilter(filterlist);
        scan.setStartRow(lastRowkey.getBytes());//分页查询使用的key为下一个其实位置,需要添加0

        HTable table = new HTable(conf, "查询表名");
        ResultScanner scanner = table.getScanner(scan);//获取所有结果集
        String format = "  %-25s%-18s%-30s%-5s";//输出格式
        System.out.println(String.format("%-25s%-18s", "ROW", "COLUMN+CELL"));//格式化输出
        for (Result res : scanner) {//获取一行数据
            for (Cell cell : res.listCells()) {//获取各个列的值
                String row = Bytes.toString(CellUtil.cloneRow(cell));//行键
                String value = "value=" + Bytes.toString(CellUtil.cloneValue(cell));//值
                String family = Bytes.toString(CellUtil.cloneFamily(cell));//列簇
                String col = Bytes.toString(CellUtil.cloneQualifier(cell));//列名
                String column = "column=" + family + ":" + col;//列簇与列
                String timestamp = "timestamp=" + cell.getTimestamp();//时间戳
                System.out.println(String.format(format, row, column, timestamp, value));//格式化输出
            }
            lastRowkey = Bytes.toString(res.getRow()) + "0";//给下一次查询起始rowkey位置赋值
            System.out.println("----------------------------------");
        }

        //防止程序异常,这里需要try-catch关闭连接
        scanner.close();
        table.close();

        //返回下一次查询的起始行键,用于翻页

        return lastRowkey;
    }
}


运行结果如下:

HBase安装 基础shell命令 查询api