挂载 CHDFS

最近更新时间:2025-12-19 17:53:41

我的收藏
创建 CHDFS 及挂载点后,可以通过挂载点挂载 CHDFS,本文为您详细介绍如何挂载 CHDFS。

前提条件

确保挂载的机器或者容器内安装了 Java 1.8。
确保挂载的机器或者容器的 VPC,与挂载点指定 VPC 相同。
确保挂载的机器或者容器的 VPC IP,与挂载点指定权限组中有一条权限规则授权地址匹配。

操作步骤

1. 下载 CHDFS-Hadoop JAR 包。
2. 将 JAR 包放置对应的目录下,对于 EMR 集群,可同步到所有节点的 /usr/local/service/hadoop/share/hadoop/common/lib/目录下。
3. 编辑 core-site.xml 文件,新增以下基本配置:
<!--chdfs 的实现类-->
<property>
<name>fs.AbstractFileSystem.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter</value>
</property>

<!--chdfs 的实现类-->
<property>
<name>fs.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter</value>
</property>

<!--本地 cache 的临时目录, 对于读写数据, 当内存 cache 不足时会写入本地硬盘, 这个路径若不存在会自动创建-->
<property>
<name>fs.ofs.tmp.cache.dir</name>
<value>/data/chdfs_tmp_cache</value>
</property>

<!--用户的 appId, 可登录腾讯云控制台(https://console.cloud.tencent.com/developer)查看-->
<property>
<name>fs.ofs.user.appid</name>
<value>1250000000</value>
</property>

<!--flush 语义, 默认 false(异步刷盘)-->
<property>
<name>fs.ofs.upload.flush.flag</name>
<value>false</value>
</property>

4. 将 core-site.xml 同步到所有 hadoop 节点上。
说明:
对于 EMR 集群,以上步骤3、4可在 EMR 控制台的组件管理中,修改 HDFS 配置即可。
5. 使用 hadoop fs 命令行工具,运行 hadoop fs -ls ofs://${mountpoint}/命令,这里 mountpoint 为挂载地址。如果正常列出文件列表,则说明已经成功挂载 CHDFS。
6. 用户也可使用 hadoop 其他配置项,或者 mr 任务在 CHDFS 上运行数据任务。对于 mr 任务,可以通过 -Dfs.defaultFS=ofs://${mountpoint}/将本次任务的默认输入输出 FS 改为 CHDFS。

场景说明

写入数据可见性与持久化

CHDFS 是云端分布式文件系统,通过 CHDFS 客户端打开一个文件,会返回一个输出流;通过输出流写入数据后, CHDFS 客户端会在满足一定大小后(通常为4MB),异步刷盘。如果上层主动调用输出流的 flush 接口, 默认的行为是忽略(和通常的 flush 同步刷盘语义不同)。等待后续满足写入量达到一定大小后异步刷盘。或者最后调用 close 的时候,也才会强制同步刷盘。 close 成功的数据, 表示已经持久化成功,可保证后续读取到。
CHDFS 客户端默认异步 flush,因为相比起本地磁盘,云端的访问时延较大,异步 flush 可以减少与云端的交互,避免 flush 卡住用户写入,显著提升写入性能,减少作业时间。风险点是如果最终没有主动调用 close,会存在未刷盘的数据丢失的风险。
对于需要 flush 后需要立刻可见以及持久化的场景,例如使用 CHDFS 存储 Hbase Wal Log,Journal 日志等,请开启同步刷盘。请参考配置项 fs.ofs.upload.flush.flag 说明。

配置项说明

配置项
说明
默认值
是否必填
fs.ofs.tmp.cache.dir
存放自动下载的相关 Jar 包的路径
fs.ofs.tmp.disk.cache.dir
上传过程中, 使用的磁盘 buffer 文件的产生路径
./tmp/chdfs-disk
fs.ofs.map.block.size
CHDFS 文件系统的 block 大小,单位为字节。默认为128MB(只对 map 切分有影响,和 chdfs 底层存储切块大小无关)
134217728
fs.ofs.data.transfer.thread.count
CHDFS 传输数据时的并行线程数
32
fs.ofs.block.max.memory.cache.mb
CHDFS 插件单个文件使用的内存 buffer 的大小,单位为MB。(对读写都有加速作用)
16
fs.ofs.block.max.file.cache.mb
CHDFS 插件使用的磁盘 buffer 的大小,单位为MB。(对写有加速作用)
256
fs.ofs.prev.read.block.count
预读个数
4
fs.ofs.plugin.info.log
是否打印插件的调试日志,日志以 info 级别打印。可选值为 true、false
false
fs.ofs.bucket.region
文件系统或者元数据加速器 bucket 所在的地域,如 ap-shanghai,ap-beijing,配置项适用于 chdfs_hadoop_plugin_network 版本V2.7及其以上
""
fs.ofs.upload.flush.flag
写数据,调用输出流的 flush 接口时,是否同步刷数据,默认为异步刷数据(false)。如需同步刷盘,请设置为 true
false
fs.ofs.meta.send.max.retry
元数据请求失败重试次数
30
fs.ofs.meta.send.max.duration.sec
元数据请求最大超时时间
7200
fs.ofs.data.transfer.https
访问 COS 是否使用 HTTPS 协议
false
fs.ofs.data.transfer.proxy
COS 的代理地址
""
fs.ofs.data.transfer.endpoint.suffix
COS 的 endpoint
""
fs.ofs.data.transfer.distinguish.host
这个参数需和 fs.ofs.data.transfer.endpoint.suffix 配合使用,用于判断是否区分主机名
false
fs.ofs.data.transfer.max.thread.count
读写 COS 的线程池最大线程数
2147483647
fs.ofs.data.transfer.max.retry
读写 COS 重试次数
100
fs.ofs.data.upload.transfer.thread.count
写 COS 的线程池核心线程数,若配置了该参数,读写将独立维护自己的线程池,而不是共享一个线程池
0
fs.ofs.data.upload.transfer.max.thread.count
写 COS 的线程池最大线程数
2147483647
fs.ofs.block.total.memory.cache.mb
写入总内存使用量,默认不限制
0
fs.ofs.block.total.memory.cache.percent
写总内存可使用比例,默认100%
100
fs.ofs.block.max.read.memory.cache.mb
单文件读最大内存使用量
16
fs.ofs.block.total.read.memory.cache.mb
读文件总内存使用量,默认不限制
0
fs.ofs.block.total.read.memory.cache.percent
读总内存可使用比例,默认100%
100
fs.ofs.block.total.memory.jvm.heap.percent
写入文件时总内存占JVM 堆内内存的比例,默认不配置
0
fs.ofs.prev.read.block.release.enable
读完后是否释放预读块
true
fs.ofs.random.read.optimization.flag
随机读优化
true
fs.ofs.inode.set.crc64
inode 信息是否保存 CRC64
false
fs.ofs.data.socket.timeout
读写 COS 的socket超时时间,单位为秒
30
fs.ofs.data.connection.request.timeout
读写 COS 链接超时时间,单位为秒
5
fs.ofs.checksum.type
checksum 校验算法
crc32c
fs.ofs.enable.get.file.checksum
是否打开读文件校验
true
fs.ofs.ranger.enable.flag
是否打开 Ranger 校验
false
fs.ofs.ranger.client.impl
ranger client 的实现类
org.apache.hadoop.fs.cosn.ranger.client.RangerQcloudObjectStorageClientImpl
fs.ofs.sse.mode
服务端加密模型
fs.ofs.sse.c.key
SSE_C 密钥
fs.ofs.sse.kms.keyid
KMS 密钥
fs.ofs.sse.kms.context
KMS 的 context
fs.ofs.client.side.encryption.enabled
是否启用客户端加密
false
fs.ofs.client.side.encryption.public.key.path
客户端加密公钥路径
fs.ofs.client.side.encryption.private.key.path
客户端加密私钥路径
fs.ofs.meta.endpoint.suffix
元数据服务域名 endpoint
""
fs.ofs.plugin.custom.ua
自定义 User Agent,用于标识请求来源
undefined
chdfs.hadoop.plugin.network.version
壳子包版本
undefined
fs.ofs.cosn.ranger.policy.url
ranger policy 的 url
fs.ofs.cosn.ranger.auth.jar.md5
ranger 校验的 jar 包 md5值
fs.ofs.soft.refresh.sts.interval
STS 的软刷新时间,单位为分钟
3
fs.ofs.hard.refresh.sts.interval
STS 的强制刷新时间,单位为分钟
5
fs.ofs.block.commit.interval
上传文件块定时同步服务端,单位为秒
10
fs.ofs.block.commit.batch.size
上传文件批量提交的块个数
32
fs.ofs.cache.free.interval
定时内存释放,单位为秒
60
fs.ofs.cache.initiative.free.interval.ms
全局内存被限制时,主动释放内存的频率,单位是毫秒
60000
fs.ofs.storage.class
存储类型
STANDARD
fs.ofs.block.memory.trunk.byte
trunk 大小,读 COS 的最小单元,单位为字节
1048576
fs.ofs.block.part.byte
上传分块大小
4194304
fs.ofs.user.appid
用户 appid
fs.ofs.use.short.bucketname
是否使用短桶名,即不带 appid 的桶名
false
fs.ofs.skip.get.groups
group 的值是否用 user 进行替代
false
fs.ofs.use.marker.in.du
du 接口使用分页查询
true
fs.ofs.user.component.name
标识计算组件名
""
fs.ofs.enable.digest.calculate.for.put
上传文件校验
true
fs.ofs.use.path_find.for.open_read
open 文件时是否需要先查询 inode 信息
false
fs.ofs.enable.chdfs_file_status.flag
是否开启 chdfs 自定义的 FileStatus 类
false
fs.ofs.enable.metric.report
是否开启 metric 功能
false
fs.ofs.metric.report.dir
metric 文件存储目录
/tmp
fs.ofs.metric.report.interval
metric 打点数据刷新周期,单位为秒
30
fs.ofs.prev.read.meta.block.count
预读 block 个数
16