暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

eLakehouse 跨源数据分析(HBase)

原创 手机用户0271 2023-11-25
74

通过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控制台 > 数据管理 > 表管理”内查看执行结果。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论