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; } }
运行结果如下: