通过LakeHouse访问HBase
移动云HBase支持使用移动云LakeHouse进行访问,用户可以对HBase上的数据进行Spark分析也可以将Spark分析数据存储到HBase中,从而为用户提供数据分析挖掘与存储计算能力。
实现原理
用户订购HBase服务后,使用Spark作业进行实时计算,需要先把自编Spark应用jar包上传至对象存储EOS服务中,然后在云原生大数据分析Lakehouse服务中提交Spark作业,最后进行自定义的业务分析。
在自编写的Spark应用jar包中,可以选择以BulkLoad方式快速将计算分析结果导入HBase中,将Spark应用分析结果(RDD)写入HBase底层HDFS集群中,然后调用doBulkLoad的工具加载进HBase。Spark也可以通过Scanner访问HBase内的数据。
前提条件
- 已订购LakeHouse实例,并与HBase实例在同一资源池,具体请参见创建LakeHouse实例;
- 已开通对象存储EOS,并与LakeHouse实例在同一资源池,具体请参见开通对象存储服务;
- 在HBase集群中创建一张数据表,用于存储Spark分析结果。
说明
目前仅苏州资源池支持移动云HBase支持使用移动云LakeHouse进行访问,并进行Spark分析。
操作步骤
1. 编写访问HBase的SparkApplication,配置连接HBase、HDFS信息示例代码如下所示:
Configuration hbConf = HBaseConfiguration.create();
// for hbase
hbConf.set("hbase.client.username", "<username>"); //集群管理-数据库连接中获取
hbConf.set("hbase.client.accessKey", "<accessKey>");
hbConf.set("hbase.zookeeper.quorum", "<IP>:<Port>");
hbConf.set("zookeeper.znode.parent", "/hbase");
hbConf.set("hbase.client.retries.number", "3");
// for router
hbConf.set("fs.hdfs.impl", DistributedFileSystem.class.getName());
hbConf.set("dfs.federation.router.bcid.userName", "<name>");
hbConf.set("dfs.federation.router.bcid.passWord", "<password>"); //与上面username和accessKey相同
// for bulkload
hbConf.set("hbase.mapreduce.hfileoutputformat.table.name", "表名"); //HBase中创建的表名
hbConf.set("user.data.path.prefix", "hdfs://mycluster/hbase/hbase-router-2020-10/data/tmp");
将计算分析结果生成HFile文件。
RDD[ImmutableBytesWritavle.class, keyValue.class].saveAsNewAPIHadoopFile(hfilePath, ImmutableBytesWritable.class, KeyValue.class, HFileOutputFormat2.class, hbConf)
//hfilePath是hdfs路径信息,hbConf是上面的配置信息
将HFile文件加载进HBase。
Improt org.apache.hadoop.hbase.tool.LoadIncrementalHFiles
LoadIncrementalHFiles bulkLoader = new LoadIncrementalHFiles(hbConf);
bulkLoader.doBulkLoad(new Path(hfilePath), admin, table, regionLocator);
//LoadIncrementalHFiles类为hbase-server包中的类。必须使用移动云HBase客户端中的hbase-server包。
必填参数说明如下表所示:
参数名称 | 参数值 | 说明 |
dfs.federation.router.bcid.userName | hbase | HBas集群用户名,用于访问DHFS路径 |
dfs.federation.router.bcid.passWord | - | HBase集群访问密码,请在集群详情页面获取,用于访问HDFS路径 |
user.data.path.prefix | - | 请在集群详情页面获取,bulkload使用 |
hdfs://ip:port/default | - | HDFS路径名,请在集群详情页面获取 |
host:port | - | 访问HDFS的IP和端口,请在集群详情页面获取 |
2. 将SparkApplication JAR包上传至移动云对象存储中,具体操作详见上传文件。
3. 在LakeHouse控制台 > Spark作业管理中,提交访问HBase的Spark作业,详见Spark作业管理,Spark作业代码示例如下所示:
{
"name": "<name>",#任务名称,可自定义
"className": "<name>",#用户本地运行jar执行文件mian函数的类名,Java或者Scala程序入口类。如果是Python则不需要指定。
"file": "s3a://testlakehouse/spark9/spark-bulkload-test-3.0-SNAPSHOT7.jar",#提交spark作业运行jar包的存放路径,s3a://固定的文件路径开头
"endpoint": "http://<IP>",#对象存储 >桶详情> 域名访问(内网域名)
"accessKey": "<AccessKey>",#对象存储> API认证信息
"secretKey": "<secretKey>",#对象存储> API认证信息
"conf": {
"spark.hadoop.dfs.federation.router.bcid.userName": "<username>",#数据库连接信息 > 认证信息(HBase用户名)
"spark.hadoop.dfs.federation.router.bcid.passWord": "<password>",#数据库连接信息 > 认证信息(安全密钥)
"spark.serializer": "org.apache.spark.serializer.KryoSerializer",#固定不需要改
"spark.hadoop.cloudhbase.test.tableName": "tablename",#hbase里面首先要一张表testspark(表名称用户可自定义,填写一致即可)
"spark.hadoop.cloudhbase.test.hfilePath": "hdfs://router-sts-0.router-headless.hbase-1c973c78-b0f7-4e91-a51c-4e1eab4fa64b.svc.cluster.local:32600/default/c15",#hbase链接信息(到,号为一个完整的链接信息,default后需补充一个文件夹路径,随意填写,不可重复)
"spark.hadoop.hbase.client.username": "<username>",#数据库连接信息 > 认证信息(HBase用户名)
"spark.hadoop.hbase.client.accessKey": "<accesskey>",#数据库连接信息 > 认证信息(安全密钥)
"spark.hadoop.hbase.zookeeper.quorum": "hbase-zookeeper-0.hbase-zookeeper-headless.hbase-1c973c78-b0f7-4e91-a51c-4e1eab4fa64b.svc.cluster.local:32038,hbase-zookeeper-1.hbase-zookeeper-headless.hbase-1c973c78-b0f7-4e91-a51c-4e1eab4fa64b.svc.cluster.local:32038,hbase-zookeeper-2.hbase-zookeeper-headless.hbase-1c973c78-b0f7-4e91-a51c-4e1eab4fa64b.svc.cluster.local:32038",
#数据库连接信息 > 链接信息(zk信息)
"spark.hadoop.user.data.path.prefix": "hdfs://jt01/hbase/hbase-1c973c78-b0f7-4e91-a51c-4e1eab4fa64b/data/hbase"#hbase前缀信息
}
}
Spark作业配置参数说明如表下:
参数名称 | 参数说明 |
name | 任务名称,可自定义。 |
className | 用户本地运行jar执行文件mian函数的类名,Java或者Scala程序入口类。如果是Python则不需要指定。 |
file | 提交spark作业运行jar包的存放路径,s3a://固定的文件路径开头 |
endpoint | 可以在“对象存储 >桶详情> 域名访问(内网域名)”获取。 |
accessKey | 可以在“对象存储> API认证信息”获取。 |
secretKey | 可以在“对象存储> API认证信息”获取。 |
spark.hadoop.dfs.federation.router.bcid.userName | 可以在“数据库连接信息 > 认证信息(HBase用户名)”获取。 |
spark.hadoop.dfs.federation.router.bcid.passWord | 可以在“数据库连接信息 > 认证信息(安全密钥)”获取。 |
spark.serializer | 默认值即可。 |
spark.hadoop.cloudhbase.test.tableName | HBase里面首先要一张表testspark(用户可自定义,填写一致即可)。 |
spark.hadoop.cloudhbase.test.hfilePath | 可以在“数据库连接信息”获取。 |
spark.hadoop.hbase.client.username | 可以在“数据库连接”获取。 |
spark.hadoop.hbase.client.accessKey | 可以在“数据库连接”获取。 |
spark.hadoop.hbase.zookeeper.quorum | 可以在“数据库连接”获取。 |
spark.hadoop.user.data.path.prefix | 可以在“HDFS Router 配置>Router前缀信息”获取。 |
4. Spark作业执行成功后,可以在“移动云HBase控制台 > 数据管理 > 表管理”内查看执行结果。