序言html
最近公司一個汽車項目想用hbase作存儲,而後就有了這篇文字,來,來,來, 帶你一塊兒征服hbase,並推薦一本書《hbase權威指南》 這是一本極好的hbase入門書籍,我花了一個晚上看完以爲這書蠻好的!java
本文分上下兩篇,上篇是hbase+hadoop+hdfs+zookeeper集羣環境的安裝,下篇講解hbase如何集成spring來使用。hbase是個什麼鬼?不知道沒關係,本文是我三天的成果,拿去,不謝!node
Hbase+hadoop+hdfs+zookeeper集羣環境的安裝git
hadoop+hdfs安裝: http://www.cnblogs.com/tony-tang/articles/6472935.htmlgithub
zookeeper集羣安裝:http://www.cnblogs.com/tony-tang/articles/6473373.htmlredis
Hbase安裝:http://www.cnblogs.com/tony-tang/articles/6473360.htmlspring
HBase shell 命令建立表及添加數據操做: http://www.cnblogs.com/tony-tang/p/6473393.htmlmongodb
至此環境安裝已經結束,下篇重點介紹Hbase是如何集成spring的,須要的maven jar包依賴,以及HbaseTemplate的擴展!shell
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郵件。