maven的配置
<!-- hbase start --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-hadoop</artifactId> <version>${spring.hadoop.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <!-- hadoop start --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> <scope>compile</scope> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <!-- hadoop end --> <!-- hbase start --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>${hbase.version}</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</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>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <!-- hbase end -->
import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.hadoop.hbase.HbaseTemplate; import java.io.IOException; /** * HbaseTempalteConfig * * @ClassName: HbaseTempalteConfig * @author kanpiaoxue * @version 1.0 * @CreateTime: 2020/04/10 14:19:41 * @Description: */ @Configuration public class HbaseTempalteConfig { private static final Logger LOGGER = LoggerFactory.getLogger(HbaseTempalteConfig.class); @Value("${hbase.zookeeper.quorum}") private String zkQuorum; @Value("${hbase.zookeeper.port:2181}") private Integer zkPort; @Value("${hbase.zookeeper.znode.parent}") private String zkZnodeParent; @Bean public Admin hbaseAdmin(@Autowired org.apache.hadoop.conf.Configuration configuration) throws IOException { LOGGER.debug("start to hbaseAdmin. zkQuorum:{},zkPort:{},zkZnodeParent:{}", zkQuorum, zkPort, zkZnodeParent); Connection connection = ConnectionFactory.createConnection(configuration); Admin admin = connection.getAdmin(); return admin; } @Bean public org.apache.hadoop.conf.Configuration hbaseConfiguration() { LOGGER.debug("start to hbaseConfiguration. zkQuorum:{},zkPort:{},zkZnodeParent:{}", zkQuorum, zkPort, zkZnodeParent); org.apache.hadoop.conf.Configuration configuration = HBaseConfiguration.create(); configuration.set(HConstants.ZOOKEEPER_QUORUM, zkQuorum); configuration.set(HConstants.ZOOKEEPER_CLIENT_PORT, String.valueOf(zkPort)); configuration.set(HConstants.ZOOKEEPER_ZNODE_PARENT, zkZnodeParent); configuration.set("log4j.logger.org.apache.hadoop.hbase", "DEBUG"); // 设置keyvalue.maxsize的大小限制,这里设置500M = 500*1024*1024 configuration.set("hbase.client.keyvalue.maxsize", "524288000"); return configuration; } @Bean public HbaseTemplate hbaseTemplate(@Autowired org.apache.hadoop.conf.Configuration configuration) { LOGGER.debug("start to hbaseTemplate. zkQuorum:{},zkPort:{},zkZnodeParent:{}", zkQuorum, zkPort, zkZnodeParent); HbaseTemplate hbaseTemplate = new HbaseTemplate(configuration); return hbaseTemplate; } }
import org.apache.commons.io.IOUtils; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.hadoop.hbase.HbaseTemplate; import org.springframework.stereotype.Service; import com.google.common.base.Preconditions; import com.google.common.io.ByteSource; import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Objects; import javax.annotation.PostConstruct; /** * HBase的文件服务实现类 * * @ClassName: HBaseRemoteTargetFileServiceImpl * @author kanpiaoxue * @version 1.0 * @CreateTime: 2020/04/10 16:12:51 * @Description: */ @Service public class HBaseRemoteTargetFileServiceImpl implements RemoteTargetFileService { private static final Logger LOGGER = LoggerFactory.getLogger(HBaseRemoteTargetFileServiceImpl.class); @Autowired private Admin admin; @Autowired private HbaseTemplate hbaseTemplate; @Value("${hbase.table.name}") private String tableName; @Value("${hbase.table.column.family}") private String columnFamily; @Value("${hbase.table.column.columnName}") private String column; private byte[] tableNameAsBytes; private byte[] columnFamilyAsBytes; private byte[] columnAsBytes; @Override public InputStream getFile(String key) throws Exception { LOGGER.info("start to getFile. key:{}", key); key = CommonUtils.checkStringArgs(key, "key"); InputStream input = hbaseTemplate.get(tableName, key, (Result result, int rowNum) -> { byte[] value = result.getValue(columnFamilyAsBytes, columnAsBytes); if (Objects.isNull(value)) { return null; } InputStream targetStream = ByteSource.wrap(value).openStream(); return targetStream; }); CommonUtils.checkDataExist(input, String.format( "can not find data with tableName:%s,columnFamily:%s,column:%s,key:%s from hbase", tableName, columnFamily, column, key)); return input; } @PostConstruct public void initialize() throws Exception { LOGGER.info("start to initialize. tableName:{},columnFamily:{},column:{},admin:{},hbaseTemplate:{}", tableName, columnFamily, column, admin, hbaseTemplate); Preconditions.checkNotNull(admin, "admin is null"); Preconditions.checkNotNull(hbaseTemplate, "hbaseTemplate is null"); initTableInfo(); initTable(); LOGGER.info("finish initializing. tableName:{},columnFamily:{},column:{},admin:{},hbaseTemplate:{}", tableName, columnFamily, column, admin, hbaseTemplate); } @Override public void saveFile(String key, File file) throws Exception { LOGGER.info("start to saveFile. key:{},file:{}", key, file); CommonUtils.checkStringArgs(key, "key"); Preconditions.checkNotNull(file, "file is null"); Preconditions.checkArgument(file.exists(), "file:%s does not exist.", file); Preconditions.checkArgument(file.isFile(), "file:%s is not a valid file.", file); try (InputStream input = Files.asByteSource(file).openStream()) { byte[] value = IOUtils.toByteArray(input); hbaseTemplate.put(tableName, key, columnFamily, column, value); } } private void initTable() throws IOException { LOGGER.info("start to initializeTable."); TableName tableName = TableName.valueOf(tableNameAsBytes); if (!admin.tableExists(tableName)) { LOGGER.info("tableName:{} does not exist. create it.", tableName); HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); HColumnDescriptor columnDescriptor = new HColumnDescriptor(columnFamily); tableDescriptor.addFamily(columnDescriptor); admin.createTable(tableDescriptor); } } private void initTableInfo() { LOGGER.info("start to initTableInfo."); tableName = CommonUtils.checkStringArgs(tableName, "tableName"); columnFamily = CommonUtils.checkStringArgs(columnFamily, "columnFamily"); column = CommonUtils.checkStringArgs(column, "column"); tableNameAsBytes = Bytes.toBytes(tableName); columnFamilyAsBytes = Bytes.toBytes(columnFamily); columnAsBytes = Bytes.toBytes(column); } }
参考文档:
1、https://www.baeldung.com/hbase
2、https://www.jianshu.com/p/c04993cf85ac
3、https://docs.spring.io/spring-hadoop/docs/1.0.0.RELEASE/reference/html/hbase.html
相关推荐
Java操作hbase完成hbase数据文件下载
为了使用Spring Boot Starter Hbase,你需要在你的Spring Boot项目中添加对应的依赖(在这里是"spring-boot-starter-hbase"),然后配置HBase的相关属性,如Zookeeper的地址、HBase的命名空间和表名等。接着,你可以...
在spring-boot项目的application.properties文件中加入spring.data.hbase.quorum,spring.data.hbase.rootDir,spring.data.hbase.nodeParent配置项,并赋予正确的值 使用 query 将上述配置项赋予正确的值 d
1. **配置HBase**: 在`application.properties`或`application.yml`中配置HBase的相关信息,如`spring.data.hbase.zookeeper.quorum`用于设置Zookeeper服务器列表,`spring.data.hbase.root-dir`指定HBase的根目录。...
4. **HBase集成**:对于HBase这样的NoSQL数据库,Spring Data Hadoop提供了`HBaseTemplate`,它提供了与HBase交互的高级API,包括增删查改操作。同时,还有针对HBase的Repository接口,使得操作HBase如同操作关系...
Spring Data Hadoop官方文档涉及了多个关于如何使用Spring Data Hadoop框架及其与Hadoop生态系统的集成的相关知识点。以下为文档中提到的主要知识点: 1. **Hadoop基本配置、MapReduce和分布式缓存**: - Spring ...
Spring Data Hadoop是Spring框架的一部分,它为开发人员提供了一种简单的方式来使用Hadoop生态系统的组件,如HDFS、MapReduce和HBase等。在1.0.1.RELEASE这个版本中,它继续致力于简化Hadoop编程模型,让Java开发者...
### SpringData知识点详解 #### SpringData简介 SpringData是Spring框架下的一个重要子项目,它的主要目标是为开发者提供一种统一的方式来访问不同的数据存储系统。通过SpringData,开发者能够以一致的方式处理不同...
#### 三、SpringData方法定义规范 Spring Data JPA 通过定义方法名的约定来推断方法的行为。以下是一些常用的方法名前缀和示例: - **查询所有数据**:`findAll()` 或 `findUsers()`(假设实体类名为 User)。 - *...
Spring Data HBase 是 Spring 提供的一套用于操作 HBase 的库,它简化了 HBase 数据访问的代码编写。确保在 Maven 或 Gradle 的配置文件中包含 Spring Data HBase 的依赖: ```xml <groupId>org.springframework....
* hbase-client:提供了HBase的客户端依赖项,版本号为1.1.2。 * spring-data-hadoop:提供了Hadoop的依赖项,版本号为2.5.0.RELEASE。 知识点3:HBase的配置 HBase的配置可以通过XML文件或注解方式进行。下面是一...
例如,服务层可能有一个`saveData`方法,接收用户数据,然后通过`HBaseRepository`将数据写入HBase。 为了便于测试,`spring-hbase`压缩包可能包含了JUnit测试类,这些测试会模拟各种场景,确保Spring与HBase的整合...
【标题】"HOS-Service:使用HBase和Spring Boot开发的文件系统"涉及的关键技术主要集中在两个核心组件上:HBase与Spring Boot。HBase是Apache的一个分布式、高性能、基于列族的NoSQL数据库,而Spring Boot是Java领域...
在Spring 3.0版本之后,Spring Data Hadoop开始被引入,为开发者提供了一套声明式的编程模型,用于处理Hadoop的MapReduce任务、HDFS操作以及HBase等组件的集成。 在集成Spring 3和Hadoop 0.2.0时,首先需要确保安装...
<bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HBaseTemplate"> ``` 4. **定义实体类**:为了方便操作,我们可以创建一个实体类,该类的属性对应HBase表中的列。例如,如果我们有...
最后,由于我们可能需要处理HBase连接,所以还需要`hbase-client`。这些依赖可以通过Maven或Gradle配置文件来引入。 ```xml <!-- Maven 示例 --> <groupId>org.springframework.boot <artifactId>spring-boot-...
1. **HbaseTemplate的初始化**:在使用HbaseTemplate之前,我们需要在Spring配置文件中配置HBase的相关连接信息,如Zookeeper地址、HBase表名等,并实例化HbaseTemplate。这通常通过@Autowired注解和@Configuration...
- 下载并安装HBase,根据集群还是单机模式,配置相应的配置文件,如`hbase-site.xml`和`hbase-env.sh`。 - 启动HBase集群,包括Master、RegionServer和Zookeeper服务。 - 创建HBase表并分配Region。 6. **...
对于NoSQL数据库,SpringData支持MongoDB(文档数据库)、Neo4j(图形数据库)、Redis(键/值存储)和Hbase(列族数据库)。对于关系型数据库,SpringData主要支持JDBC和JPA技术。 SpringDataJPA是SpringData项目中...