StarRocks 华为云 OBS 配置

这篇文章介绍了 StarRocks 访问华为云 OBS 的两套配置思路,并重点解释为什么并行文件系统场景需要 FE 和 BE 分别采用不同的访问实现。正文先说明普通 OBS 桶可以直接通过 S3 兼容 API 配置鉴权和外部表,但路径中含等号时需要额外参数避免 403;随后分析并行文件系统在 list 超过 1000 个文件时的兼容性问题,并给出 FE 使用华为云官方 Hadoop Jar、BE 继续走 S3 兼容 API,以及在 RCFile、Avro 等 JNI 场景下同步 Jar 和 core-site.xml 的完整方案。

不少用华为云的 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 CSV Reader 性能优化过程

    这篇文章复盘了一次 StarRocks CSV Reader 的性能优化过程,从用户反馈性能落后于 Trino、Doris 和 ClickHouse 开始,一步步定位热点并做针对性改造。正文先通过基准测试和火焰图发现列名映射、分区列追加和频繁对象分配带来的开销,再分别介绍预先建立列映射、批量追加分区列、复用 fields 容器和减少 Slice 拷贝等优化思路,以及对应 PR 的效果,最后结合 HDFS、OSS 和缓存场景下的对比测试总结出当前瓶颈已经更多转向外部存储访问。

    2023年9月6日
    2.5K6
  • StarRocks Elasticsearch 外表查询源码解析

    这篇文章从源码角度梳理了 StarRocks 查询 Elasticsearch 外表的整体流程。正文先补充 index、mapping、doc_values、`_source`、text 和 keyword 等 ES 基础概念,再说明创建外表后 FE 如何通过 `EsRepository`、`EsMetaStateTracker` 定期同步版本、mapping 和 shard 元信息,并指出 shard 地址选择上的一个已知问题;后半部分继续分析 FE 侧 `EsScanNode` 如何决定 doc_values 下推与分片分配,以及 BE 侧 `ESDataSource`、`ESScanReader`、`ScrollParser` 如何生成 Query DSL、执行 scroll 读取并把返回结果填充到 chunk 中。

    2022年8月13日
    3.6K7
  • StarRocks 完美开发环境搭建

    这篇文章给出了一套面向 StarRocks 3.4 的完整开发环境搭建方案,目标是在 Mac 本地写代码、远程 Ubuntu 服务器负责编译和调试的前提下,同时满足 FE、BE 的编译、跳转和 Debug 需求。正文先说明本地与服务器的依赖准备、`thirdparty` 的获取方式和一键编译流程,再分别介绍 FE 在 IDEA 中的本地与远程 Debug 配置,以及 BE 在 Clion 中的远程 Toolchain、Deployment、CMake 和环境变量设置,最后补充了使用 gdb、LLDB 调试 BE 的方法和一些实际开发中的注意事项。

    2022年12月24日
    12.7K65

发表回复

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


评论列表(5条)

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

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

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

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