使用java操作hbase(单节点)
1.在运行java代码之前,一定要先启动Hbase,很重要!!
cd /home/cx/itcast/hbase-1.2.6/bin
./start-hbase.sh
2.新建一个java项目,导入相关的jar包,放在lib目录下,并右键build path将它们添加到referenced libraries
3.在项目下新建conf文件夹,将Hbase的配置文件hbase-site.xml复制到该目录,然后选择项目属性,在Libraies->add class
folder,将conf目录选上。(这一步代替了集群情况下,java连接zookeeper的操作)
hbase-site.xml配置如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/cx/myhbase1/</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/bigfish/myhbase1/zookeeper</value>
</property>
</configuration>
4.java代码如下:
package com.cx; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; public class Hbase1 {
static private Configuration conf=HBaseConfiguration.create();;
//------------------创建表操作 -------------------------------------
public static void createTable(String tableName,String[] cfs) throws Exception {
HBaseAdmin admin=new HBaseAdmin(conf);
if(admin.tableExists(tableName)) {
System.out.println("表已经存在");
}else {
//指定表名
HTableDescriptor htd=new HTableDescriptor(TableName.valueOf(tableName));
//添加列族
for(int i=0;i<cfs.length;i++) {
htd.addFamily(new HColumnDescriptor(cfs[i]));
}
//创建表
admin.createTable(htd);
System.out.println("表创建成功!");
}
admin.close();
}
//----------------------一次插入一条数据----------------------------------
public static void put
(String tableName,String row,String columnFamily,String column,String data) throws Exception{
//得到一个表对象
HTable table =new HTable(conf, tableName);
//得到一个Put对象
//将字符串转换为字符数组
Put put=new Put(Bytes.toBytes(row));
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(data));
//在表中放入put对象
table.put(put);
System.out.println("插入数据成功!");
table.close();
}
// //----------------------一次插入海量数据(1oow)--------------------------
// public static void putAll(String tableName) throws Exception{
// HTable table =new HTable(conf, tableName);
// //得到list对象//得到list对象
//
// List<Put> puts=new ArrayList<Put>(10000);
// for(int i=1;i<=1000000;i++) {
// Put put =new Put(Bytes.toBytes("rk"+i));
// put.add(Bytes.toBytes("info"), Bytes.toBytes("money"), Bytes.toBytes(""+i));
// puts.add(put);
// //每隔1w条放一次
// if(i%10000==0){
// table.put(puts);
// puts=new ArrayList<Put>(10000);//相当于清空
// }
// }
// table.put(puts);
// table.close();
// }
//------------------查询一个---------------------------
public static void get(String tableName,String row) throws IOException{
HTable table =new HTable(conf, tableName);
Get get =new Get(Bytes.toBytes(row));
//传get对象
//返回result对象
Result result=table.get(get);
String r=Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")));
System.out.println("get="+r);
table.close();
}
//---------------------查询多个-------------------------------
public static void scan(String tablename) throws Exception{
HTable table = new HTable(conf, tablename);
Scan scan = new Scan();
ResultScanner rs = table.getScanner(scan);
for(Result result:rs){
String r=Bytes.toString(result.getValue(Bytes.toBytes("info"),Bytes.toBytes("name")));
System.out.println("Scan:"+r);
}
table.close();
}
//----------------------更新(put将老版本覆盖,查询最新的)----------------- //-------------------------删除--------------------------------------
public static void del(String tableName) throws IOException{
HTable table =new HTable(conf, tableName);
//创建delete对象
Delete delete = new Delete(Bytes.toBytes("rk0003"));
table.delete(delete);
System.out.println("删除成功!");
table.close();
} public static void main(String args[]) throws Exception
{ String tableName="people";
String columnFamilys[]={"info","data"};
Hbase1.createTable(tableName, columnFamilys);
Hbase1.put(tableName,"rk0001" , "info", "name", "cx");
Hbase1.put(tableName,"rk0002" , "info", "name", "zhangsan");
Hbase1.put(tableName,"rk0001" , "info", "age", "20");
Hbase1.put(tableName,"rk0001" , "info", "sex", "male");
Hbase1.put(tableName,"rk0001" , "info", "height", "1.75");
Hbase1.put(tableName,"rk0002" , "info", "age", "22");
Hbase1.put(tableName,"rk0001" , "data", "sal", "10000");
Hbase1.put(tableName,"rk0003" , "info", "age", "25");
// Hbase1.putAll(tableName);
Hbase1.get(tableName,"rk0001");
Hbase1.scan(tableName);
Hbase1.del(tableName);
} }
5.运行无错误

6.在命令行中查询表是否建立成功

使用java操作hbase(单节点)的更多相关文章
- Java 操作 HBase 教程
Java 操作 HBase 教程 一.简介 二.hbase-client 引入 三.连接操作 四.表操作 五.运行测试 相关博文原文地址: 博客园:美码师:HBase(2) Java 操作 HBase ...
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- Java操作hbase总结
用过以后,总得写个总结,不然,就忘喽. 一.寻找操作的jar包. java操作hbase,首先要考虑到使用hbase的jar包. 因为咱装的是CDH5,比较方便,使用SecureCRT工具,远程连接到 ...
- java操作Hbase实例
所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.u ...
- 错误: 找不到或无法加载主类 java操作hbase出错
用java操作hbase 利用maven引入hbase包后发现无法启动程序,然后网上说是包的冲突. 我引入了下面三个包然后程序就不能运行了. <dependency> <groupI ...
- HBase单节点的安装与配置
HBase的安装配置1.下载:http://mirror.bit.edu.cn/apache/hbase/stable/ hbase-1.2.6-bin是直接编译好的,直接安装. hbase- ...
- Redis:Java链接redis单节点千万级别数据 写入,读取 性能测试
本文是对Redis 单节点,针对不同的数据类型,做插入行测试. 数据总条数为:10058624 环境说明: Redis 未做任何优化, 单节点 (服务器上, 内存64G) ...
- HBASE学习d端口master:16010(java操作hbase)https://www.cnblogs.com/junrong624/p/7323483.html
HBase提示已创建表,但是list查询时,却显示表不存在. https://blog.csdn.net/liu16659/article/details/80216085 下载网址 http://a ...
- 【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...
随机推荐
- Django day 33 vue中使用element-ui的使用,课程的相关介绍,vue绑定图片,课程列表接口,课程详情页面
一:vue中使用element-ui的使用, 二:课程的相关介绍, 三:vue绑定图片, 四:课程列表接口, 五:课程详情页面
- mysql的大数据量的查询
mysql的大数据量查询分页应该用where 条件进行分页,limit 100000,100,mysql先查询100100数据量,查询完以后,将 这些100000数据量屏蔽去掉,用100的量,但是如果 ...
- 【懒人专用系列】Xind2TestCase的初步探坑
公司最近说要弄Xind2TestCase,让我们组先试用一下 解释:https://testerhome.com/topics/17554 github项目:https://github.com/zh ...
- 全面学习ORACLE Scheduler特性(3)使用Programs
二.使用Programs 在论坛中偶尔见过有人讨论如何在ORACLE中执行操作系统命令,或是ORACLE数据库外的应用.应该说在9i及之前的版本中,虽然说并非完全无法实现(其实还是有多种方式能够变相实 ...
- MySql学习笔记(2)-简介
一.什么是MySql MySql是开放源代码的数据库管理系统之一: MySql是一个支持多线程高并发多用户的关系型数据库管理系统: MySql最擅长的是查询性能,而不是事务处理(需要借助第三方存储引擎 ...
- Android 你知道界面布局嵌套多少层之后会Crash吗
我们先放一张Hierarchy Viewer的图:(模拟器Android4.4) 看到数字6了吗,那个RelativeLayout是MainActivity的根ViewGroup, 而在Relativ ...
- ionic3带参数返回原来页面
最近用ionic3+angular4做项目.我遇到了个问题,我返回原来页面时一般都会调用this.navCtrl.pop()方法,但这个方法不能携带参数.怎么办? 可以写个回调方法. 我在a页面定义个 ...
- Errors reported here must be corrected before the service can be started
场景: 安装.配置Apache24时候,最后会给出提示,如图:Errors reported here must be corrected before the service can be star ...
- Python自动监控错误日志
平时在查看日志的时候打开满屏的日志,看上去有点凌乱.于是写个Python脚本过滤出想要看的错误的日志.直接上脚本 脚本示例 def read_log(logname,keyword): tell = ...
- HDU_1520_Anniversary party_树型dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...