JindoFS在EMR-3.27.0及之后版本中支持使用Raft-RocksDB-OTS作为Jindo元数据服务(Namespace Service)的存储。1个EMR JindoFS集群创建3个Master节点组成1个Raft实例,实例的每个Peer节点使用本地RocksDB存储元数据信息。Raft元数据实例的OTS(TableStore)备份为可选的容灾操作,Raft元数据本身具有一定的容灾能力,可根据实际情况判断是否需要开启。
背景信息
RocksDB通过Raft协议实现3个节点之间的复制。集群可以绑定1个Tablestore(OTS)实例,作为Jindo的元数据服务的额外存储介质,本地的元数据信息会实时异步地同步到用户的Tablestore实例上。
元数据服务-多机Raft-RocksDB-Tablestore+HA如下图所示。
前提条件
配置本地raft后端
- 进入SmartData服务页面。
- 登录阿里云E-MapReduce控制台。
- 在顶部菜单栏处,根据实际情况选择地域和资源组。
- 单击上方的集群管理页签。
- 在集群管理页面,单击相应集群所在行的详情。
- 在左侧导航栏,选择。
- 登录阿里云E-MapReduce控制台。
- 暂停SmartData所有服务。
- 选择右上角的。
- 在执行集群操作对话框,填写执行原因,单击确定。
- 在确认对话框,单击确定。
-
根据使用需求,添加需要的namespace。
- 进入SmartData服务的namespace页签。
- 在左侧导航栏,选择。
-
单击配置页签。
- 在服务配置区域,单击namespace页签。
- 在SmartData服务的namespace页签,设置如下参数。
参数 描述 示例 namespace.backend.type 设置namespace后端存储类型,支持: - rocksdb
- ots
- raft
默认为rocksdb。
raft namespace.backend.raft.initial-conf 部署raft实例的3个Master地址(固定值)。 emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0 jfs.namespace.server.rpc-address Client端访问raft实例的3个Master地址(固定值) emr-header-1:8101,emr-header-2:8101,emr-header-3:8101 - 可选:配置远端OTS异步存储。
在SmartData服务的namespace页签,设置如下参数。
参数 参数说明 示例 namespace.ots.instance Tablestore实例名称。 emr-jfs namespace.ots.accessKey Tablestore实例的AccessKey ID。 kkkkkk namespace.ots.accessSecret Tablestore实例的AccessKey Secret。 XXXXXX namespace.ots.endpoint Tablestore实例的Endpoint地址,通常EMR集群,推荐使用VPC地址。 http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com namespace.backend.raft.async.ots.enabled 是否开启OTS异步上传,包括: - true
- false
当设置为true时,需要在SmartData服务完成初始化前,开启OTS异步上传功能。说明 如果SmartData服务已完成初始化,则不能再开启该功能。因为OTS的数据已经落后于本地RocksDB的数据。true -
保存配置。
-
单击右上角的保存。
-
在确认修改对话框中,输入执行原因,开启自动更新配置。
-
单击确定。
-
- 启动SmartData所有服务。
- 在SmartData服务页面,选择右上角的。
- 在执行集群操作对话框,填写执行原因,单击确定。
- 在确认对话框,单击确定。
- 通过SSH方式连接集群,然后执行以下命令查看状态。
jindo jfs -metaStatus -detail如果返回信息中包含raft字样,则表示配置生效。
从Tablestore恢复元数据信息
重要 需要开启OTS(TableStore)的备份功能。
如果您在原始集群开启了远端Tablestore异步存储,则Tablestore上会有1份完整的JindoFS元数据的副本。您可以在停止或释放原始集群后,在新创建的集群上恢复原先的元数据,从而继续访问之前保存的文件。
- 可选:准备工作。
- 查看原始集群的元数据信息(文件和文件夹数量)。
hadoop fs -count jfs://test/返回信息如下所示。1596 1482809 25 jfs://test/说明 返回信息中的1596表示文件夹个数,1482809为文件个数。 - 停止原始集群的作业,等待30~120秒左右,等待原始集群的数据已经完全同步到Tablestore。执行以下命令查看状态。如果LEADER节点显示
_synced=1,则表示Tablestore为最新数据,同步完成。
命令输出中jindo jfs -metaStatus -detailstate为LEADER,表示当前 Raft 节点为主节点,各项指标正常运行。
replicator_32985348833@xxx next_index=624626 flying_append_entries_size=0 idle hc=2301 ac=623564 ic=0 OtsUploader: _lastStopIndex=624624, _synced=1[RaftPeerImpl] peer id: xxx state: LEADER readonly: 0 term: 2 conf_index: 1 peers: xxx changing_conf: NO stage: STAGE_NONE election_timer: timeout(5000ms) STOPPED vote_timer: timeout(5000ms) STOPPED stepdown_timer: timeout(5000ms) SCHEDULING(in 2335ms) snapshot_timer: timeout(3600000ms) SCHEDULING(in 150305ms) storage: [1, 624625] disk_index: 624625 known_applied_index: 624625 last_log_id: (index=624625,term=2) first_index_pinned: 624625 state_machine: Idle last_committed_index: 624625 last_snapshot_index: 0 last_snapshot_term: 0 snapshot_status: IDLE replicator_25769803789@xxx next_index=624626 flying_append_entries_size=0 idle hc=2301 ac=624261 ic=0 replicator_32985348833@xxx next_index=624626 flying_append_entries_size=0 idle hc=2301 ac=624261 ic=0 OtsUploader: _lastStopIndex=624624, _synced=1` - 停止或释放原始集群,确保没有其它集群正在访问当前的Tablestore实例。
- 查看原始集群的元数据信息(文件和文件夹数量)。
- 创建新集群。
新建与Tablestore实例相同Region的EMR集群,暂停SmartData所有服务。详情请参见配置本地raft后端。
- 初始化配置。
在SmartData服务的namespace页签,设置以下参数。
参数 描述 示例 namespace.backend.raft.async.ots.enabled 是否开启OTS异步上传,包括: - true
- false
false namespace.backend.raft.recovery.mode 是否开启从OTS恢复元数据,包括: - true
- false
true -
保存配置。
-
单击右上角的保存。
-
在确认修改对话框中,输入执行原因,开启自动更新配置。
-
单击确定。
-
- 启动SmartData所有服务。
- 在SmartData服务页面,选择右上角的。
- 在执行集群操作对话框,填写执行原因,单击确定。
- 在确认对话框,单击确定。
-
新集群的SmartData服务启动后,自动从OTS恢复元数据到本地Raft-RocksDB上,可以通过以下命令查看恢复进度。
jindo jfs -metaStatus -detail如图所示,LEADER节点的state为FINISH表示恢复完成。

- 可选:执行以下操作,可以比较一下文件数量与原始集群是否一致。
- 执行以下命令,查看文件数量是否与原集群一致。
hadoop fs -count jfs://test/返回信息如下所示。1596 1482809 25 jfs://test/ - 执行以下命令,查看文件是否可以正常读取。
hadoop fs -cat jfs://test/testfile - 执行以下命令,查看文件目录。
hadoop fs -ls jfs://test/返回信息如下。Found 3 items drwxrwxr-x - root root 0 2020-03-25 14:54 jfs://test/emr-header-1.cluster-50087 -rw-r----- 1 hadoop hadoop 5 2020-03-25 14:50 jfs://test/haha-12096RANDOM.txt -rw-r----- 1 hadoop hadoop 20 2020-03-25 15:07 jfs://test/testfile - 执行以下命令,验证文件是否不可修改。
hadoop fs -rm jfs://test/testfile返回如下提示信息。java.io.IOException: ErrorCode : 25021 , ErrorMsg: Namespace is under recovery mode, and is read-only.说明 此时的集群为恢复模式,也是只读模式,不可修改文件
- 执行以下命令,查看文件数量是否与原集群一致。
- 修改配置,将集群设置为正常模式,开启OTS异步上传功能。
在SmartData服务的namespace页签,设置以下参数。
参数 描述 示例 namespace.backend.raft.async.ots.enabled 是否开启OTS异步上传,包括: - true
- false
true namespace.backend.raft.recovery.mode 是否开启从OTS恢复元数据,包括: - true
- false
false - 重启集群。
- 单击上方的集群管理页签。
- 在集群管理页面,选择相应集群所在行的。
- 在确认重启集群对话框中,单击确定。
- 单击上方的集群管理页签。
该文章对您有帮助吗?