序言
最近公司一個汽車項目想用hbase做存儲,然后就有了這篇文字,來,來,來, 帶你一起征服hbase,並推薦一本書《hbase權威指南》 這是一本極好的hbase入門書籍,我花了一個晚上看完覺得這書蠻好的!
本文分上下兩篇,上篇是hbase+hadoop+hdfs+zookeeper集群環境的安裝,下篇講解hbase如何集成spring來使用。hbase是個什么鬼?不知道不要緊,本文是我三天的成果,拿去,不謝!
Hbase+hadoop+hdfs+zookeeper集群環境的安裝
hadoop+hdfs安裝: http://www.cnblogs.com/tony-tang/articles/6472935.html
zookeeper集群安裝:http://www.cnblogs.com/tony-tang/articles/6473373.html
Hbase安裝:http://www.cnblogs.com/tony-tang/articles/6473360.html
HBase shell 命令創建表及添加數據操作: http://www.cnblogs.com/tony-tang/p/6473393.html
至此環境安裝已經結束,下篇重點介紹Hbase是如何集成spring的,需要的maven jar包依賴,以及HbaseTemplate的擴展!
Hbase集成spring
前言
在集成Hbase之前問過同城一架構師朋友他們公司怎么用Hbase的,得到的答案是"直接用",呵呵,我理解這個直接用類似數據庫連接一樣直接用jdbc,沒有集成框架,而筆者以前玩過redis、mongodb與spring的集成,想着應該spring也可以集成Hbase,然后就是找資源,maven私服、github,spring官網上各種搜索,果然我再次感受到了spring的強大,還真有,廢話不多說了,上手吧!
1.maven pom配置
這只是Hbase需要的jar包,當然你項目中還需要spring框架的依賴包,筆者這里用的是2.2.0.RELEASE的版本,因為公司spring是4.1.6的版本。
<properties>
<hbase.version>0.98.8-hadoop2</hbase.version>
<spring.hadoop.version>2.2.0.RELEASE</spring.hadoop.version>
<hadoop.version>2.6.0</hadoop.version>
</properties>
<dependencies>
<!-- spring-hadoop -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-hadoop</artifactId>
<version>${spring.hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-hadoop-store</artifactId>
<version>${spring.hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<artifactId>netty</artifactId>
<groupId>io.netty</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.0</version>
<scope>runtime</scope>
</dependency>
<!-- hadoop-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
</exclusion>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
</exclusion>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
</exclusion>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
</exclusion>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>servlet-api-2.1</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
<exclusion>
<groupId>tomcat</groupId>
<artifactId>jasper-compiler</artifactId>
</exclusion>
<exclusion>
<groupId>tomcat</groupId>
<artifactId>jasper-runtime</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>${hadoop.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-protocol</artifactId>
<version>${hbase.version}</version>
</dependency>
</dependencies>
2.application-hbase.xml文件配置
我們需要的是hbaseTemplate對象,而hbaseTemplate需要配置hbaseConfiguration 所以需要配置 <hdp:hbase-configuration>,hbase-configuration默認id取名為hbaseConfiguration,所以好奇的你一定在想hbaseConfiguration從哪里冒出來的。
而hdp:hbase-configuration 又需要配置 hdp:configuration所以咋一看hdp:configuration這是個什么鬼,沒什么用,“Hadoop HDFS為HBase提供了高可靠性的底層存儲支持,Hadoop MapReduce為HBase提供了高性能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制”,摘自Hbase百科,其實Hbase也可以本地存儲,它的底層存儲支持是可插拔的不一定非要是HDFS,如果選擇其他的底層存儲支持可能會出現你想不到的兼容問題!
3.base_info.properties配置
#----------------------hbase config start-------------------------------
hd.fs=hdfs://namenode1:9000/hbase
zk.quorum=namenode1,datanode1,datanode2
zk.port=2181
fs.defaultFS=hdfs://namenode1:9000/
#----------------------hbase config end-------------------------------
4.接口定義
IHbaseService接口:
5.接口實現
實現類封裝了對Hbase的CRUD操作
HbaseServic實現類:
ReqEntity參數實體
ReqEntity實體類

6.Windows環境調試
1.在windows環境調試的時候需要 hadoop-2.6.0環境,
設置環境變量:
HADOOP_HOME:D:\Program Files\hadoop-2.6.0
Path中添加 %HADOOP_HOME%\bin
備注:hadoop原生的下載包不包含winutils.exe
所以需要下載 hadoop-common-2.2.0-bin-master.zip包:http://pan.baidu.com/s/1qYdKnJQ
並將hadoop-common-2.2.0-bin-master\bin目錄下的文件替換到 %HADOOP_HOME%\bin目錄下。
2.需要在C:\Windows\System32\drivers\etc\hosts 文件配置域名(ip為zk集群配置的地址,否則會連不上zk):
192.168.6.10 namenode1
192.168.6.11 datanode01
192.168.6.12 datanode02
7.結束語
Spring集成Hbase就簡單介紹到這里,其中筆者遇到非常多問題,都是一步一步走過來了,如果你也正思考如何使用Hbase,那么本文對你非常有用。如果您對本文有疑問或者意見請給我評論。如果你使用過程中遇到問題可以添加我QQ:515173248 也可以給我QQ郵件。