分享

spring-hadoop之操作hbase

howtodown 发表于 2015-3-22 20:51:04 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 23758

问题导读

1.配置beans.xml中如何配置hbase的?
2.hbase模板的demo,如何实现查询列族下的列的数据?
3.Spring和Hadoop是如何结合的?






 Spring对于属于java web技术的程序员都不会陌生,jdbcTemplate更是用的熟之又熟,下面我们来认识一下Spring大家庭的新成员:Spring-data-hadoop项目。Spring-hadoop这个项目应该是在Spring Data项目的一部分(Srping data其余还包括把Spring和JDBC,REST,主流的NoSQL结合起来了)。其实再一想,Spring和Hadoop结合会发生什么呢,其实就是把Hadoop组件的配置,任务部署之类的东西都统一到Spring的bean管理里去了。
具体操作如下:

1、下载并导入需要的jar包:
  1. <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-configuration-1.6.jar"/>
  2.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-lang-2.5.jar"/>
  3.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-logging-1.1.1.jar"/>
  4.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/dom4j-1.6.1.jar"/>
  5.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/guava-11.0.2.jar"/>
  6.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/hadoop-auth-2.0.0-cdh4.4.0.jar"/>
  7.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/hadoop-common-2.0.0-cdh4.4.0.jar"/>
  8.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/hadoop-mapreduce-client-core-2.0.0-cdh4.4.0.jar"/>
  9.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/hbase-0.94.6-cdh4.4.0-security.jar"/>
  10.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/log4j-1.2.17.jar"/>
  11.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/protobuf-java-2.4.0a.jar"/>
  12.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/slf4j-api-1.6.1.jar"/>
  13.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/slf4j-log4j12-1.6.1.jar"/>
  14.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-aop-4.0.3.RELEASE.jar"/>
  15.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-aspects-4.0.3.RELEASE.jar"/>
  16.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-beans-4.0.3.RELEASE.jar"/>
  17.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-context-4.0.3.RELEASE.jar"/>
  18.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-context-support-4.0.3.RELEASE.jar"/>
  19.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-core-4.0.3.RELEASE.jar"/>
  20.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-data-hadoop-2.0.0.RC2-cdh4.jar"/>
  21.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-data-hadoop-batch-2.0.0.RC2-cdh4.jar"/>
  22.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-data-hadoop-core-2.0.0.RC2-cdh4.jar"/>
  23.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-data-hadoop-store-2.0.0.RC2-cdh4.jar"/>
  24.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-expression-4.0.3.RELEASE.jar"/>
  25.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-tx-4.0.3.RELEASE.jar"/>
  26.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-web-4.0.3.RELEASE.jar"/>
  27.     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/zookeeper-3.4.5-cdh4.4.0.jar"/>
复制代码

2、配置web.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">
  5.     <context-param>
  6.         <param-name>contextConfigLocation</param-name>
  7.         <param-value>classpath:beans.xml</param-value>
  8.     </context-param>
  9.    
  10.    
  11.     <listener>
  12.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  13.     </listener>
  14.     <!-- Spring 刷新Introspector防止内存泄露 -->
  15.     <listener>
  16.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  17.     </listener>
  18.    
  19.     <welcome-file-list>
  20.         <welcome-file>login.jsp</welcome-file>
  21.     </welcome-file-list>
  22. </web-app>
复制代码

3、配置beans.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.         xmlns:context="http://www.springframework.org/schema/context"
  5.         xmlns:p="http://www.springframework.org/schema/p"
  6.         xmlns:aop="http://www.springframework.org/schema/aop"
  7.         xmlns:hdp="http://www.springframework.org/schema/hadoop"
  8.         xsi:schemaLocation="
  9.             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  10.             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  11.             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  12.             http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop-2.0.xsd
  13.             ">
  14.    
  15.     <!-- 自动扫描beans+注解功能注册 -->
  16.     <context:component-scan base-package="net.xinhong"/>
  17.    
  18.     <hdp:configuration resources="classpath:/hbase-site.xml" />
  19.    
  20.     <hdp:hbase-configuration configuration-ref="hadoopConfiguration" />
  21.    
  22.     <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration"/>
  23.    
  24. </beans>
复制代码

4、将hbase-site.xml配置文件拷贝到src目录下,参考内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.   <property>
  4.     <name>hbase.rootdir</name>
  5.     <value>hdfs://nameservice1/hbase</value>
  6.   </property>
  7.   <property>
  8.     <name>hbase.client.write.buffer</name>
  9.     <value>62914560</value>
  10.   </property>
  11.   <property>
  12.     <name>hbase.client.pause</name>
  13.     <value>1000</value>
  14.   </property>
  15.   <property>
  16.     <name>hbase.client.retries.number</name>
  17.     <value>10</value>
  18.   </property>
  19.   <property>
  20.     <name>hbase.client.scanner.caching</name>
  21.     <value>1</value>
  22.   </property>
  23.   <property>
  24.     <name>hbase.client.keyvalue.maxsize</name>
  25.     <value>62914560</value>
  26.   </property>
  27.   <property>
  28.     <name>hbase.rpc.timeout</name>
  29.     <value>60000</value>
  30.   </property>
  31.   <property>
  32.     <name>hbase.security.authentication</name>
  33.     <value>simple</value>
  34.   </property>
  35.   <property>
  36.     <name>zookeeper.session.timeout</name>
  37.     <value>60000</value>
  38.   </property>
  39.   <property>
  40.     <name>zookeeper.znode.parent</name>
  41.     <value>/hbase</value>
  42.   </property>
  43.   <property>
  44.     <name>zookeeper.znode.rootserver</name>
  45.     <value>root-region-server</value>
  46.   </property>
  47.   <property>
  48.     <name>hbase.zookeeper.quorum</name>
  49.     <value>xinhong-hadoop-56,xinhong-hadoop-52,xinhong-hadoop-53</value>
  50.   </property>
  51.   <property>
  52.     <name>hbase.zookeeper.property.clientPort</name>
  53.     <value>2181</value>
  54.   </property>
  55. </configuration>
复制代码
5、hbase模板的demo:
查询列族下的列的数据:
  1. public List<String> find(String tableName,String family,String cloumn){
  2.         List<String> rows = hbaseTemplate.find(tableName, family,cloumn, new RowMapper<String>() {
  3.             public String mapRow(Result result, int rowNum) throws Exception {
  4.                 return Bytes.toString(result.getRow());
  5.             }
  6.         });
  7.         return rows;
  8.     }
复制代码
查询指定行健的一列数据:
  1. public String get(String tableName,String family,String cloumn,String rowKey){
  2.         String context = hbaseTemplate.get(tableName, "NCEP_p_wa_2014032212_tp_006.nc", family, cloumn, new RowMapper<String>() {
  3.             public String mapRow(Result result, int rowNum) throws Exception {
  4.                 return Bytes.toString(result.value());
  5.               }
  6.             });
  7.         return context;
  8.     }
复制代码

PS:其中RowMapper回调函数的使用方法可以参考http://www.cnblogs.com/zhangyukun/p/3685369.html来使用,用法大致相同。

转载请注明出处,期待共同进步...


已有(3)人评论

跳转到指定楼层
韩克拉玛寒 发表于 2015-3-23 09:21:12
特别好的文章
回复

使用道具 举报

ascentzhen 发表于 2016-2-26 15:12:21
学习了,之前没有集成到spring里面
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条