云 HDFS 挂载 CHDFS

创建 CHDFS 及挂载点后,可以通过挂载点挂载 CHDFS,这里逐项说明如何挂载 CHDFS。

相关产品
云 HDFS 产品页,含版本规格、价格与购买入口。

一、前提条件

·确保挂载的机器或者容器内安装了 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 否
赞 (0)
上一篇 4天前
下一篇 4天前