前言
X-Pack Spark可以使用Spark on HBase Connector直接对接HBase数据库,读取HBase数据表数据。有时在读取HBase时需要设置HBase的一些参数调整性能,例如通过设置hbase.client.scanner.caching的大小调整读取HBase数据的性能。使用Spark作为客户端查询HBase数据库的客户端需要有传递参数的能力。本文就列举了Spark侧传递HBase参数的方法。
注意:本文的案例以X-Pack Spark和云HBase数据库作为背景。
案例描述
提前在HBase中创建一张表,表的格式如下:
表名:hbase_t0
CF: cf1
column1: cf1:col_str
column2: cf1:col_int
column3: cf1:col_float
column4: cf1:col_double
column5: cf1:boolean
然后通过Spark on HBase Connector 在Spark侧创建表映射到HBase的表。建表语句如下:
CREATE TABLE spark_hbase_t01 USING org.apache.hadoop.hbase.spark
OPTIONS ('catalog'=
'{"table":{"namespace":"default", "name":"hbase_t01"},"rowkey":"key",
"columns":{
"col_key":{"cf":"rowkey", "col":"key", "type":"string"},
"col_str":{"cf":"cf1", "col":"col_str", "type":"string"},
"col_int":{"cf":"cf1", "col":"col_int", "type":"int"},
"col_float":{"cf":"cf1", "col":"col_float", "type":"float"},
"col_double":{"cf":"cf1", "col":"col_double", "type":"double"},
"col_boolean":{"cf":"cf1", "col":"col_boolean", "type":"boolean"}}}',
'hbase.zookeeper.quorum' = '${zkAddress}'
)
Spark创建表后可以直接通过如下SQL查询HBase表数据。
select count(*) from spark_hbase_t01
那么如何在Spark侧直接设置HBase客户端参数呢,例如设置hbase.client.scanner.caching:。下面介绍下在Spark侧如何设置HBase的参数。
1、通过建表语句中添加“hbaseConfiguration”配置项直接添加HBase配置,如下:
CREATE TABLE spark_hbase_t01 USING org.apache.hadoop.hbase.spark
OPTIONS ('catalog'=
'{"table":{"namespace":"default", "name":"hbase_t01"},"rowkey":"key",
"columns":{
"col_key":{"cf":"rowkey", "col":"key", "type":"string"},
"col_str":{"cf":"cf1", "col":"col_str", "type":"string"},
"col_int":{"cf":"cf1", "col":"col_int", "type":"int"},
"col_float":{"cf":"cf1", "col":"col_float", "type":"float"},
"col_double":{"cf":"cf1", "col":"col_double", "type":"double"},
"col_boolean":{"cf":"cf1", "col":"col_boolean", "type":"boolean"}}}',
'hbase.zookeeper.quorum' = '${zkAddress}',
'hbaseConfiguration'='{"hbase.client.scanner.caching":"10"}'
)
如上语句,可以通过在建表语句中添加一个配置:'hbaseConfiguration'='{"hbase.client.scanner.caching":"10"}',这里面也可以设置多个参数,例如:
'hbaseConfiguration'='{"hbase.client.scanner.caching":"10","hbase.client.scanner.max.result.size"="2097152"}'
2、通过建表语句中添加“hbaseConfigFile”配置项添加HBase配置文件hbase-site.xml,如下:
CREATE TABLE spark_hbase_t01 USING org.apache.hadoop.hbase.spark
OPTIONS ('catalog'=
'{"table":{"namespace":"default", "name":"hbase_t01"},"rowkey":"key",
"columns":{
"col_key":{"cf":"rowkey", "col":"key", "type":"string"},
"col_str":{"cf":"cf1", "col":"col_str", "type":"string"},
"col_int":{"cf":"cf1", "col":"col_int", "type":"int"},
"col_float":{"cf":"cf1", "col":"col_float", "type":"float"},
"col_double":{"cf":"cf1", "col":"col_double", "type":"double"},
"col_boolean":{"cf":"cf1", "col":"col_boolean", "type":"boolean"}}}',
'hbase.zookeeper.quorum' = '${zkAddress}',
'hbaseConfigFile'='./hbase-site.xml'
)
如上,hbaseConfigFile指定的路径需要是Spark程序运行的集群上的路径。可以通过如下方式把文件上传到Spark集群。在X-Pack Spark 控制台的提交命令如下:
--class com.aliyun.spark.hbase.SparkOnHBase_submit
--driver-memory 1G
--driver-cores 1
--executor-cores 1
--executor-memory 1G
--num-executors 12
--name mingyuanyun_test
--files /test/hbase-site.xml
/test/spark-examples-0.0.1-SNAPSHOT.jar
${zkAddress}
hbase_t01 spark_on_hbase02 ./hbase-site.xml
如上,提交Spark任务时,通过--files把hbase-site.xml提交到Spark程序运行的集群上。然后Spark on HBase Connector 会加载hbase-site.xml的配置文件。
小结
X-Pack Spark详细介绍可参考:Spark 基本介绍。
X-Pack HBase 介绍可参考:云HBase X-Pack 概述。