参数设置
Hadoop SDK 是使用 JuiceFS 的众多使用方式之一,因此大部分配置与 JuiceFS 客户端对齐,你可以在「命令参考」找到更详细的说明。
核心配置
对接 Hadoop 和 JuiceFS 文件系统的关键配置,和其他场景的 JuiceFS 客户端类似,SDK 会根据 token,accesskey,secretkey 等字段进行认证(和 juicefs auth 一样),在家目录生成客户端配置文件,也就是 ~/.juicefs/*.conf。需要注意,Hadoop 的组件众多,其他用户的家目录下可能也会生成配置文件,比如 /home/hive/.juicefs 或者 /home/yarn/.juicefs,如果文件系统发生了配置变更,注意删除配置文件,再重启进程来更新配置。
| 配置项 | 默认值 | 描述 |
|---|---|---|
fs.jfs.impl | com.juicefs.JuiceFileSystem | 指定要使用的存储实现,默认使用 jfs:// 作为 scheme。如想要使用其它 scheme(例如 cfs://),则修改为 fs.cfs.impl 即可。无论使用的 scheme 是什么,访问的都是 JuiceFS 中的数据。 |
fs.AbstractFileSystem.jfs.impl | com.juicefs.JuiceFS | 指定要使用的存储实现,默认使用 jfs:// 作为 scheme。如想要使用其它 scheme(例如 cfs://),则修改为 fs.AbstractFileSystem.cfs.impl 即可。无论使用的 scheme 是什么,访问的都是 JuiceFS 中的数据。 |
juicefs.token | 访问 JuiceFS 的凭证,在控制台的设置页或者访问控制页可以看到。 | |
juicefs.bucket | 对象存储 bucket 地址,此配置可以覆盖文件系统的对象存储桶。一般无需配置。 | |
juicefs.accesskey | 对象存储的访问 ID(Access Key ID)。如果计算节点已经有访问对象存储的权限,则无需提供。 | |
juicefs.secretkey | 对象存储的私钥 (Secret Access Key)。如果计算节点已经有访问对象存储的权限,则无需提供。 | |
juicefs.console-url | 私有部署环境中,JuiceFS Web 控制台地址(云服务用户无需填写),格式如 http://x.x.x.x:8080。 |
跨区数据复制配置
阅读「跨区数据复制」以了解更多。
| 配置项 | 默认值 | 描述 |
|---|---|---|
juicefs.bucket2 | 当配置了「跨区数据复制」功能时,此配置可以覆盖文件系统的复制桶。 | |
juicefs.accesskey2 | 复制桶的 Access Key。如果计算节点已经有访问对象存储的权限,则无需提供。 | |
juicefs.secretkey2 | 复制桶的 Secret Key。如果计算节点已经有访问对象存储的权限,则无需提供。 |
缓存配置
阅读「缓存」以了解 JuiceFS 客户端的缓存设计。
| 配置项 | 默认值 | 描述 |
|---|---|---|
juicefs.cache-dir | memory | 本地缓存目录,默认使用 memory 也就是进程内存,可以指定多个文件夹,用 : 分隔,也可以使用通配符 *。如果使用本地目录,推荐手动 创建并给予 0777 权限,便于多个应用共享缓存数据。该配置含义同 --cache-dir。 |
juicefs.cache-size | 100 | 磁盘缓存容量,单位 MiB。默认值较小是由于 Hadoop SDK 默认使用内存作为缓存。该配置含义同 --cache-size。 |
juicefs.cache-replica | 1 | 缓存块允许调度的节点数量。Hadoop 应用均支持通过 BlockLocation 信息进行数据亲和性调度,将任务调度到同一批节点上,尽可能复用数据。提高该值将影响 BlockLocation 的计算方式,让同一个 Block 能够调度到更多的节点,以此提升计算任务并发度。Block 大小通过 juicefs.block.size 配置控制。 |
juicefs.cache-group | 配置此项则使用分布式缓存,同一个缓存组内的客户端共享缓存,推荐在主要使用 Spark 的环境使用此配置,因为 Spark 在单个任务处理多个小文件时,计算没有数据本地化。 | |
juicefs.no-sharing | false | 加入缓存组时,从缓存集群获取缓存数据,但却不共享自身缓存数据。该选项用于需要访问缓存集群数据,但自身却不断变动的节点(比如 Kubernetes Pod)。 |
juicefs.cache-full-block | true | 是否缓存完整对象存储块,如果仅需要反复读取小文件,或者磁盘性能比不上对象存储时,推荐设置为 false,此时仅缓存小于 JuiceFS 块大小(4MiB)的文件,和大文件的随机读部分。该配置含义相当于 JuiceFS 客户端的 --cache-partial-only 取反。 |
juicefs.memory-size | 300 | 读写数据的缓冲区最大空间,单位为 MiB,含义同 --buffer-size。 |
juicefs.auto-create-cache-dir | true | 是否自动创建缓存目录。为 false 时,如果设定的缓存目录不存在,效果相当于禁用缓存。 |
juicefs.free-space | 0.2 | 最低剩余磁盘空间比例,当剩余磁盘空间低于这个比例时,它会清空缓存数据以释放空间,默认 20%。该配置含义同 --free-space-ratio。 |
juicefs.metacache | true | 是否启用元数据缓存。 |
juicefs.discover-nodes-url | 指定发现集群缓存节点列表的方式,每 10 分钟刷新一次。此节点列表同样也是 juicefs.cache-group 的白名单,只有在此内的节点才能加入分布式缓存,可以用这种方式来防止计算集群外的客户端意外加入缓存组、影响缓存组整体性能(详见缓存组问题排查)。
| |
juicefs.hflush-delay | 0 | 单位:ms,在此时间间隔内,hflush 的数据会合并,以降低写对象存储请求,提高写入速度(比如 HBase WAL)。 |
juicefs.write-group-cache | false | 往 JuiceFS 写入数据时,同时将这些数据写入缓存集群,该配置含义同 --fill-group-cache。 |
juicefs.cache-priority 新增自 v5.0.14 | 0 | 缓存块的优先级,可选值为:0、1、2、3,数字越大优先级越高。缓存淘汰时会优先淘汰优先级更低的数据。 |
juicefs.entry-cache | 0.0 | 文件项缓存的过期时间(单位:秒) |
juicefs.dir-entry-cache | 0.0 | 目录项缓存的过期时间(单位:秒) |
juicefs.attr-cache | 0.0 | 文件缓存的过期时间(单位:秒) |
juicefs.block.size | dfs.blocksize 或 128MB | JuiceFS 逻辑数据块大小,控制着类似 Spark 等应用的计算任务切片大小。 |
juicefs.cache-group-size | 4 * juicefs.block.size | 考虑到读文件时客户端会进行预读和预取,在开启分布式缓存时,对于小于该值的文件,客户端会尽量将该文件切分的数据块调度到一个节点上,以此来最大化利用缓存数据。 |