Hbase与Maven工程的Spring配置笔记
1、HBase基本操作
hbase shell: 连接到正在运行的HBase实例 help: 显示一些基本的使用信息以及命令示例。 需要注意的是: 表名, 行, 列都必须使用引号括起来 create 'test', 'cf': 创建一个新表, 必须要指定表明和列族名 list 'test': 列出 test 表的信息 put 'test', 'row1', 'cf:a', 'value1' 往表中插入数据, put 'test', 'row2', 'cf:b', 'value2' 我们插入了三行数据, 第一行的row key 是 row1, 列是 cf:a, 其值是 value1.HBase 中的列是由列族前缀, 冒号以及列名后缀组成 put 'test', 'row3', 'cf:c', 'value3' scan 'test' 一次扫描 HBase 表中的所有数据 get 'test', 'row1' 一次获取一行数据 disable 'test' 在某些情况下如果你想要删除表或是改变其设置, 需要先禁用表 enable 'test' 启用表 drop 'test' 删除表 quit: 退出HBase Shell, 但是 HBase 实例仍然在后台运行 stop-hbase.sh bin/start-hbase.sh 脚本可以很方便的启动所有 HBase 守护进程, 同样的, bin/stop-hbase.sh 脚本可以很方便的停止所有 HBase 守护进程 jps 来确保 HMaster 和 HRegionServer 进程都已经关闭
2、示例工程配置
【pom.xml】自己结合工程:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <hbase.version>2.5.1</hbase.version> <spring-data-hadoop.version>2.4.0.RELEASE</spring-data-hadoop.version> t;!-- Hadoop--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-hadoop</artifactId> <version>2.4.0.RELEASE</version> </dependency> lt;dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.2.1</version> </dependency>
网上例子:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <hbase.version>1.2.2</hbase.version> <spring-data-hadoop.version>2.4.0.RELEASE</spring-data-hadoop.version> </properties> <dependencies> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>${hbase.version}</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-hadoop</artifactId> <version>${spring-data-hadoop.version}</version> </dependency> </dependencies>
【Spring配置文件-直接指定】
web.xml中到applicationContext.xml:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
创建一个 Spring 配置文件 spring-hbase.xml,在该文件中配置与 HBase 连接相关的信息。直接指定 HDFS 地址以及 ZooKeeper 的地址和端口号。
自己结合工程
写到了applicationContext.xml中,不建立spring-hbase.xml:
xmlns:hdp="http://www.springframework.org/schema/hadoop" xsi:schemaLocation中加: http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd <!-- 配置hbase连接 --> <!-- HDFS配置 --> <hdp:configuration id="hadoopConfiguration">fs.default.name=hdfs://192.168.1.100:9001</hdp:configuration> <!-- HBase连接配置 --> <hdp:hbase-configuration id="hbaseConfiguration" zk-quorum="192.168.1.101,192.168.1.101,192.168.1.102" zk-port="2181"/> <!-- HbaseTemplate Bean配置--> <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate"> <property name="configuration" ref="hbaseConfiguration"></property> </bean>
网上例子:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hdp="http://www.springframework.org/schema/hadoop" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop-2.3.xsd"> <!-- HDFS配置 --> <hdp:configuration id="hadoopConfiguration"> fs.defaultFS="hdfs://localhost:9000" </hdp:configuration> <!-- HBase连接配置 --> <hdp:hbase-configuration id="hbaseConfiguration" zk-quorum="127.0.0.1" zk-port="2181"/> <!-- HbaseTemplate Bean配置--> <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration"/> </beans>
3、测试代码
自己结合工程-测试:
package com.whut.monitor.hbase.test; import 略; //@RunWith(SpringJUnit4ClassRunner.class) //@ContextConfiguration(locations = "classpath:applicationContext.xml") public class HBaseTest { private static final String TABLE_NAME = "test"; private static final String ROW_KEY = "row1"; private static final String COLUMN_FAMILY = "cf"; private static final String QUALIFIER = "a"; @Test public void test() { // 加载Spring配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); // 获取HbaseTemplate HbaseTemplate hbaseTemplate = (HbaseTemplate) applicationContext.getBean("hbaseTemplate"); // 通过表名和rowKey获取最近一行数据 String result = hbaseTemplate.get(TABLE_NAME, ROW_KEY, new RowMapper<String>() { public String mapRow(Result result, int rowNum) throws Exception { return Bytes.toString(result.getValue(COLUMN_FAMILY.getBytes(), QUALIFIER.getBytes())); } }); System.out.println(result); // 输出结果是:value1 } }
自己结合工程-IHBaseDao.java中写法:
public interface IHBaseDao { String find(String tableName, String key, final String family, final String qualifier); } HBaseDaoImpl.java: package com.whut.monitor.dao.impl; import 略; @Component public class HBaseDaoImpl implements IHBaseDao { @Resource(name="hbaseTemplate") private HbaseTemplate hbaseTemplate; @Override public String find(String tableName, String key, final String family, final String qualifier) { String result = hbaseTemplate.get(tableName, key, new RowMapper<String>() { public String mapRow(Result result, int rowNum) throws Exception { return Bytes.toString(result.getValue(family.getBytes(), qualifier.getBytes())); } }); return result; } }
添加数据:
public Boolean execute(String tableName, final String key,final String family,final String qualifier,final String value) { return hbaseTemplate.execute(tableName, new TableCallback<Boolean>() { public Boolean doInTable(HTableInterface table) throws Throwable { boolean flag = false; try{ byte[] rowkey = key.getBytes(); Put put = new Put(rowkey); put.add(Bytes.toBytes(family),Bytes.toBytes(qualifier), Bytes.toBytes(value)); table.put(put); flag = true; }catch(Exception e){ e.printStackTrace(); } return flag; } }); System.out.println("test poi jfz sandeepin");; return true; }
可以测试了,以上是最简单的调通流程,真正使用得还好翻官方文档,不断深入!
文章目录