日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Fluid加速OSS文件訪問

Fluid是一個開源的Kubernetes原生的分布式數據集編排和加速引擎,主要服務于云原生場景下的數據密集型應用,例如大數據應用、AI應用等。JindoRuntime來源于阿里云EMR團隊JindoFS,是基于C++實現的支撐Dataset數據管理和緩存的執行引擎,支持OSS對象存儲。Fluid通過管理和調度JindoRuntime實現數據集的可見性、彈性伸縮和數據遷移。本文介紹如何在注冊集群中使用Fluid加速OSS文件訪問。

實現原理

通過Fluid加速OSS文件訪問的實現原理如下圖所示。訪問oss.png

前提條件

步驟一:安裝ack-fluid組件

通過onectl安裝

  1. 在本地安裝配置onectl。具體操作,請參見通過onectl管理注冊集群

  2. 執行以下命令,安裝ack-fluid組件。

    onectl addon install ack-fluid --set pullImageByVPCNetwork=false

    pullImageByVPCNetwork:為可選參數,設置是否使用VPC網絡拉取組件鏡像。

    預期輸出:

    Addon ack-fluid, version **** installed.

通過控制臺安裝

  1. 登錄容器服務管理控制臺,在左側導航欄選擇市場 > 應用市場

  2. 應用目錄頁面,搜索并選中ack-fluid

  3. 在頁面右上角,單擊一鍵部署

  4. 創建面板中,選擇集群命名空間發布名稱可保持系統默認,然后單擊下一步

  5. 選擇Chart 版本為當前最新版本,設置組件相關參數,然后單擊確定

步驟二:準備OSS Bucket數據

  1. 執行以下命令,下載一份測試數據。

    wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz
  2. 將下載的測試數據上傳到阿里云OSS對應的Bucket上,上傳方法可以借助OSS提供的客戶端工具ossutil。具體操作,請參見安裝ossutil

步驟三:為本地集群節點打上標簽

執行以下命令,為本地IDC集群中的所有節點打上demo-oss=true的標簽,該標簽用于設置JindoRuntime的Master和Worker組件的節點調度約束條件。

kubectl label node **** demo-oss=true

步驟四:創建Dataset和JindoRuntime

  1. 使用以下內容,創建mySecret.yaml文件。

    該文件用于保存OSS的fs.oss.accessKeyIdfs.oss.accessKeySecret,需要在創建Dataset之前創建。

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: ****
      fs.oss.accessKeySecret: ****
  2. 執行以下命令,部署mySecret文件生成Secret。

    kubectl create -f mySecret.yaml

    Kubernetes會對已創建的Secret使用加密編碼,避免將其明文暴露。

  3. 使用以下內容,創建resource.yaml文件。該YAML文件包含Dataset和JindoRuntime兩部分內容。

    • Dataset:用于描述遠端存儲數據集和UFS的信息。

    • JindoRuntime:用于啟動一個JindoFS的集群來提供緩存服務。

      apiVersion: data.fluid.io/v1alpha1
      kind: Dataset
      metadata:
        name: hadoop
      spec:
        mounts:
          - mountPoint: oss://<oss_bucket>/<bucket_dir>
            options:
              fs.oss.endpoint: <oss_endpoint>
            name: hadoop
            path: "/"
            encryptOptions:
              - name: fs.oss.accessKeyId
                valueFrom:
                  secretKeyRef:
                    name: mysecret
                    key: fs.oss.accessKeyId
              - name: fs.oss.accessKeySecret
                valueFrom:
                  secretKeyRef:
                    name: mysecret
                    key: fs.oss.accessKeySecret
      ---
      apiVersion: data.fluid.io/v1alpha1
      kind: JindoRuntime
      metadata:
        name: hadoop
      spec:
        # 保證緩存運行時只運行在本地集群的節點中。
        master:
          nodeSelector:
            demo-oss: "true"
        worker:
          nodeSelector:
            demo-oss: "true"
        fuse:
          nodeSelector:
            demo-oss: "true"
        replicas: 2
        tieredstore:
          levels:
            - mediumtype: HDD
              path: /mnt/disk1
              quota: 100G
              high: "0.99"
              low: "0.8"

      類別

      參數

      說明

      Dataset

      mountPoint

      oss://<oss_bucket>/<bucket_dir>為掛載UFS的路徑,路徑中不需要包含Endpoint信息。

      fs.oss.endpoint

      OSS Bucket的Endpoint信息,公網或私網地址皆可。

      JindoRuntime

      replicas

      創建JindoFS集群的Worker數量。

      mediumtype

      緩存類型。定義創建JindoRuntime模板樣例時,JindoFS暫時僅支持HDD、SSD、MEM的其中一種緩存類型。

      path

      存儲路徑。暫時只支持單個路徑。當選擇MEM做緩存時,需指定一個本地路徑用于存儲Log等文件。

      quota

      緩存最大容量,單位為GB。

      high

      存儲容量上限大小。

      low

      存儲容量下限大小。

  4. 執行以下命令,創建JindoRuntime和Dataset。

    kubectl create -f resource.yaml
  5. 執行以下命令,查看Dataset的部署情況。

    kubectl get dataset hadoop

    預期輸出:

    NAME     UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop        210MiB       0.00B    100.00GiB              0.0%          Bound   1h
  6. 執行以下命令,查看JindoRuntime的部署情況。

    kubectl get jindoruntime hadoop

    預期輸出:

    NAME     MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
    hadoop   Ready          Ready          Ready        4m45s
  7. 執行以下命令,查看PV和PVC狀態。

    kubectl get pv,pvc

    預期輸出:

    NAME                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
    persistentvolume/hadoop   100Gi      RWX            Retain           Bound    default/hadoop                           52m
    
    NAME                           STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    persistentvolumeclaim/hadoop   Bound    hadoop   100Gi      RWX                           52m

    預期輸出表明,Dataset和JindoRuntime已創建成功。

步驟五:創建容器應用體驗加速效果

您可以通過創建容器應用來使用JindoFS加速服務,或者提交機器學習作業來體驗相關功能。本文以創建一個容器應用多次訪問同一數據,并通過對比訪問時間為例展示JindoRuntime的加速效果。

  1. 使用以下內容,創建app.yaml文件。

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-app
    spec:
      containers:
        - name: demo
          image: fluidcloudnative/serving
          volumeMounts:
            - mountPath: /data
              name: hadoop
      volumes:
        - name: hadoop
          persistentVolumeClaim:
            claimName: hadoop
  2. 執行以下命令,創建容器應用。

    kubectl create -f app.yaml
  3. 執行以下命令,查看文件大小。

    kubectl exec -it demo-app -- bash
    du -sh /data/spark-3.0.1-bin-hadoop2.7.tgz

    預期輸出:

    209.7M    /data/spark-3.0.1-bin-hadoop2.7.tgz
  4. 執行如下命令,查看文件的拷貝時間。

    time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /test

    預期輸出:

    real    1m2.374s
    user    0m0.000s
    sys     0m0.256s

    預期輸出表明,文件拷貝時間消耗了62s。

  5. 執行以下命令,查看此時Dataset的緩存情況。

    kubectl get dataset hadoop

    預期輸出:

    NAME     UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop   209.74MiB       209.74MiB    100.00GiB        100.0%           Bound   1h

    預期輸出表明,209.7 MiB的數據已經緩存到了本地。

  6. 執行以下命令,刪除之前的容器應用,新建相同的容器應用。

    說明

    此操作是為了避免其他因素(例如Page Cache)對結果造成影響。

    kubectl delete -f app.yaml && kubectl create -f app.yaml
  7. 執行如下命令,查看文件拷貝時間。

    kubectl exec -it demo-app -- bash
    time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /test

    預期輸出:

    real	0m3.454s
    user	0m0.000s
    sys	  0m0.268s

    預期輸出表明,文件的拷貝時間為3s,拷貝時間縮短至原來的十八分之一。主要原因是由于文件已經被JindoFS緩存,所以第二次訪問所需時間遠小于第一次。

(可選)步驟六:清理環境

當不再使用數據加速功能時,您需要執行以下命令清理環境。

  1. 執行以下命令,刪除JindoRuntime和應用容器。

    kubectl delete jindoruntime hadoop
  2. 執行以下命令,刪除Dataset。

    kubectl delete dataset hadoop