springboot+maven+hbase 操作訪問hbase並處理資料
阿新 • • 發佈:2018-12-10
1.maven依賴:(hbase 依賴的包中會和其他包中有衝突,所以在此選擇忽略)
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.3.0</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions> </dependency>
2.yml檔案配置
hbase: config: hbase.zookeeper.quorum: xxx.xxx.xxx.xxx hbase.zookeeper.port: 2181 hbase.zookeeper.znode: /hbase hbase.client.keyvalue.maxsize: 1572864000
3.HbaseProperties 內容
import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.Map; @ConfigurationProperties(prefix = "hbase") public class HbaseProperties { private Map<String, String> config; public Map<String, String> getConfig() { return config; } public void setConfig(Map<String, String> config) { this.config = config; } }
4.HbaseConfig 配置
import org.apache.hadoop.hbase.HBaseConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; import java.util.Map; import java.util.Set; @Configuration @EnableConfigurationProperties(HbaseProperties.class) public class HbaseConfig { private final HbaseProperties properties; public HbaseConfig(HbaseProperties properties) { this.properties = properties; } public org.apache.hadoop.conf.Configuration configuration() { org.apache.hadoop.conf.Configuration configuration = HBaseConfiguration.create(); Map<String, String> config = properties.getConfig(); Set<String> keySet = config.keySet(); for (String key : keySet) { configuration.set(key, config.get(key)); } return configuration; } }
5.HbaseService 介面
public interface HbaseService { String getValue(String tableName, String rowkey, String family, String column); }
6.HbaseServiceImpl 介面實現類
@Service public class HbaseServiceImpl implements HbaseService{ private static final Logger log = LoggerFactory.getLogger(HbaseServiceImpl.class); @Autowired private HbaseConfig con; /** * 根據tableName,rowkey,family coluem 查詢單個數據 */ public String getValue(String tableName, String rowkey, String family, String column) { Table table = null; Connection connection=null; String res = ""; if (StringUtils.isBlank(tableName) || StringUtils.isBlank(family) || StringUtils.isBlank(rowkey) || StringUtils.isBlank(column)) { return null; } try { connection = ConnectionFactory.createConnection(con.configuration()); table = connection.getTable(TableName.valueOf(tableName)); Get g = new Get(rowkey.getBytes()); g.addColumn(family.getBytes(), column.getBytes()); Result result = table.get(g); List<Cell> ceList = result.listCells(); if (ceList != null && ceList.size() > 0) { for (Cell cell : ceList) { res = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); } } } catch (IOException e) { e.printStackTrace(); }finally { try { table.close(); connection.close(); }catch (IOException e) { e.printStackTrace(); } } return res; }
7.引數說明(想要了解更多hbase的資料儲存結構,可自行百度瞭解)
tableName:hbase表名,
rowkey:rowkey規則(i_20180910),
family:列簇,
column :列
注:此例子只是單個數據獲取,有需要批量獲取資料的,或則分頁處理,可以給我留言,整理的不好,請見諒~~~~~~