加速HDFS上数据§
JindoFSx 提供了访问 HDFS 的能力,可以通过配置 HDFS 作为 JindoFSx 的后端存储,使 Fluid 通过 JindoFSx 来访问 HDFS 上的数据,同时 JindoFSx 也提供了对 HDFS 上的数据以及元数据的缓存加速功能。 本文档展示了如何在 Fluid 中以声明式的方式完成 JindoFSx 部署,对接 HDFS 数据源。
创建命名空间§
kubectl create ns fluid-system
下载 Fluid 安装包§
使用 Helm 安装 Fluid§
helm install --set runtime.jindo.enabled=true fluid fluid-<version>.tgz
查看 Fluid 的运行状态§
$ kubectl get pod -n fluid-system
NAME READY STATUS RESTARTS AGE
csi-nodeplugin-fluid-2mfcr 2/2 Running 0 108s
csi-nodeplugin-fluid-l7lv6 2/2 Running 0 108s
dataset-controller-5465c4bbf9-5ds5p 1/1 Running 0 108s
jindoruntime-controller-654fb74447-cldsv 1/1 Running 0 108s
其中 csi-nodeplugin-fluid-xx 的数量应该与 K8S 集群中节点node的数量相同。
1、创建 dataset 和 JindoRuntime§
1.1、HA 集群从 HDFS 配置文件中相关信息,非 HA 集群请略过此步骤§
从 HDFS 集群上找到 hdfs-site.xml 配置文件 * 阿里云EMR集群在 /etc/ecm/hadoop-conf 路径下 * CDH 集群可参考 What-is-the-Path-of-hdfs-site-xml-core-xml
需要将其中 rpc 的访问地址中域名的部分参数,修改成可访问的内网 IP 地址,例如:
<property>
<name>dfs.namenode.rpc-address.emr-cluster.nn1</name>
<value>emr-header-1.cluster-xxx:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.emr-cluster.nn2</name>
<value>emr-header-2.cluster-xxx:8020</value>
</property>
修改为
<property>
<name>dfs.namenode.rpc-address.emr-cluster.nn1</name>
<value>192.168.0.1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.emr-cluster.nn2</name>
<value>192.168.0.2:8020</value>
</property>
从配置文件里我们可以拿到如下几个信息
- 集群namespaceService名称:emr-cluster
- 两个namenode名字:nn1 和 nn2
- 两个namenode的访问地址:192.168.0.1:8020 和 192.168.0.2:8020
1.2、创建 Dataset 资源对象§
首先创建一个名为 dataset.yaml 的文件,针对 HDFS 集群分为 HA 集群和非 HA 集群两种不同的情况。
HA 集群§
将1.1中拿到的几个信息放到 mounts.options 里面,user 代表用户权限
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hdfs
spec:
mounts:
- mountPoint: hdfs://emr-cluster/
name: hdfs
options:
fs.hdfs.emr-cluster.dfs.ha.namenodes = nn1,nn2
fs.hdfs.emr-cluster.dfs.namenode.rpc-address.nn1 = 192.168.0.1:8020
fs.hdfs.emr-cluster.dfs.namenode.rpc-address.nn2 = 192.168.0.2:8020
fs.hdfs.user = hadoop
path: /
accessModes:
- ReadOnlyMany
其中 mountPoint
为需要访问的 HDFS 路径(阿里云EMR集群默认名字为 emr-cluster,如下所示)
- accessModes: 可选 ReadOnlyMany / ReadWriteMany,前者代表只读,后者代表可读写
<property>
<name>fs.defaultFS</name>
<value>hdfs://emr-cluster</value>
</property>
非 HA 集群§
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hdfs
spec:
mounts:
- mountPoint: hdfs://<namenodeIP>:<port>/
name: hdfs
path: /
accessModes:
- ReadOnlyMany
其中 mountPoint
为 HDFS 集群的 namenode 的 IP 地址和端口的组合
- accessModes: 可选 ReadOnlyMany / ReadWriteMany,前者代表只读,后者代表可读写
§
1.3、创建 Dataset§
$ kubectl create -f dataset.yaml
1.4 创建 JindoRuntime 资源对象§
创建一个 JindoRuntime 对应的 JindoFSx 集群
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
name: hdfs
spec:
replicas: 1
tieredstore:
levels:
- mediumtype: SSD
path: /mnt/disk1/
quota: 290Gi
high: "0.9"
low: "0.2"
多块盘多个quota请参考
path: /mnt/disk1/,/mnt/disk2/,/mnt/disk3/
quotaList: 290G,290G,290G
其中 path 和 quota 的数量应该相同。
1.5、创建 JindoRuntime§
执行 create 命令
$ kubectl create -f runtime.yaml
查看 dataset 状态§
$ kubectl get dataset hadoop
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE
hdfs 180.01GiB 0.00B 261.00GiB 0.0% Bound 62m
检查 PV,PVC 创建情况§
$ kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/hdfs 100Gi RWX Retain Bound default/hadoop 58m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/hdfs Bound hadoop 100Gi RWX 58m
检查 jindoruntime 部署情况§
$ kubectl get jindoruntime hadoop
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE
hdfs Ready Ready 62m