HBase简单API
一、使用IDEA的maven工程,工程结构如下:

二、maven的依赖pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.hbasetest</groupId>
<artifactId>HbaseTest</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.0</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies> </project>
三、hbase-site.xml,在HBase集群的{HBASE_HOME}/conf目录下下载到本地,放到resources资源目录下
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration>
<!-- 设置namenode所在位置 通过rootdir设置 也就是设置hdfs中存放的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hd09-1:9000/hbase</value>
</property> <!-- 是否开启集群 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property> <!-- 0.98 后的新变动,之前版本没有.port,默认端口为 60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property> <!-- zookeeper集群的位置 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hd09-1:2181,hd09-2:2181,hd09-3:2181</value>
</property> <!-- hbase的元数据信息存储在zookeeper的位置 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/hd/zookeeper-3.4.10/zkData</value>
</property>
</configuration>
四、core-site.xml,在Hadoop集群的{HADOOP_HOME}/etc/hadoop目录下下载到本地,放到resources资源目录下
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hd09-1:9000</value>
</property>
</configuration>
五、hdfs-site.xml,在Hadoop集群的{HADOOP_HOME}/etc/hadoop目录下下载到本地,放到resources资源目录下
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hd/dfs/name</value>
</property> <property>
<name>dfs.datanode.data.dir</name>
<value>/root/hd/dfs/data</value>
</property> <property>
<name>dfs.namenode.secondary.http-address</name>
<value>hd09-2:50090</value>
</property>
</configuration>
六、修改本地 C:\Windows\System32\drivers\etc\hosts 文件,在文件最下面加上
192.168.146.132 hd09-1
192.168.146.133 hd09-2
192.168.146.134 hd09-3
七、HbaseAPI 类
package com.demo.hbase; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class HbaseAPI { //配置信息
public static Configuration conf; //获取配置信息
static {
//alt + enter
conf = HBaseConfiguration.create();
} //1.判断一张表是否存在
public static boolean isExist(String tableName) throws IOException {
//对表操作需要使用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//管理表
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); return admin.tableExists(TableName.valueOf(tableName));
} //2.在HBase集群创建表 create 'user','info','info1'
public static void createTable(String tableName,String... columnFamily) throws IOException {
//对表操作需要用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//管理表
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); //1.表如果存在 请输入其他表名
if (isExist(tableName)){
System.out.println("表已经存在,请输入其它表名");
}else{
//2.注意,创建表的话 需要创建一个描述器
HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName)); //3.创建列族
for (String cf : columnFamily) {
htd.addFamily(new HColumnDescriptor(cf));
} //4.创建表
admin.createTable(htd);
System.out.println("表已创建成功!");
}
} //3.删除HBase中的表
public static void deleteTable(String tableName) throws IOException{
//对表操作需要使用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//管理表
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); //1.如果表存在 删除 否则打印不存在
//需要先指定表不可用 再删除
if (isExist(tableName)){
//2.指定不可用
admin.disableTable(TableName.valueOf(tableName));
admin.deleteTable(TableName.valueOf(tableName));
}else {
System.out.println("表不存在,请重新输入表名!");
}
} //4.添加数据put 'user','rowKey'
public static void addRow(String tableName, String rowkey, String cf, String column, String value) throws IOException {
//对表操作需要使用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表对象
Table t = connection.getTable(TableName.valueOf(tableName));
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); //1.用put方式加入数据
Put p = new Put(Bytes.toBytes(rowkey));
//2.加入数据
p.addColumn(Bytes.toBytes(cf),Bytes.toBytes(column),Bytes.toBytes(value));
t.put(p);
} //5.删除表中一行数据
public static void deleteRow(String tableName, String rowkey, String cf) throws IOException {
//对表操作需要用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表对象
Table t = connection.getTable(TableName.valueOf(tableName)); //1.根据rowkey删除数据
Delete d = new Delete(Bytes.toBytes(rowkey));
//2.删除
t.delete(d);
} //6.删除多行数据
public static void deleteAll(String tableName, String... rowkeys) throws IOException {
//对表操作需要用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表对象
Table t = connection.getTable(TableName.valueOf(tableName)); //1.把delete封装到集合
List<Delete> list = new ArrayList<Delete>();
//2.遍历
for (String row : rowkeys) {
Delete d = new Delete(Bytes.toBytes(row));
list.add(d);
}
t.delete(list);
} //7.扫描表数据 scan全表扫描
public static void scanAll(String tableName) throws IOException {
//对表操作需要用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表对象
Table t = connection.getTable(TableName.valueOf(tableName)); //1.实例scan
Scan s = new Scan();
//2.拿到Scanner对象
ResultScanner rs = t.getScanner(s); //3.遍历
for (Result r : rs) {
Cell[] cells = r.rawCells();
//遍历具体数据
for (Cell c : cells) {
System.out.println("行键为:" + Bytes.toString(CellUtil.cloneRow(c)));
System.out.println("列族为:" + Bytes.toString(CellUtil.cloneFamily(c)));
System.out.println("值为:" + Bytes.toString(CellUtil.cloneValue(c)));
}
}
} //8.扫描指定的数据
public static void getRow(String tableName, String rowkey) throws IOException {
//对表操作需要用HBaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表对象
Table t = connection.getTable(TableName.valueOf(tableName)); //1.扫描指定数据需要实例Get
Get g = new Get(Bytes.toBytes(rowkey));
//2.可加过滤条件
g.addFamily(Bytes.toBytes("info")); Result rs = t.get(g);
Cell[] cells = rs.rawCells(); //3.遍历
//遍历具体数据
for (Cell c : cells) {
System.out.println("行键为:" + Bytes.toString(CellUtil.cloneRow(c)));
System.out.println("列族为:" + Bytes.toString(CellUtil.cloneFamily(c)));
System.out.println("值为:" + Bytes.toString(CellUtil.cloneValue(c)));
}
} public static void main(String[] args) throws IOException {
// System.out.println(isExist("emp11"));
// createTable("zhaosi","henshuai","feichangshuai");
// createTable("zhaosi","info"); // deleteTable("zhaosi");
// createTable("yangmi","info");
// addRow("yangmi","101","info","age","18"); // deleteRow("yangmi","101","info");
// deleteAll("emp","1001","1002r");
// scanAll("yangmi");
getRow("lisi","102");
}
}
HBase简单API的更多相关文章
- Hbase客户端API基础小结笔记(未完)
客户端API:基础 HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供的,通过这个类,用户可以完成向HBase存储和检索数据,以及删除无 ...
- Phoenix(sql on hbase)简单介绍
Phoenix(sql on hbase)简单介绍 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC d ...
- HBase Python API
HBase Python API HBase通过thrift机制可以实现多语言编程,信息通过端口传递,因此Python是个不错的选择 吐槽 博主在Mac上配置HBase,奈何Zoomkeeper一直报 ...
- HBase编程 API入门系列之create(管理端而言)(8)
大家,若是看过我前期的这篇博客的话,则 HBase编程 API入门系列之put(客户端而言)(1) 就知道,在这篇博文里,我是在HBase Shell里创建HBase表的. 这里,我带领大家,学习更高 ...
- hbase java api样例(版本1.3.1,新API)
hbase版本:1.3.1 目的:HBase新API的使用方法. 尝试并验证了如下几种java api的使用方法. 1.创建表 2.创建表(预分区) 3.单条插入 4.批量插入 5.批量插入(客户端缓 ...
- HBase编程 API入门系列之HTable pool(6)
HTable是一个比较重的对此,比如加载配置文件,连接ZK,查询meta表等等,高并发的时候影响系统的性能,因此引入了“池”的概念. 引入“HBase里的连接池”的目的是: 为了更高的,提高程序的并发 ...
- 第四部分 数据搜索之使用HBASE的API实现条件查询
因为数据清洗部分需要用到Mapreduce,所以先解决hbase的问题,可以用命令先在hbase存一下简单的数据进行查询,之后只要替换数据就可以实现了原本功能 在看该部分前,确保Hase API看了, ...
- HBase伪分布式环境下,HBase的API操作,遇到的问题
在hadoop2.5.2伪分布式上,安装了hbase1.0.1.1的伪分布式 利用HBase的API创建个testapi的表时,提示 Exception in thread "main&q ...
- 使用hbase的api创建表时出现的异常
/usr/lib/jvm/java-7-openjdk-amd64/bin/java -Didea.launcher.port=7538 -Didea.launcher.bin.path=/usr/l ...
随机推荐
- chrome 插件地址 知乎
chrome运行内存过大:https://www.zhihu.com/question/20061319 chrome扩展程序:https://www.zhihu.com/question/19594 ...
- Java得到GET和POST请求URL和参数列表
一 获取URL:getRequestURL() 二 获取参数列表: 1.getQueryString() 只适用于GET,比如客户端发送http://localhost/testServlet?a=b ...
- jQuery——实现弹窗
window.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- C++ operator关键字
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...
- Farey Sequence(欧拉函数)
题意:给出式子F F中分子分母互质,且分子小于分母 例: F2 = {1/2} F3 = {1/3, 1/2, 2/3} F4 = {1/4, 1/3, 1/2, 2/3, 3/4} F5 = {1/ ...
- alert的美化,并且随滚动条滚动
onclick="sAlert('${vo.courseName}');" <script type="text/javascript" language ...
- 除去Scala的糖衣(13) -- Default Parameter Value
欢迎关注我的新博客地址:http://cuipengfei.me/ 好久没有写博客了,上一次更新竟然是一月份. 说工作忙都是借口,咋有空看美剧呢. 这半年荒废掉博客说到底就是懒,惯性的懒惰.写博客这事 ...
- Update 语句用于修改表中的数据。
语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
- mysql -- 存储过程中 declare 和 set 定义变量的区别
mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 ...
- 纪念,BZOJ AC 100题!
虽然说有将近50+是usaco,然后还有很多水题T_T 看来我还是刷水题.... 看来我还是那么弱. T_T 但是好歹也要留个纪念..