StarRocks 华为云 OBS 配置

介绍如何正确配置 StarRocks,使其能够正常访问华为云的 OBS 和并行文件系统。

不少用华为云的 OBS 用户,不知道怎么配置 StarRocks 才能正常访问 OBS,这里写一篇教程,简单说一下。

访问华为云有两种办法,一种是走 S3 的兼容 API,另外一种则是通过华为云自己官方的 Hadoop JAR 包进行访问。

如果你创建的是普通的 OBS 桶,那么走 S3 兼容 API 就行了,这个最方便,不需要什么改动。

但是如果你用了华为云的并行文件系统,那么你就会头疼了。你会发现,如果一个目录下面的文件数量超过 1000 个,你的 SQL 的查询结果少了。这是因为并行文件系统没有完全兼容标准的 S3 协议,导致 FE list 文件的时候,超过 1000 个文件就 list 不出来了,它只会保留前 1000 个文件。是的,他不会报错,只会自己偷偷摸摸的查询结果错了。

下面的教程均基于 StarRocks 最新版(3.2)进行说明。

常规 OBS 桶配置

这个最简单啦,这么配鉴权就行了:

"aws.s3.access_key"="ak",
"aws.s3.secret_key"="sk",
"aws.s3.endpoint"="obs.cn-north-4.myhuaweicloud.com"

比如建一个 SR 的文件外部表,这么建就行了:

CREATE external TABLE obs
(
  `ACTIVITY` varchar(65500)
) 
ENGINE=FILE
PROPERTIES
(
  "path" = "obs://test/load/foo.parquet",
  "format" = "parquet",
  "aws.s3.access_key"="ak",
  "aws.s3.secret_key"="sk",
  "aws.s3.endpoint"="obs.cn-north-4.myhuaweicloud.com"
);

但是如果你的访问路径存在 “=”,你会发现查询莫名其妙的 403(常见于 Hive 的分区表路径)。是的,这是因为华为云并没有完全兼容 S3,这里你需要在 be.conf 里面添加一个 aws_sdk_enable_compliant_rfc3986_encoding=true 配置项就行了。

并行文件系统

因为并行文件系统主要影响的就是 list 操作。而 StarRocks 的 list 操作均发生于 FE。所以整体的思路就是,FE 使用华为云官方的 Hadoop Jar,BE 则继续使用 S3 兼容 API 访问。

FE 配置

FE 配置和华为云官方的 Hadoop对接OBS 教程其实差不多。

https://github.com/huaweicloud/obsa-hdfs/tree/master/release 下载 jar 包,下载 hadoop-huaweicloud-3.1.1-hw-53.8.jar 这个 jar 包到 FE 的 fe/lib 目录下。

之后在 fe/conf 目录下配置如下 core-site.xml

<configuration> 
    <property>
        <name>fs.obs.impl</name>
        <value>org.apache.hadoop.fs.obs.OBSFileSystem</value>
    </property>
    <property>
        <name>fs.AbstractFileSystem.obs.impl</name>
    <value>org.apache.hadoop.fs.obs.OBS</value>
    </property>
    <property>
        <name>fs.obs.access.key</name>
        <value>ak</value>
    </property>
    <property>
        <name>fs.obs.secret.key</name>
        <value>sk</value>
    </property>
    <property>
        <name>fs.obs.endpoint</name>
        <value>obs.cn-east-3.myhuaweicloud.com</value>
    </property>
</configuration>

BE 配置

be/conf 目录下配置如下 be.conf

object_storage_access_key_id=ak
object_storage_secret_access_key=sk
object_storage_endpoint=obs.cn-east-3.myhuaweicloud.com
aws_sdk_enable_compliant_rfc3986_encoding=true

然后 SR 建 catalog,导入啥的,不要配置任何鉴权信息。比如我下面这个文件外部表的 case:

CREATE external TABLE obs
(
  `ACTIVITY` varchar(65500)
) 
ENGINE=FILE
PROPERTIES
(
  "path" = "obs://obs-sr-test-parallel/dir/foo.parquet",
  "format" = "parquet"
);

然后一查就灵:

mysql> select * from obs;
+----------+
| ACTIVITY |
+----------+
| A        |
| B        |
+----------+
2 rows in set (0.42 sec)

至此,就搞定了。

JNI 配置

如果你用到了 RCFile,Avro 等格式,那么还需要在 BE 侧额外配置一下 jar 包和 core-site.xml,这是因为 StarRocks BE 侧是通过 JNI 的方式访问这类不常见的格式,

把放在 FE 的 OBS jar 包拷贝一份到 be/lib/hive-reader-lib/ 目录下。把 FE 配置的 core-site.xml 放到 be/conf 目录下即可。

总结

鉴权千变万化,万变不离其中,最终的杀手锏基本都是通过 Hadoop Jar 来访问。不过如果你想让 StarRocks 完美的支持华为云 OBS,那么我建议你来水下代码吧。

关于别的厂商鉴权,可以看看我以前写的这个文章:StarRocks 全新云厂商鉴权系统食用指南

原创文章,作者:Smith,如若转载,请注明出处:https://www.inlighting.org/archives/starrocks-how-to-connect-obs

打赏 微信扫一扫 微信扫一扫
SmithSmith
上一篇 2023年10月28日 下午3:28
下一篇 2024年9月9日 下午9:05

相关推荐

  • StarRocks 常见疑难杂症

    本文简单梳理一下自己在使用 StarRocks 时遇到的一些疑难杂症,仅供参考,本文会持续更新。 问题列表 ERROR 1064 (HY000): BE access S3 fil…

    2023年10月28日
    1.6K0
  • StarRocks 全新云厂商鉴权系统食用指南

    随着 StarRocks 3.0 的发布,彻底结束了过去云厂商鉴权参数军阀混战的年代,现在采用统一的全新鉴权参数。而且这些鉴权参数可以使用在任何需要发生鉴权的地方,可以是数据湖的 …

    2023年4月9日
    1.8K7
  • StarRocks Elasticsearch 外表查询源码解析

    文章随手写的,有需要的自己看看。 ES 相关概念 index:index 在 es 中不是指索引,其对应数据库中的 table 概念。一个 index 含有多个 document,…

    2022年8月13日
    2.7K7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(5条)

  • jijj
    jijj 2024年4月26日 下午2:49

    真是太有用了,一直在找这方便的资料,点赞

  • Danny
    Danny 2024年3月8日 下午1:33

    试了下,成功了,感谢!!!