Hbase與Maven工程的Spring配置筆記
阿新 • • 發佈:2019-02-17
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> <!-- Hadoop--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-hadoop</artifactId> <version>2.4.0.RELEASE</version> </dependency> <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中寫法:
package com.whut.monitor.dao;
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;
}
可以測試了,以上是最簡單的調通流程,真正使用得還好翻官方文件,不斷深入!