Pachyderm 可复现的数据科学(二)

原文:annas-archive.org/md5/daa8f16fb595e16a266512112b9ef347

译者:飞龙

协议:CC BY-NC-SA 4.0

第五章:第五章:在云平台上安装 Pachyderm

在上一章中,你已经学习了在本地安装 Pachyderm 的过程,以便快速开始并在你的计算机上测试 Pachyderm。

生产环境用例需要额外的计算资源和可扩展性,可以通过云平台和流行云提供商提供的托管 Kubernetes 平台服务高效实现。Pachyderm 可以在 Kubernetes 集群上运行,无论是手动部署在云实例上,还是作为托管的 Kubernetes 服务部署。我们将讨论在云提供商上配置最流行和易于配置的方法。

本章将带你完成 Pachyderm 的云端安装,并解释运行 Pachyderm 集群所需的软件要求。本章将介绍在以下最流行的云平台上的安装:Amazon Elastic Kubernetes Service (EKS),Google Kubernetes Engine (GKE),以及 Microsoft Azure Kubernetes Service (AKS)。

在本章中,我们将涵盖以下主要主题:

  • 安装所需工具

  • 在 Amazon EKS 上部署 Pachyderm

  • 在 GKE 上部署 Pachyderm

  • 在 Microsoft AKS 上部署 Pachyderm

  • 访问 Pachyderm 控制台

技术要求

如果你使用 macOS,请验证你使用的是最新版本的 macOS。如果你使用 Linux,必须是 CentOS、Fedora 或 Ubuntu 的 64 位版本。如果你使用 Windows,请从 Windows 子系统 Linux (WSL) 运行本节中描述的所有命令。你应该已经在前面的章节中安装了以下工具:

  • Homebrew(仅限 macOS)

  • Kubernetes kubectl

  • Helm

  • Pachyderm CLI – pachctl

  • WSL(仅限 Windows)

我们需要安装以下工具:

  • aws

  • Amazon 身份和访问管理 (AWS IAM) Kubernetes 身份验证器

  • EKS 命令行工具 – eksctl

  • Google Cloud SDK – gcloud

  • Azure CLI – az

  • JSON 处理器 – jq

我们将在本章中详细讨论这些工具的安装和配置。如果你已经知道如何操作,可以现在就开始设置它们。

安装所需工具

在本节中,我们将讨论安装我们在部署 Kubernetes 集群和在云平台上安装 Pachyderm 前需要的系统工具。

安装 AWS 命令行界面以管理 AWS

AWS 命令行界面 aws-cli 是执行 AWS 账户命令所必需的。有关更多信息,你可以参考 AWS 命令行界面的官方文档:docs.aws.amazon.com/cli/latest/userguide/。让我们在你的计算机上安装 aws-cli

  1. 执行以下命令,在你的计算机上安装 aws-cli 版本 2:

如果你正在使用 macOS:

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target

如果你使用的是 Linux(x86)或 Windows 上的 WSL:

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
  1. 执行以下命令验证 AWS CLI 安装是否成功:

    $ aws --version
    

上述命令的输出应如下所示:

aws-cli/2.4.7 Python/3.8.8 Linux/5.11.0-41-generic exe/x86_64.ubuntu.20 prompt/off
  1. 执行以下命令配置 AWS CLI,并输入您的~/.aws/credentials,以便稍后运行命令时使用:

    $ aws configure
    

上述命令的输出应如下所示:

AWS Access Key ID [None]: YOURACCESSKEYHERE
AWS Secret Access Key [None]: YOURSECRETACCESSKEYHERE
Default region name [None]: us-east-1
Default output format [None]: json
  1. 如果要使用与凭证文件中配置的不同帐户,可以设置环境变量,直到当前 shell 会话结束时该变量将生效。根据需要,临时使用以下变量设置用户配置:

    $ export AWS_ACCESS_KEY_ID=YOURACCESSKEY2HERE
    $ export AWS_SECRET_ACCESS_KEY=YOURSECRETACCESS2KEYHERE 
    $ export AWS_DEFAULT_REGION=us-west-2
    

现在您已经在计算机上安装了 AWS 命令行接口,接下来让我们安装 Kubernetes 的 AWS IAM 认证器。

安装 Kubernetes 的 AWS IAM 认证器

Amazon EKS 利用 AWS IAM 为通过 EKS 创建的 Kubernetes 集群提供访问权限。为了让 kubectl 命令与 Amazon EKS IAM 角色一起工作,需要安装 Amazon IAM 认证器。让我们在您的计算机上安装 IAM 认证器:

  1. 执行以下命令安装aws-iam-authenticator

如果您使用的是 macOS:

$ brew install aws-iam-authenticator

如果您使用的是 Linux(x86)或 Windows 上的 WSL:

$ curl -o aws-iam-authenticator https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/aws-iam-authenticator
$ chmod +x ./aws-iam-authenticator
$ mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$PATH:$HOME/bin
$ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
  1. 验证其版本并确保已安装aws-iam-authenticator

    $ aws-iam-authenticator version
    

上述命令的输出应如下所示。为了能够执行以下步骤,aws-iam-authenticator版本应为0.5.0或更高:

{"Version":"v0.5.0","Commit":"1cfe2a90f68381eacd7b6dcfa2 bf689e76eb8b4b"}

现在,您已经在计算机上安装了aws-iam-authenticator

安装 eksctl 以管理 Amazon EKS

Amazon EKS 是 Amazon EC2 上的托管 Kubernetes 服务。要通过终端管理 Amazon EKS 并执行命令,需要使用 Amazon EKS 的官方 CLI——eksctl。有关更多信息,您可以参考 AWS eksctl 官方文档,网址为docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html。让我们在您的计算机上安装eksctl

  1. 执行以下命令以在您的计算机上安装eksctl

如果您使用的是 macOS:

$ brew tap weaveworks/tap
$ brew install weaveworks/tap/eksctl

如果您使用的是 Linux(x86)或 Windows 上的 WSL:

$ curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
$ sudo mv /tmp/eksctl /usr/local/bin
  1. 验证其版本并确保已安装eksctl

    $ eksctl version
    

上述命令的输出应如下所示:

0.77.0

为了执行以下步骤,eksctl版本应为0.77.0或更高版本。现在您已经在计算机上安装了eksctl,以便管理 Amazon EKS。

安装 Google Cloud SDK 以管理 Google Cloud

Google Cloud SDK(gcloud)是执行 Google Cloud 帐户命令所需的工具。以下说明假设您已经拥有一个启用了计费的有效 GCP 帐户。如果您还没有帐户,请访问console.cloud.google.com并创建一个帐户。让我们在您的计算机上安装gcloud

  1. 执行以下命令以在您的计算机上安装gcloud

如果您使用的是 macOS:

$ brew tap weaveworks/tap
$ brew install weaveworks/tap/eksctl

如果你正在使用 Linux(x86)或 Windows 上的 WSL:

$ curl https://sdk.cloud.google.com | bash
  1. 执行以下命令重新启动你的 shell:

    $ exec -l $SHELL
    
  2. 验证其版本并确保 gcloud 已安装:

    $ gcloud version
    

前面的命令输出应如下所示。为了能够执行以下操作,Google Cloud SDK 版本应为 339.0.0 或更高版本:

Google Cloud SDK 367.0.0
bq 2.0.72
core 2021.12.10
gsutil 5.5
  1. 执行以下命令初始化 SDK,并按照指示操作:

    $ gcloud init
    
  2. 执行以下命令为未来的部署设置默认区域。在我们的示例中,计算区域设置为 us-central1-a

    $ gcloud config set compute/zone us-central1-a
    

现在,你已经在计算机上安装了 gcloud 来管理 GKE。

安装 Azure CLI 以管理 Microsoft Azure

Azure CLI(az)是执行 Microsoft Azure 账户中命令所必需的。以下说明假设你已有一个启用计费的有效 Azure 账户。如果你还没有账户,请访问 portal.azure.com 创建一个账户。让我们在你的计算机上安装 Azure CLI:

  1. 执行以下命令在你的计算机上安装 gcloud

如果你正在使用 macOS:

$ brew update && brew install azure-cli
$ brew install jq

如果你正在使用 Linux(x86)或 Windows 上的 WSL:

$ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
$ sudo apt-get install jq
  1. 验证其版本并确保已安装 Azure CLI:

    $ az version
    

前面的命令输出应如下所示。为了能够执行以下步骤,Azure CLI 版本应为2.0.1或更高版本:

{
  "azure-cli": "2.31.0",
  "azure-cli-core": "2.31.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}
  1. 执行以下命令初始化 Azure CLI,并按照指示操作:

    $ az login
    
  2. 执行以下命令创建一个具有唯一名称的资源组,并为未来的部署设置默认区域。在我们的示例中,计算区域设置为 centralus

    $ az group create --name="pachyderm-group" --location=centralus
    

现在,你已经在计算机上安装了 Azure CLI 来管理 AKS。

在 Amazon EKS 上部署 Pachyderm

Kubernetes 是一个开源的容器编排平台,本身是一个庞大的主题。在本节中,我们从数据科学家的角度探讨容器化,仅专注于在市场上最常见的托管平台上运行我们的工作负载 Pachyderm。AWS 云平台上有多种方法和工具可以配置和管理生产级 Kubernetes 集群的生命周期,如 kOpskubesprayk3s、Terraform 等。欲了解更多配置细节,请参考 Kubernetes 官方文档 kubernetes.io/docs/setup/production-environment/。让我们学习在 AWS 托管的 Kubernetes 服务 Amazon EKS 上启动和运行 Pachyderm 所需服务的最简单方法。

准备 Amazon EKS 集群以运行 Pachyderm

按照以下步骤使用eksctl来配置一个 Amazon EKS 集群。eksctl最初作为一个第三方开源工具开发,现在是通过 CLI 部署和管理 EKS 集群的官方工具。您需要安装 AWS CLI 和 AWS IAM Kubernetes 认证工具,并配置它们的凭证。如果您已经有一个集群,可以跳过这些步骤,直接跳到 在 Amazon EKS 上部署 Pachyderm 部分。此外,您可以参考 Amazon EKS 的官方文档:eksctl.io/introduction/

  1. 执行以下命令,使用默认参数简单地部署 EKS 集群。此命令将生成一个包含两个m5.large工作节点的集群,使用官方 AWS EKS 亚马逊机器镜像AMI):

    $ eksctl create cluster
    

上述命令的输出应返回类似于以下内容的输出:

...
kubectl command should work with "/home/norton/.kube/config", try 'kubectl get nodes'
[]  EKS cluster "exciting-badger-1620255089" in "us-east-1" region is ready

重要提示

要自定义 EKS 集群配置,可以将附加参数传递给eksctl,如下所示:

eksctl create cluster --name <name> --version <version> \

--nodegroup-name <name> --node-type <vm-flavor> \

--nodes <number-of-nodes> --nodes-min <min-number-nodes> \

--nodes-max <max-number-nodes> --node-ami auto

  1. 执行以下命令验证集群部署:

    $ kubectl cluster-info && kubectl get nodes
    

上述命令的输出应如下所示:

Kubernetes control plane is running at https://ABCD.gr7.us-east-1.eks.amazonaws.com
CoreDNS is running at https://ABCD.gr7.us-east-1.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
NAME                             STATUS   ROLES    AGE    VERSION
ip-192-168-17-133.ec2.internal   Ready    <none>   21m    v1.21.5-eks-bc4871b 
ip-192-168-63-179.ec2.internal   Ready    <none>   21m    v1.21.5-eks-bc4871b

现在,您的 Amazon EKS 集群已配置好,并准备好部署 Pachyderm。

创建 S3 对象存储桶

Pachyderm 使用符合 S3 标准的对象存储来存储数据。按照以下步骤创建一个 S3 对象存储桶:

  1. 生成将用于创建 S3 存储桶的变量,并将其传递给pachctl,以便稍后存储 Pachyderm 数据。确保使用唯一的存储桶名称。在我们的示例中,我们将使用 s3.pachyderm 作为存储桶名称,容量为 200 GB,并位于与 EKS 集群相同的区域us-east-1

    $ export S3_BUCKET_NAME=s3.pachyderm
    $ export EBS_STORAGE_SIZE=200
    $ export AWS_REGION=us-east-1
    
  2. 为了让 Pachyderm 存储管道数据,需要一个专用的 S3 存储桶。执行以下命令,根据您的变量定义创建一个 S3 存储桶:

    $ aws s3api create-bucket --bucket ${S3_BUCKET_NAME} \
    --region ${AWS_REGION}
    
  3. 执行以下命令确认存储桶已创建:

    $ aws s3api list-buckets --query 'Buckets[].Name'
    

上述命令的输出应如下所示:

[
    "s3.pachyderm",
]

现在我们已经创建了一个 S3 存储桶,可以准备在 Amazon EKS 上部署 Pachyderm。

部署集群

当你开始学习 Pachyderm 时,建议在一个小型本地集群中进行实验。我们在第四章中已介绍了 Pachyderm 的本地部署,本地安装 Pachyderm。在本章中,我们将重点介绍使用 IAM 角色在 Amazon EKS 集群上进行可扩展的生产级部署。

按照以下步骤在您的 Amazon EKS 集群上安装 Pachyderm:

  1. 分配给 EKS 集群的 AWS IAM 角色需要有权访问你在创建 S3 对象存储桶部分中创建的 S3 存储桶。如以下截图所示,登录到你的 AWS 管理控制台并进入 EKS 仪表板:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_05_001.jpg

图 5.1 – 亚马逊 EKS 集群仪表板

  1. 点击集群。定位到集群中的 EC2 实例。找到 IAM 角色在实例描述页面。点击IAM 角色

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_05_002.jpg

图 5.2 – 分配给 EC2 实例的 IAM 角色

  1. 用你的存储桶名称替换下面的<s3-bucket>占位符。点击添加内联策略,创建一个类似如下代码的内联策略:

    {
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::<s3-bucket>",
                    "arn:aws:s3:::*/*"
                ]
            }
        ]
    }
    
  2. 切换到信任关系标签页,并点击编辑信任关系按钮。确认信任关系类似于下述内容,否则,进行更改并点击更新信任策略按钮来更新:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  3. 现在,执行以下命令将 Pachyderm Helm Chart 仓库添加到你的本地仓库:

    $ helm repo add pach https://helm.pachyderm.com  
    
  4. 执行以下命令从 Chart 仓库获取最新的 Chart 信息:

    $ helm repo update
    
  5. 为了快速部署,替换下方的 Amazon S3 存储桶名称、访问密钥 ID 和密钥,执行命令在没有控制台的情况下将 Pachyderm 的最新版本部署到你的集群:

    $ helm install pachd pach/pachyderm \ 
    --set deployTarget=AMAZON \
    --set pachd.storage.amazon.bucket="AWS_S3_BUCKET" \
    --set pachd.storage.amazon.id="AWS_ACCESS_KEY" \
    --set pachd.storage.amazon.secret="AWS_SECRET" \
    --set pachd.storage.amazon.region="us-east-1"
    --set pachd.externalService.enabled=true
    

如果你有企业密钥并希望通过 Pachyderm 控制台用户界面部署它,执行以下命令:

$ helm install pachd pach/pachyderm \ 
--set deployTarget=AMAZON \
--set pachd.storage.amazon.bucket="AWS_S3_BUCKET" \
--set pachd.storage.amazon.id="AWS_ACCESS_KEY" \
--set pachd.storage.amazon.secret="AWS_SECRET" \
--set pachd.storage.amazon.region="us-east-1" \
--set pachd.enterpriseLicenseKey=$(cat license.txt) \
--set console.enabled=true

一旦控制台成功部署,按照访问 Pachyderm 控制台部分的说明访问控制台。

命令返回以下输出:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_05_003.jpg

图 5.3 – Pachyderm Helm Chart 在 Kubernetes 上部署

可选:自定义安装参数

你还可以下载并自定义 Helm Chart 仓库中的values.yaml文件,github.com/pachyderm/pachyderm/tree/master/etc/helm/pachyderm,进一步优化运行 Pachyderm 所需的组件。

执行以下命令创建values.yaml文件的本地副本:

$ wget https://raw.githubusercontent.com/pachyderm/pachyderm/master/etc/helm/pachyderm/values.yaml

一旦自定义完成,你可以使用相同的 YAML 文件,通过执行以下命令来安装你的 Helm Chart:

$ helm install pachyderm -f values.yaml pach/pachyderm

  1. Kubernetes 部署是一个控制器,根据你在 manifest 文件中定义的要求,推出一个 Pod 的副本集。副本集是一组相同服务的实例。执行以下命令验证在安装过程中创建的部署状态:

    $ kubectl get deployments
    

上述命令的输出应如下所示:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_05_005.jpg

](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_05_004.jpg)

图 5.4 – Pachyderm 部署对象列表

  1. 执行以下命令以验证安装是否成功,并查看作为部署一部分创建的 Pods:

    $ kubectl get pods
    

上述命令的输出应如下所示:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_05_004.jpg

](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_05_005.jpg)

图 5.5 – Pachyderm Pods 列表

  1. 执行以下命令以验证作为部署一部分创建的持久卷:

    $ kubectl get pv
    

上述命令的输出应如下所示:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                         STORAGECLASS         REASON   AGE
pvc-cab1f435-02fb-42df-85d9-d49f6151b281   200Gi      RWO             Delete           Bound    default/etcd-storage-etcd-0   etcd-storage-class            81m

重要提示

当使用--dynamic-etcd-nodes标志部署 Pachyderm 时,它会创建一个etcd部署来管理管理元数据。etcd Pods 使用默认的 AWS StorageClass,gp2来配置块存储。如果在部署过程中需要使用不同的 StorageClass,则需要向集群部署 Amazon EBS CSI 驱动程序,并在 Helm Chart 部署过程中将etcd.storageclass参数更新为gp3

  1. 执行以下命令以验证 Pachyderm 的成功安装:

    $ pachctl version
    

上述命令的输出应如下所示:

COMPONENT           VERSION
pachctl             2.0.0
pachd               2.0.0

现在我们已经在 AWS EKS 集群上安装了 Pachyderm,准备好创建我们的第一个管道了。

在 Amazon EKS 上删除 Pachyderm 部署

如果你需要删除 Pachyderm 部署或重新开始,可以清除你的环境并按照准备 EKS 集群以运行 Pachyderm的说明从头开始。让我们执行以下步骤来删除现有的 Pachyderm 部署:

  1. 如果你使用了不同的名称来命名你的 Helm 实例,请执行以下命令以查找通过 Helm Chart 部署的 Pachyderm 实例名称:

    $ helm ls | grep pachyderm
    

上述命令的输出应如下所示:

pachd    default         1               2021-12-27 20:20:33.168535538 -0800 PST deployed        pachyderm-2.0.0    2.0.0
  1. 使用你的 Pachyderm 实例名称执行以下命令,以从集群中移除 Pachyderm 组件:

    $ helm uninstall pachd
    
  2. 执行以下命令以获取已部署的 EKS 集群列表,并识别你的集群名称:

    $ eksctl get cluster
    

上述命令的输出应如下所示:

2021-05-05 21:53:56 []  eksctl version 0.47.0
2021-05-05 21:53:56 []  using region us-east-1
NAME                            REGION          EKSCTL CREATED
exciting-badger-1620255089      us-east-1       True
  1. 如果你想完全移除集群,请从前面的输出中复制集群名称,并在替换名称后执行以下命令以删除 Amazon EKS 集群。请注意,集群上的所有其他工作负载也会被销毁:

    $ eksctl delete cluster --name <name>  
    

上述命令的输出应类似于以下内容:

...
2021-05-05 22:00:54 []  will delete stack "eksctl-exciting-badger-1620255089-cluster"
2021-05-05 22:00:54 []  all cluster resources were deleted

现在你已经完全从 AWS 账户中移除了 Pachyderm 和 EKS 集群。

在 GKE 上部署 Pachyderm

如果你使用 Google Cloud,可以通过kOpskubespray、Terraform 等方式部署托管的 Kubernetes 服务。有关其他配置详情,你可以参考 Kubernetes 的官方文档:kubernetes.io/docs/setup/production-environment/。让我们学习如何在 Google Cloud 的托管 Kubernetes 服务 GKE 上以最简单的方式启动 Pachyderm 所需的服务。

准备 GKE 集群以运行 Pachyderm

按照以下步骤使用 Google Cloud SDK 配置 GKE 集群。你需要安装 Google Cloud SDK 并配置其凭据。如果你已经有了集群,可以跳过这些说明并跳到 部署集群部分。另外,你可以参考 Google Cloud SDK 官方文档 cloud.google.com/sdk/docs/install

  1. 执行以下命令以使用默认参数部署 GKE 集群。此命令将在默认计算区域内使用容器优化操作系统COS)和 Docker 生成一个包含三节点的集群,推荐使用 n2-standard-4 实例类型:

    $ gcloud container clusters create pachyderm-cluster \
    --scopes compute-rw,storage-rw,service-management,service-control,logging-write,monitoring \
    --machine-type n2-standard-4
    

前面的命令输出应类似于以下内容:

...
kubeconfig entry generated for pachyderm-cluster.
NAME               LOCATION       MASTER_VERSION    MASTER_IP      MACHINE_TYPE   NODE_VERSION      NUM_NODES  STATUS
pachyderm-cluster  us-central1-a  1.18.16-gke.2100  35.238.200.52  n2-standard-4  1.18.16-gke.2100  1          RUNNING

重要提示

若要简单地自定义 GKE 集群参数,可以使用 GCP 控制台和 Kubernetes Engine 创建向导。在向导中配置参数后,单击向导中的命令行按钮,将配置转换为 CLI 命令并使用 gcloud 命令。

  1. 执行以下命令以验证集群的部署:

    $ kubectl cluster-info && kubectl get nodes
    

前面的命令输出应如下所示:

Kubernetes control plane is running at https://<IP_ADDRESS>
GLBCDefaultBackend is running at https://<IP_ADDRESS>/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy
KubeDNS is running at https://<IP_ADDRESS>/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://<IP_ADDRESS>/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
NAME                                               STATUS    ROLES    AGE     VERSION
gke-pachyderm-cluster-default-pool-26cf3a77-1vr1   Ready    <none>   12      v1.18.16-gke.2100
gke-pachyderm-cluster-default-pool-26cf3a77-5sgs   Ready    <none>   12m     v1.18.16-gke.2100
gke-pachyderm-cluster-default-pool-26cf3a77-lkr4   Ready    <none>   12m     v1.18.16-gke.2100

现在,你的 GKE 集群已配置完毕,准备部署 Pachyderm。

创建 Google Cloud 对象存储桶

Pachyderm 使用对象存储来存储数据。按照以下步骤创建 Google Cloud 对象存储桶:

  1. 生成用于创建 pachctl 的变量,这些变量将在稍后存储你的 Pachyderm 数据。确保使用唯一的存储桶名称。在我们的示例中,我们将使用 pachyderm-bucket 作为存储桶名称,容量为 200 GB,并位于与 GKE 集群相同的区域 us-central1

    $ export GCS_BUCKET_NAME=pachyderm-bucket
    $ export GKE_STORAGE_SIZE=200
    
  2. 为了让 Pachyderm 存储管道数据,必须创建一个专用的 GCS 存储桶。执行以下命令以使用你的变量定义的参数创建一个 GCS 存储桶:

    $ gsutil mb gs://${GCS_BUCKET_NAME}
    
  3. 执行以下命令以确认存储桶已创建:

    $ gsutil ls
    

前面的命令输出应如下所示:

gs://pachyderm-bucket/

现在,你已经创建了一个 GCS 存储桶来存储 Pachyderm 数据。我们已经准备好在 GKE 上部署 Pachyderm。

部署集群

当你开始学习 Pachyderm 时,建议在小型本地集群中运行实验。我们之前已经在 第四章中介绍了 Pachyderm 的本地部署,在本地安装 Pachyderm。在本章中,我们将重点介绍使用 GKE 集群上的 IAM 角色部署可扩展的生产级 Pachyderm。

按照以下步骤在 GKE 集群上安装 Pachyderm:

  1. 如果你尚未创建服务账户,执行以下命令来创建一个服务账户:

    $ gcloud iam service-accounts create my-service-account --display-name=my-account
    
  2. 将以下 pachyderm-book 替换为你的项目名称,并为你的服务账户添加一个绑定的存储管理员角色:

    $ gcloud projects add-iam-policy-binding \
    pachyderm-book –role roles/owner --member \
    serviceAccount:my-service-account@pachyderm-book.iam.gserviceaccount.com    
    
  3. 现在,执行以下命令将 Pachyderm Helm Chart 仓库添加到本地仓库:

    $ helm repo add pach https://helm.pachyderm.com  
    
  4. 执行以下命令从 Chart 仓库获取最新的 Chart 信息:

    $ helm repo update
    
  5. 对于快速部署,替换 Google Cloud 存储桶名称和 Google Cloud 凭据,并执行以下命令,在不使用控制台的情况下,将 Pachyderm 的最新版本部署到你的集群中:

    $ helm install pachd pach/pachyderm \ 
    --set deployTarget=GOOGLE \
    --set pachd.storage.google.bucket="GOOGLE_BUCKET" \
    --set pachd.storage.google.cred="GOOGLE_CRED" \
    --set pachd.externalService.enabled=true
    

如果你有企业密钥并希望通过 Pachyderm 的控制台用户界面部署,请执行以下命令:

$ helm install pachd pach/pachyderm \ 
--set deployTarget=GOOGLE \
--set pachd.storage.google.bucket="GOOGLE_BUCKET" \
--set pachd.storage.google.cred="GOOGLE_CRED" \
--set pachd.enterpriseLicenseKey=$(cat license.txt) \
--set console.enabled=true

一旦控制台成功部署,按照访问 Pachyderm 控制台部分的说明访问控制台。

  1. Kubernetes 部署是一个控制器,它根据清单文件中定义的要求推出 Pods 的副本集。执行以下命令验证安装过程中创建的部署状态:

    $ kubectl get deployments
    

上述命令的输出应如下所示:

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
dash    1/1     1            1           44s
pachd   1/1     1            1           45s 
  1. 执行以下命令验证安装是否成功,并查看作为部署的一部分创建的 Pods:

    $ kubectl get Pods
    

上述命令的输出应如下所示:

NAME                    READY  STATUS   RESTARTS  AGE
dash-cf6f47d7d-xpvvp    2/2    Running  0         104s
etcd-0                  1/1    Running  0         104s
pachd-6c99f6fb7-dnjhn   1/1    Running  0         104s
  1. 执行以下命令验证作为部署一部分创建的持久卷:

    $ kubectl get pv
    

上述命令的输出应如下所示:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                         STORAGECLASS         REASON   AGE
pvc-c4eac147-8571-4ccb-8cd0-7c1cb68a627d 200Gi      RWO            Delete           Bound    default/etcd-storage-etcd-0   etcd-storage-class            3m4s
  1. 执行以下命令验证 Pachyderm 是否成功安装:

    $ pachctl version
    

上述命令的输出应如下所示:

COMPONENT           VERSION
pachctl             2.0.0
pachd               2.0.0

现在我们已经在你的 GKE 集群上安装了 Pachyderm,你可以开始创建你的第一个流水线。

在 GKE 上删除 Pachyderm 部署

如果你需要删除现有的部署并重新开始,可以通过使用准备 GKE 集群运行 Pachyderm的说明清除你的环境并重新开始。接下来让我们执行以下步骤来删除现有的 Pachyderm 部署:

  1. 如果你使用了不同的 Helm 实例名称,执行以下命令查找通过 Helm Chart 部署的 Pachyderm 实例名称:

    $ helm ls | grep pachyderm
    

上述命令的输出应如下所示:

pachd    default         1               2021-12-27 20:20:33.168535538 -0800 PST deployed        pachyderm-2.0.0    2.0.0
  1. 使用你的 Pachyderm 实例名称执行以下命令,从集群中删除 Pachyderm 组件:

    $ helm uninstall pachd
    
  2. 执行以下命令以检索已部署的 GKE 集群列表,并识别你的集群名称:

    $ gcloud container clusters list
    

上述命令的输出应如下所示:

NAME               LOCATION       MASTER_VERSION    MASTER_IP      MACHINE_TYPE   NODE_VERSION      NUM_NODES  STATUS
pachyderm-cluster  us-central1-a  1.18.16-gke.2100  35.238.200.52  n2-standard-2  1.18.16-gke.2100  3          RUNNING
  1. 如果你希望完全删除集群,请从之前的输出中复制集群名称,并在替换名称后执行以下命令来删除 GKE 集群。请注意,集群上的所有其他工作负载也会被销毁:

    $ gcloud container clusters delete <name> 
    

上述命令的输出应类似于以下内容:

...
Deleting cluster pachyderm-cluster...done.
Deleted [https://container.googleapis.com/v1/projects/pachydermbook/zones/us-central1-a/clusters/pachyderm-cluster]. 

现在你已经完全从 GCP 账户中移除了 Pachyderm 和你的 Kubernetes 集群。

在 Microsoft AKS 上部署 Pachyderm

如果你使用的是 Microsoft Azure,可以通过自动化和命令行工具在 Azure 平台上部署托管的 Kubernetes 服务,借助 kOpskubespray、Terraform 等工具。有关更多配置细节,请参考 Kubernetes 的官方文档 kubernetes.io/docs/setup/production-environment/。让我们了解在 AKS 上启动 Pachyderm 所需服务的最简单方法。

准备一个 AKS 集群以运行 Pachyderm

按照以下步骤使用 Azure CLI 配置 AKS 集群。你需要安装 Azure CLI 并配置其凭据。如果你已有集群,可以跳过这些说明,直接跳到 在 Microsoft AKS 上部署 Pachyderm 部分。此外,你还可以参考 Azure CLI 的官方文档 docs.microsoft.com/en-us/cli/azure/

  1. 在之前指定的 resource-group 中执行以下命令,以使用默认参数部署 AKS 集群。此命令将在默认计算区中生成一个三节点集群,实例类型为推荐的 Standard_DS4_v2

    $ az aks create --resource-group pachyderm-group --name pachyderm-cluster --generate-ssh-keys --node-vm-size Standard_DS4_v2
    

前面的命令输出应与以下内容类似:

...
   "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "pachyderm-group",
  "servicePrincipalProfile": {
    "clientId": "msi",
    "secret": null
  },...

重要提示

如果你不记得资源组名称,可以使用 az group list 命令列出之前创建的资源组。

  1. 执行以下命令以连接到你的集群:

    $ az aks get-credentials --resource-group pachyderm-group --name pachyderm-cluster
    
  2. 执行以下命令以验证集群部署:

    $ kubectl get nodes
    

前面的命令输出应如下所示:

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-34139531-vmss000000   Ready    agent   5m57s   v1.19.9
aks-nodepool1-34139531-vmss000001   Ready    agent   5m58s   v1.19.9
aks-nodepool1-34139531-vmss000002   Ready    agent   5m58s   v1.19.9

现在你的 AKS 集群已配置完毕,可以部署 Pachyderm 了。

创建 Azure 存储容器

Pachyderm 使用 blob 存储来存储数据,使用块存储来存储元数据。建议使用 SSD 而非标准的基于 HDD 的较慢存储选项。

按照以下步骤创建一个 Premium LRS 块 blob 存储容器:

  1. 生成将用于创建 Azure 块 blob 存储的变量,并传递给 pachctl 以便稍后存储 Pachyderm 数据。确保使用唯一的存储帐户和容器名称。在我们的示例中,我们将使用 pachydermstorageaccount 作为 STORAGE_ACCOUNTpachydermblobcontainer 作为 CONTAINER_NAME,并将其定位在 centralus 区域:

    $ export RESOURCE_GROUP=pachyderm-group
    $ export STORAGE_ACCOUNT=pachydermstorageaccount
    $ export CONTAINER_NAME=pachydermblobcontainer
    $ export AZURE_STORAGE_SIZE=200
    
  2. 执行以下命令,将存储帐户与由变量定义的参数传递给 Azure 存储:

    $ az storage account create \
    --resource-group="${RESOURCE_GROUP}" \
      --location="centralus" \
      --sku=Premium_LRS \
      --name="${STORAGE_ACCOUNT}" \
      --kind=BlockBlobStorage
    
  3. 执行以下命令确认存储桶已创建:

    $ az storage account list
    

前面的命令输出应如下所示:

...
    "web": "https://pachydermstorageaccount.z19.web.core.windows.net/"
  },
  "primaryLocation": "centralus",
  "privateEndpointConnections": [],
  "provisioningState": "Succeeded",
  "resourceGroup": "pachyderm-group",
...
  1. 部署 Pachyderm 时需要一个存储帐户密钥。执行以下命令以将存储密钥存储在变量中:

    $ STORAGE_KEY="$(az storage account keys list \
                  --account-name="${STORAGE_ACCOUNT}" \
                  --resource-group="${RESOURCE_GROUP}" \
    --output=json \
                  | jq '.[0].value' -r
                )"
    
  2. 执行以下命令,在你的存储帐户中创建一个数据存储容器:

    $ az storage container create --name ${CONTAINER_NAME} \
              --account-name ${STORAGE_ACCOUNT} \
              --account-key "${STORAGE_KEY}"
    

前面的命令输出应如下所示:

{
  "created": true
}

现在,你在 Azure 存储帐户中已创建了一个 Azure 数据存储容器,用于存储 Pachyderm 数据。

部署集群

当您开始学习 Pachyderm 时,建议在一个小型本地集群中进行实验。我们之前在 第四章 中介绍了 Pachyderm 的本地部署,本地安装 Pachyderm。在本章中,我们将重点介绍在 AKS 集群上进行可扩展的生产级部署。

按照以下步骤在您的 AKS 集群上安装 Pachyderm:

  1. 如果尚未连接到 Kubernetes 集群,请执行以下命令连接到您的集群:

    $ az aks get-credentials --resource-group pachyderm-group --name pachyderm-cluster
    
  2. 若要快速部署,替换 Azure 存储容器名称、Azure 存储帐户名称和 AKS 帐户密钥,然后执行以下命令,在您的集群上部署最新版本的 Pachyderm,而不使用控制台:

    $ helm install pachd pach/pachyderm \ 
    --set deployTarget=MICROSOFT \
    --set pachd.storage.microsoft.container="CONTAINER_NAME" \
    --set pachd.storage.microsoft.id="AZURE_ID" \
    --set pachd.storage.microsoft.secret="AZURE_SECRET" \
    --set pachd.externalService.enabled=true
    

如果您有企业密钥,并且希望通过 Pachyderm 的控制台用户界面进行部署,请执行以下命令:

$ helm install pachd pach/pachyderm \ 
--set deployTarget=MICROSOFT \
--set pachd.storage.microsoft.container="CONTAINER_NAME" \
--set pachd.storage.microsoft.id="AZURE_ID" \
--set pachd.storage.microsoft.secret="AZURE_SECRET" \
--set pachd.enterpriseLicenseKey=$(cat license.txt) \
--set console.enabled=true

一旦控制台成功部署,按照 访问 Pachyderm 控制台 部分的指示访问控制台。

  1. Kubernetes 部署是一个控制器,它基于清单文件中定义的要求,推出一个 Pod 的副本集。执行以下命令以验证安装过程中创建的部署状态:

    $ kubectl get deployments
    

前面命令的输出应如下所示:

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
dash    1/1     1            1           39s
pachd   1/1     1            1           39s 
  1. 执行以下命令以验证成功安装并查看作为部署的一部分创建的 Pods:

    $ kubectl get pods
    

前面命令的输出应如下所示:

NAME                    READY   STATUS    RESTARTS   AGE
dash-866fd997-z79jj     2/2     Running   0          54s
etcd-0                  1/1     Running   0          54s
pachd-8588c44f56-skmkl  1/1     Running   0          54 s
  1. 执行以下命令以验证作为部署的一部分创建的持久卷:

    $ kubectl get pv
    

前面命令的输出应如下所示:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                         STORAGECLASS   REASON   AGE
pvc-9985a602-789d-40f3-9249-7445a9c15bc3   200Gi      RWO            Delete           Bound    default/etcd-storage-etcd-0   default                 89s

重要说明

当使用 --dynamic-etcd-nodes 标志部署 Pachyderm 时,它会创建一个 etcd 部署来管理管理元数据。在 Azure 中,etcd Pods 使用 default StorageClass 提供的块存储。这种存储类使用 azure-disk 提供程序和 StandardSSD_LRS 卷。如果在部署过程中想使用不同的 StorageClass,您可以自定义 values.yaml 文件,并在部署之前更新 etcd.storageClass 参数。

  1. 执行以下命令以验证 Pachyderm 是否已成功安装:

    $ pachctl version
    

前面命令的输出应如下所示:

COMPONENT           VERSION
pachctl             2.0.0
pachd               2.0.0

现在,您已在 AKS 集群上安装了 Pachyderm,准备创建您的第一个管道。

在 AKS 上删除 Pachyderm 部署

如果需要删除部署或重新开始,您可以使用 准备 AKS 集群以运行 Pachyderm 指令来清除环境并重新开始。

让我们执行以下步骤以删除现有的 Pachyderm 部署:

  1. 如果您为 Helm 实例使用了不同的名称,请执行以下命令查找使用 Helm Chart 部署的 Pachyderm 实例名称:

    $ helm ls | grep pachyderm
    

前面命令的输出应如下所示:

pachd    default         1               2021-12-27 20:20:33.168535538 -0800 PST deployed        pachyderm-2.0.0    2.0.0
  1. 使用您的 Pachyderm 实例名称执行以下命令,以从集群中删除 Pachyderm 组件:

    $ helm uninstall pachd
    
  2. 执行以下命令以检索已部署的所有 AKS 集群列表,并识别您的集群名称:

    $ az aks list
    

上述命令的输出应如下所示:

...
    "location": "centralus",
    "maxAgentPools": 100,
    "name": "pachyderm-cluster",
    "networkProfile": {
  1. 如果您想完全删除集群,请从上述输出中复制您的集群名称,并在替换名称后执行以下命令以删除 AKS 集群。请注意,此集群上的所有其他工作负载也将被销毁:

    $ az aks delete --name <name> --resource-group pachyderm-group
    

上述命令的输出应与以下内容类似:

...
Deleting cluster pachyderm-cluster...done.
Deleted [https://container.googleapis.com/v1/projects/pachydermbook/zones/us-central1-a/clusters/pachyderm-cluster]. 

现在,您已从 AKS 帐户中完全删除了 Pachyderm 和您的 Kubernetes 集群。

访问 Pachyderm 控制台

Pachyderm 企业版提供了一个图形用户界面,您可以在其中查看管道和代码库。使用端口转发访问 Pachyderm 控制台已在第四章在本地安装 Pachyderm中进行了介绍。

此外,对于云部署,您可以部署 Kubernetes Ingress 来安全访问 Pachyderm 控制台。有关更多信息,请参阅官方 Pachyderm 文档。

概述

在本章中,我们了解了在主要云提供商的托管 Kubernetes 服务上运行 Pachyderm 所需的软件先决条件,包括 AWS、Google Cloud 和 Microsoft Azure。

我们获取了有关云提供商命令行工具的基本知识,并学习了如何在本地机器上安装和操作这些工具,以提供生产级别的 Kubernetes 集群。

我们创建了一个对象存储桶,并使用最常见的配置选项部署了高可用性多节点托管 Kubernetes 集群。最后,我们部署了一个 Pachyderm 实例。

在下一章中,我们将详细了解如何创建您的第一个管道。您将学习一个简单的数据科学示例和管道创建工作流程。

进一步阅读

您可以参考本章涵盖的主题的以下链接获取更多信息:

第六章:第六章:创建你的第一个管道

第三章中,我们学习了 Pachyderm 管道规范以及你可以在其中配置的参数。管道规范是管道中最关键的配置部分,与代码一起使用。在本章中,我们将学习如何创建一个执行图像处理的 Pachyderm 管道。我们将详细介绍这一过程的所有步骤,包括创建 Pachyderm 仓库、创建管道、查看计算结果,并在原有管道中添加一个额外步骤。

本章将涵盖以下主题:

  • 管道概述

  • 创建仓库

  • 创建管道规范

  • 查看管道结果

  • 添加另一个管道步骤

技术要求

本章要求你具备以下组件,并确保它们已安装和配置。

对于本地 macOS 安装,你需要以下内容:

  • macOS Mojave、Catalina、Big Sur 或更高版本

  • Docker Desktop for Mac 10.14

  • minikube v1.19.0 或更高版本

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

对于本地 Windows 安装,你需要以下内容:

  • Windows Pro 64 位 v10 或更高版本

  • Windows Subsystem for LinuxWSL)2 或更高版本

  • Microsoft Powershell v6.2.1 或更高版本

  • Hyper-V

  • minikube v1.19.0 或更高版本

  • kubectl v1.18 或更高版本

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

对于Amazon Elastic Kubernetes ServiceAmazon EKS)安装,你需要以下内容:

  • kubectl v.18 或更高版本

  • eksctl

  • aws-iam-authenticator

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

对于 Microsoft Azure 云安装,你需要以下内容:

  • kubectl v.18 或更高版本

  • Azure CLI

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

  • jq 1.5 或更高版本

对于Google Kubernetes EngineGKE)云安装,你需要以下内容:

  • Google Cloud SDK v124.0.0 或更高版本

  • kubectl v.18 或更高版本

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

你不需要任何特殊硬件来运行本章中的管道。如果你在本地运行 Pachyderm 集群,任何现代笔记本电脑都应支持本章中的所有操作。如果你在云平台上运行 Pachyderm,你需要一个持久卷PV)。更多细节请参见第五章在云平台上安装 Pachyderm

本章中描述的所有脚本和数据可以在github.com/PacktPublishing/Reproducible-Data-Science-with-Pachyderm/tree/main/Chapter06-Creating-Your-First-Pipeline获取。

现在我们已经回顾了本章的技术要求,接下来让我们更深入地了解我们的管道。

管道概述

第四章本地安装 Pachyderm》和第五章在云平台上安装 Pachyderm》中,我们学习了如何在本地或云平台上部署 Pachyderm。到现在为止,你应该已经在自己的电脑或云平台上运行了某个版本的 Pachyderm。现在,让我们创建我们的第一个管道。

Pachyderm 管道是一种技术,它处理来自 Pachyderm 输入仓库或多个输入仓库的数据,并将其上传到 Pachyderm 输出仓库。每次新的数据上传到输入仓库时,管道会自动处理这些数据。每次新的数据进入仓库时,它会被记录为一个提交哈希,可以稍后访问、重新运行或分析。因此,管道是 Pachyderm 生态系统中的一个重要组件,确保数据科学工作负载的可复现性。

为了帮助你快速入门,我们准备了一个简单的图像处理示例,它将在图像上绘制轮廓。轮廓是表示物体形状的外框。这是一项常用于图像处理管道的有用技术。

图像处理是一项广泛使用的技术,它可以增强图像质量、将图像转换为另一张图像、提取图像的各种信息等。通过机器学习,你可以建立管道来确定图像中的物体、生成图像的直方图等。

有许多开源库可用于高级图像处理,其中最著名的是OpenCVscikit-image。这两个库广泛应用于机器学习专家的各种图像处理任务。

在这个示例中,我们将使用 scikit-image。scikit-image 或skimage是一个开源图像处理库,允许你运行各种图像处理算法来分析和转换图像。scikit-image 是专门为 Python 编程语言设计的。

在这个示例中,我们将使用 scikit-image 和其他几个开源组件,包括以下内容:

  • NumPy:一个开源的 Python 库,帮助你处理数组。当你需要分析或分割图像时,图像必须先转换为数组才能进行处理。

  • Matplotlib:一个扩展 NumPy 的库,帮助你绘制图像并创建数据可视化。

我们将创建一个管道,使用来自photos仓库的数据,运行一个contour.py脚本来处理photos仓库中的图像,并将结果上传到contour输出仓库。

以下图表解释了我们的管道:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_001.jpg

图 6.1 – 轮廓管道

以下代码解释了contour.py脚本:

import numpy as np
import matplotlib.pyplot as plt
import os
from skimage.io import imread, imsave
from skimage import measure
import logging
logging.basicConfig(level=logging.INFO)
def create_contours(photo):
     image = imread(photo, as_gray=True)
     t = os.path.split(photo)[1]
     c = measure.find_contours(image, 0.9)
     fig, ax = plt.subplots()
     ax.imshow(image, vmin=-1, vmax=1, cmap='gray')
     for contour in c:
         ax.plot(contour[:, 1], contour[:, 0], linewidth=2)
     ax.axis('image')
     ax.set_xticks([])
     ax.set_yticks([])
     plt.savefig(os.path.join("/pfs/out", os.path.splitext(t)[0]+'.png'))
for dirpath, dirnames, filenames in os.walk("/pfs/photos"):
     for f in filenames:
         create_contours(os.path.join(dirpath, f))

上面的脚本包含一个名为create_contours的函数。该函数执行以下操作:

  1. 首先,它从pfs/photos仓库中读取图像文件,并将其转换为灰度图像。这是因为需要将彩色图像(RGB)转换为二维的 NumPy 数组。

  2. 然后,它使用measure.find_contours API 方法,这个方法来自skimage.measure.find_contours模块,用于在值为 0.9 的位置找到我们将图像转换成的二维数组的轮廓。这个值代表了明暗之间的位置。通常,最好使用一个中间值,但在这个例子中,0.9 得到了最佳结果。

  3. 然后,它定义了子图以可视化我们的图像,并将其保存在pfs/out目录中,实际上,这将是pfs/out/contour输出仓库。

  4. 脚本的最后一部分告诉程序将create_contours函数应用于pfs/photos仓库中的所有文件。

这个脚本内置在一个 Docker 镜像中,我们将使用它来运行我们的管道。这个 Docker 镜像托管在 Docker Hub 上。

我们将使用来自 freepik.com 的以下图像进行处理。第一张图像是棕色花瓶的图像:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_002.jpg

图 6.2 – 棕色花瓶

第二张图像是手的图像:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_003.jpg

图 6.3 – 手

最后,第三张图像是风景的图像:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_004.jpg

图 6.4 – 风景

如你所见,这些是一些简单的图像,找出轮廓应该很容易。你可以尝试将这个管道应用于更复杂的图像,看看你能得到什么结果。一般来说,图像中元素之间的对比度越大,算法能找到的轮廓就越精确。

现在我们已经理解了正在处理的示例,让我们继续创建一个仓库吧。

创建一个仓库

创建管道的第一步是创建一个 Pachyderm 仓库并将一些数据放入其中。正如你可能还记得的,第二章《Pachyderm 基础》,Pachyderm 仓库是 Pachyderm 集群中的一个位置,用于存储数据。我们将创建一个输入仓库,管道将在第一次运行时自动创建一个输出仓库。

要创建一个输入仓库,请执行以下步骤:

  1. 登录到你的终端。

  2. 验证 Pachyderm 是否已启动并运行:

    % pachctl version
    

你应该看到类似以下的输出:

COMPONENT           VERSION
pachctl             2.0.0
pachd               2.0.0

pachd组件必须列出一个版本。

  1. 创建一个名为photos的 Pachyderm 输入仓库:

    % pachctl create repo photos
    

不会返回任何输出。

  1. 验证photos仓库是否已经创建:

    % pachctl list repo
    

你应该看到以下输出:

NAME   CREATED        SIZE (MASTER) ACCESS LEVEL
photos 11 seconds ago ≤ 0B          [repoOwner]

在这里,你可以看到photos仓库已经创建,并且是空的。尽管主分支的大小被计算在内,但此时该仓库中没有分支。Pachyderm 会在你放入文件时自动创建指定的分支。

  1. 将一些图片放入photos仓库中。我们需要将文件放入photos仓库的根目录中。为此,您需要使用-r(递归)标志,并指定包含文件的计算机目录路径。例如,如果您将文件下载到计算机上的数据文件夹中,则需要运行以下命令:

    % pachctl put file -r photos@master:/ -f data
    

以下是一些示例输出:

data/brown_vase.png 25.82 KB / 25.82 KB [=====] 0s 0.00 b/s
data/hand.png 33.21 KB / 33.21 KB [======] 0s 0.00 b/s
data/landscape.png 54.01 KB / 54.01 KB [=========] 0s

Pachyderm 会自动创建指定的分支。在此示例中,Pachyderm 会创建master分支。您可以随意命名分支,但为了简便起见,我们称之为master。本节中的所有命令都假设使用master分支。

  1. 验证文件是否已添加到仓库:

    % pachctl list file photos@master
    

以下是一些示例输出:

NAME           TYPE SIZE
/brown_vase.png file 25.21KiB
/hand.png       file 32.43KiB
/landscape.png  file 52.74KiB 
  1. 另外,您可以通过对每个图像运行pachctl put file命令,将每个文件逐一放入。例如,要放置landscape.jpg文件,请将计算机上的目录更改为data并使用以下命令:

    % pachctl put file photos@master -f landscape.jpg
    

以下是一些示例输出:

data/landscape.jpg 54.01KB / 54.01 KB [=] 0s 0.00 b/s/ 

对所有图像文件重复此命令。

重要提示

确保输出中的TYPE参数显示为file而不是dir。Pachyderm 不区分目录和文件,您需要使用-f将文件放入目录或仓库根目录。如果您的任何文件列出为dir,则需要通过运行pachctl delete file photos@master:<path>删除它们并重新开始。如果您将文件放在目录中,管道将无法按预期工作。

现在我们已经创建了一个仓库,让我们创建我们的管道规范。

创建管道规范

创建仓库部分中,我们创建了一个名为photos的仓库并放入了一些测试文件。此示例的管道规范必须引用以下元素:

  • 一个包含待处理数据的输入仓库

  • 需要在您的数据上运行的计算机程序或脚本

  • 指定数据粒度的通配符模式

  • 包含您的代码的具有内建依赖项的 Docker 镜像

我们已经为您创建了一个管道规范,您可以用它来创建管道。以下是管道规范文件中的内容,格式为YAML Ain’t Markup LanguageYAML):

---
 pipeline:
   name: contour
 description: A pipeline that identifies contours on an image.
 transform:
   cmd:
   - python3
   - "/contour.py"
   image: svekars/contour-histogram:1.0
input:
   pfs:
     repo: photos
     glob: "/"

让我们更详细地查看管道规范。以下是管道中的参数:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/Table_01.jpg

图 6.5 – Contour 管道参数

此管道规范不包括任何优化或额外参数。它是一个最小管道,将执行我们示例所需的计算。

要创建管道,请执行以下步骤:

  1. 登录到您的终端。

  2. 通过运行以下命令创建contour管道:

    % pachctl create pipeline -f contour.yaml
    

不会返回任何输出。

  1. 验证管道是否已创建:

    % pachctl list pipeline
    

以下是系统输出:

NAME    VERSION INPUT    CREATED       STATE / LAST JOB   DESC
contour 1       photos:/* 5 seconds ago running / - A pipeline that identifies contours on an image.

一旦你创建管道,它将把状态设置为 running 并尝试处理输入仓库中的数据。你可能还会看到 LAST JOB 的状态为 starting 或 running。

重要提示

在前述输出中的另一个重要内容是管道版本。我们的管道版本是 1。如果你更改了管道 YAML 文件中的内容并进行了更新,版本号会更新为下一个数字。

  1. 查看已经为你的管道启动的作业:

    pachctl list job
    

以下是系统输出:

ID       SUBJOBS PROGRESS CREATED       MODIFIED
71169d1                      2 minutes ago 2 minutes ago

pachctl list job 命令的输出给出了以下信息:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/Table_02.jpg

图 6.6 – 管道输出解释

现在我们的管道已成功运行,让我们在输出仓库中查看结果。

查看管道结果

一旦你的管道运行完毕,你可以在输出仓库中查看结果。我们将同时查看命令行和 Pachyderm 仪表板中的输出结果,以便进行查看。

如果你使用的是本地的 Pachyderm 部署并且使用了 minikube,你需要启用端口转发才能访问 Pachyderm 用户界面。

要在终端中查看管道结果,请执行以下步骤:

  1. 登录到你的终端。

  2. 验证名为 contour 的输出仓库是否已创建:

    % pachctl list repo
    

以下是系统输出:

% pachctl list repo
NAME    CREATED            SIZE (MASTER) ACCESS LEVEL
contour About a minute ago ≤ 117.6KiB    [repoOwner]  Output repo for pipeline contour.
photos  5 minutes ago      ≤ 110.4KiB    [repoOwner] B

如你所见,contour 仓库已经创建,并且其中包含 117.6 KiB 的数据。如果你是在本地运行 Pachyderm,你还可以通过运行以下命令来预览这些文件的内容。

  1. 如果你使用的是 macOS,请运行以下命令列出输出仓库中的文件:

    % pachctl list file contour@master
    

以下是系统输出:

NAME             TYPE SIZE
/brown_vase.png file 23.78KiB
/hand.png       file 29.79KiB
/landscape.png  file 64.08Kib 
  1. 现在,将 open 命令与 pachctl get file 命令连接,打开 Mac 上默认的预览应用程序中显示的一张图片。例如,要预览 hand.png,请运行以下命令:

    % pachctl get file contour@master:hand.png | open -f -a Preview.app
    

你应该会看到以下输出:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_007.jpg

图 6.7 – 手动处理

现在,让我们在用户界面中查看处理后的结果。如果你是在云服务提供商上运行 Pachyderm,只需在浏览器中输入 Pachyderm 仪表板运行的 IP 地址。如果你是在 Pachyderm Hub 上运行 Pachyderm,请按照 Pachyderm Hub 中的指示访问控制台。如果你是在本地的 minikube 中运行 Pachyderm,请继续执行剩下的步骤以启用端口转发。

重要提示

除非你在 Pachyderm Hub 中运行实验,否则 Pachyderm 控制台仅在你已部署的情况下可用。你需要拥有试用版或企业版许可证,才能在本地或云中部署 Pachyderm 控制台。

  1. 打开一个独立的终端窗口。

  2. 通过运行以下命令为本地 Pachyderm 部署启用端口转发:

    % pachctl port-forward
    

你应该会看到以下输出:

Forwarding the pachd (Pachyderm daemon) port...
listening on port 30650
Forwarding the pachd (Pachyderm daemon) port...
listening on port 30650
Forwarding the OIDC callback port...
listening on port 30657
Forwarding the s3gateway port...
listening on port 30600
Forwarding the identity service port...
listening on port 30658
Forwarding the dash service port...
...

如果你使用的是默认设置,Pachyderm 仪表板应在 http://localhost:30080 加载。

  1. 将仪表板的 IP 地址粘贴到网页浏览器中。

  2. 如果系统提示您登录,请按照屏幕上的指示进行操作。登录后,您应该会看到以下界面:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_008.jpg

图 6.8 – Pachyderm 直接无环图(DAG)

这是一个为输入和输出仓库以及管道创建的直接无环图DAG)。

  1. 点击轮廓输出仓库(屏幕上的最后一个),然后点击查看文件

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_009.jpg

图 6.9 – 输出仓库信息

文件列表将会显示出来。

  1. 点击hand.png

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_010.jpg

图 6.10 – 输出文件

您可以通过 UI 预览所有结果文件。同样,这些文件可以由另一个管道消费,或者通过 S3 网关提供给 Pachyderm 之外的服务,或者输出仓库可以被挂载并在本地磁盘上访问。接下来,我们来看看其他图像应该是什么样子。

您应该看到景观图像已发生变化,如下所示:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_011.jpg

图 6.11 – 处理后的景观图像

brown_vase.png图像应该如下所示:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_012.jpg

图 6.12 – 处理后的花瓶图像

在本节中,我们学习了如何查看管道的结果。现在,让我们添加另一个管道步骤。

添加另一个管道步骤

Pachyderm 管道可以连接成多步骤工作流。对于每个步骤,您需要有单独的管道规范和一个 Docker 镜像(如果使用了的话)。在本节中,我们将为我们的图像处理工作流添加另一个步骤。我们将使用skimage.exposure.histogram模块为我们在contour输出仓库中的所有图像创建直方图。

示例概述

直方图是数据的可视化表示,提供了有关图像的信息,如像素的数量、强度以及其他信息。由于我们将图像表示为数值数据,因此可以为我们在工作流第一步——轮廓管道中处理的每个图像创建一个直方图。在工作流的这一步中,我们将为每个已存入contour输出仓库的图像创建直方图,并将它们以 PNG 格式保存到histogram输出仓库中。

这是为hand.png图像生成的直方图示例:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_013.jpg

图 6.13 – 灰度图像直方图

y 轴表示像素的数量,而x 轴表示像素的强度。

这是包含轮廓和直方图管道的新两步工作流图:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_014.jpg

图 6.14 – 轮廓和直方图工作流

histogram管道将从contour仓库中获取文件,为它们创建直方图,并将它们输出到histogram仓库。

直方图创建脚本概述

在此管道步骤中,我们将使用histogram.yaml,它将为我们创建一个管道。该管道将运行histogram.py脚本。

让我们回顾一下 histogram.py 脚本,它从 contour 仓库中的文件创建直方图:

from skimage import io
import matplotlib.pyplot as plt
import numpy as np
import os
def create_histogram(photo):
    image = io.imread(photo)
    t = os.path.split(photo)[1]
    plt.hist(image.ravel(), bins=np.arange(10, 70),  color='blue', alpha=0.5, rwidth=0.7)
    plt.yscale('log')
    plt.margins(x=0.03, y=-0.05)
    plt.xlabel('Intensity')
    plt.ylabel('Count')
    plt.savefig(os.path.join("/pfs/out", os.path.splitext(t)[0]+'.png'))
for dirpath, dirnames, filenames in os.walk("/pfs/contour"):
    for f in filenames:
        create_histogram(os.path.join(dirpath, f))

该脚本导入了以下库:

  • skimage.ioio 模块来自 scikit-image 库,它使我们能够在 Python 文件中进行读写操作。我们需要这个模块从 contour 仓库中读取文件。

  • matploit.pyplot:这个 Matplotlib 接口使我们能够绘制图像。我们使用它来创建直方图,为图表的 x 轴和 y 轴添加标签等等。

  • numpy:我们需要 NumPy 将图像表示为数组,并保持所需范围内的柱状图数量。

  • os:Python 标准库中的 os 模块使我们能够进行文件的读写操作。我们需要这个模块从 Pachyderm 的 contour 仓库中读取图像,并将图像保存到正确的输出仓库中。

让我们更仔细地看一下脚本的功能。create_histogram 函数从 contour 仓库中读取图像文件。然后,使用 matploit.pyplot.hist (plt.hist) 函数,脚本使用以下参数创建一个直方图:

  • numpy.ravel 函数将图像从二维数组转换为一维数组,这对于绘制直方图是必要的。

  • bins 参数定义了直方图中垂直条形的形状和分布。为了在图表中均匀分布它们,我们使用 np.arange 函数定义了一个范围。

  • color='blue' 参数定义了直方图柱状图的颜色。

  • alpha=0.5 参数定义了透明度的级别。

  • rwidth=0.7 参数定义了每个柱状图的宽度。

  • plt.yscale('log') 参数定义了 y 轴的对数尺度。我们需要这个参数来缩小 y 轴的尺度,以便更好地进行数据可视化。

  • plt.margins(x=0.03, y=-0.05) 参数定义了直方图与图表起始位置之间的空白区域。

  • plt.xlabel('Intensity')plt.ylabel('Count') 参数定义了 x 轴和 y 轴的标签。

  • plt.savefig 函数定义了直方图的保存位置。在我们的例子中,我们将把它保存在 pfs/out 目录下,Pachyderm 会自动在 pfs/out/histogram 路径下创建一个直方图仓库。

    重要说明

    在你的脚本中,你不需要添加仓库的路径,只需添加 pfs/out 目录的路径。

流水线规范概述。

histogram.yaml 流水线规范创建了直方图流水线。

下面是我们的流水线规范的样子:

---
 pipeline:
   name: histogram
 description: A pipeline that creates histograms for images stored in the contour repository.
 transform:
   cmd:
   - python3
   - "/histogram.py"
   image: svekars/contour-histogram:1.0
 input:
   pfs:
     repo: contour
     glob: "/"

这个流水线的功能如下:

  1. 将存储在 contour 仓库中的文件上传为一个单独的数据项。

  2. 从 Docker Hub 拉取存储的 Docker 镜像 svekars/histogram:1.0

  3. 对从 contour 仓库下载的所有文件运行 histogram.py 脚本。

  4. 将转换结果上传到 histogram 输出仓库。

现在我们已经审查了流水线的内容,让我们继续创建它。

创建流水线。

下一步是创建直方图流水线,该流水线将为photos仓库中的每个图像创建一个直方图。

让我们通过使用histogram.yaml文件创建工作流的第二个步骤:

  1. 登录到终端。

  2. 验证 Pachyderm 是否已启动并运行:

    % pachctl version
    

以下是系统输出:

COMPONENT           VERSION
pachctl             2.0.0
pachd               2.0.0

如果pachd没有响应,您可能需要在本地安装中运行minikube stopminikube start,以便能够继续使用它。如果您在云环境中,您需要检查您的连接。如果您在 Pachyderm Hub 中运行 Pachyderm,请检查您是否已经从控制台进行身份验证,并按照屏幕上的说明操作。

  1. 创建histogram流水线:

    % pachctl create pipeline -f histogram.yaml
    

不会返回系统输出。

  1. 验证流水线是否已创建:

    % pachctl list pipeline
    

以下是系统输出:

NAME      VERSION INPUT     CREATED        STATE / LAST JOB  DESCRIPTION
contour   1       photos:/* 12 minutes ago running / success A pipeline that identifies contours on an image.
histogram 1       contour:/ 12 seconds ago running / success A pipeline that creates histograms for images stored in the contour repository.

根据前面的输出,直方图流水线已创建,并且当前正在运行代码。

  1. 获取仓库列表:

    % pachctl list repo
    

以下是系统输出:

NAME      CREATED            SIZE (MASTER) DESCRIPTION
histogram 23 seconds ago ≤ 27.48KiB    [repoOwner]  Output repo for pipeline histogram.
contour   24 minutes ago ≤ 117.6KiB    [repoOwner]  Output repo for pipeline contour.
photos    29 minutes ago ≤ 110.4KiB    [repoOwner]   

histogram输出仓库已创建,并包含 27.48 KiB 的数据。这些是我们的直方图文件。

  1. 列出histogram仓库中的文件:

    % pachctl list file histogram@master
    

以下是系统输出:

NAME           TYPE     SIZE
/hand.png      file 9.361KiB
/landscape.png file 9.588KiB
/brown_vase.png  file 8.526KiB

到此,我们的直方图可视化已经被添加到仓库中。

  1. 查看直方图文件。例如,如果您在 Mac 上查看landscape.png直方图文件,请运行以下命令:

    pachctl get file histogram@master:landscape.png | open -f -a Preview.app
    

这是结果直方图:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_015.jpg

图 6.15 – 风景图像的直方图

您可以通过类似的方式或通过前面提到的 Pachyderm 控制面板预览其他文件。

  1. 进入控制台,查看新添加的流水线的 DAG:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_06_016.jpg

图 6.16 – 更新后的 DAG

如您所见,您现在有一个名为histogram的新流水线,并且在 DAG 中新增了一个同名的输出仓库。

现在我们已经创建了第一个流水线,让我们清理环境,以便有一个干净的集群来处理下章中的任务。

清理

一旦实验完成,您可能想清理集群,以便开始下一个实验时有一个全新的安装。要清理环境,请执行以下步骤:

  1. 删除所有流水线和仓库:

    pachctl delete pipeline –all && pachctl delete repo --all
    
  2. 验证集群中是否存在仓库和流水线:

    pachctl list repo && pachctl list pipeline
    

您应该看到以下输出:

NAME CREATED SIZE (MASTER) DESCRIPTION
NAME VERSION INPUT CREATED STATE / LAST JOB DESCRIPTION

至此,您已成功清理了集群。

总结

在本章中,您成功创建了第一个 Pachyderm 仓库、流水线,甚至通过添加另一个流水线步骤进行了扩展。我们使用了 scikit-image、Matplotlib 和 NumPy 来创建存储在 Pachyderm 仓库中的图像的轮廓,并为这些图像创建了直方图。这是理解 Pachyderm 如何工作的第一步。在 Pachyderm 中,您将经常使用流水线。正如您已经注意到的,您可以在流水线中放入任何代码。尽管本书中的大多数示例将使用 Python,您可以使用任何您选择的编程语言。

在下一章中,我们将深入学习 Pachyderm 的功能,如何将数据导入 Pachyderm 并将其导出到外部系统,如何修改管道代码,如何调整各种参数以及其他重要的 Pachyderm 操作。

进一步阅读

有关本章涵盖的主题的更多信息,请查看以下资源:

第七章:第七章:Pachyderm 操作

第六章创建第一个管道 中,我们创建了第一个管道,并学习了如何创建 Pachyderm 仓库、将数据放入仓库、创建并运行管道,以及查看管道的结果。我们现在知道如何创建标准的 Pachyderm 管道规范,并将脚本包含在其中,以便它们可以在输入仓库中的数据上运行。

在本章中,我们将回顾所有不同的将数据放入 Pachyderm 内部并导出到外部系统的方法。我们将学习如何更新在管道内部运行的代码,以及更新管道规范的过程。我们将学习如何构建一个 Docker 容器并在上传到注册表之前进行本地测试。

我们还将探讨一些最常见的故障排除步骤,这些步骤是在管道失败时应执行的。

本章将涵盖以下主题:

  • 回顾标准的 Pachyderm 工作流程

  • 执行数据操作

  • 执行管道操作

  • 执行维护操作

技术要求

您应该已经安装了以下组件。

对于本地 macOS 安装,您需要以下组件:

  • macOS Mojave、Catalina、Big Sur 或更高版本

  • Docker Desktop for Mac 10.14

  • minikube v1.9.0 或更高版本

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

对于本地 Windows 安装,您需要以下组件:

  • Windows Pro 64 位 v10 或更高版本

  • Windows Subsystem for Linux (WSL) 2 或更高版本

  • Microsoft PowerShell v6.2.1 或更高版本

  • Hyper-V

  • minikube v1.9.0 或更高版本

  • kubectl v1.18 或更高版本

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

对于 Amazon Elastic Kubernetes Service (Amazon EKS) 安装,您需要以下组件:

  • kubectl v.18 或更高版本

  • eksctl

  • aws-iam-authenticator

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

对于 Microsoft Azure Kubernetes Service (AKS) 云安装,您需要以下组件:

  • kubectl v.18 或更高版本

  • Azure CLI

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

  • jq 1.5 或更高版本

对于 Google Kubernetes Engine (GKE) 云安装,您需要以下组件:

  • Google Cloud SDK v124.0.0 或更高版本

  • kubectl v.18 或更高版本

  • pachctl 2.0.x 或更高版本

  • Pachyderm 2.0.x 或更高版本

除此之外,您还需要以下组件:

  • Docker Hub 账户,用于上传镜像

下载源文件

本章的所有源文件都位于此仓库:github.com/PacktPublishing/Reproducible-Data-Science-with-Pachyderm/tree/main/Chapter07-Pachyderm-Operations

回顾标准的 Pachyderm 工作流程

正如您在创建管道时可能已经注意到的那样,在使用 Pachyderm 时,您需要遵循特定的工作流。根据您的自动化工具、团队流程和所使用的软件,它可能会有所不同,但通常可以总结为以下常见步骤:

  1. 将您的数据添加到 Pachyderm。

  2. 创建管道或管道集。

  3. 添加更多数据。

  4. 修改参数。

  5. 修改您的管道或管道集。

  6. 将结果输出到输出仓库。

  7. 根据需要或持续地重复步骤 3-6

  8. 提供您的模型或打包您的库并使其可用。

以下图示演示了这一过程:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_07_001.jpg

图 7.1 – Pachyderm 工作流

根据您将代码存储在 Docker 镜像中、管道本身中,还是使用包含 Python 代码的构建管道,您每次更改代码时都需要重新构建 Docker 镜像。对于仅使用 Python 管道的轻量级工作流,它使用基础 Docker 镜像和一个特殊的构建管道。您可以在 Pachyderm 官方文档中阅读有关此方法的信息:docs.pachyderm.com。对于其他语言,您可能需要定期构建 Docker 镜像。

现在我们知道了典型的工作流,让我们深入了解数据操作,学习所有将数据上传到 Pachyderm 的方法。

执行数据操作。

正如您可能已经注意到的,要开始使用 Pachyderm,您需要将数据放入其中。然后,数据会通过多个转换步骤进行处理。之后,您可以将数据和模型导出到外部源,以库、二进制文件、包、表格、仪表盘或任何其他格式进行进一步使用。在本节中,我们将回顾将数据上传和下载到 Pachyderm 以及从 Pachyderm 下载数据的方式,并介绍在此过程中可以应用的所有原生 Pachyderm 修改。

让我们从将数据上传到 Pachyderm 开始。

将数据上传到 Pachyderm。

您可以将将数据导入到 Pachyderm 的数据源分为以下几类:

  • 从本地文件系统上传

  • 从 URL 上传。

  • 远程对象或块存储

  • 一个流媒体或消息平台。

在本节中,您很可能主要使用本地文件系统将数据上传到 Pachyderm 仓库。这可以通过一个简单的 Pachyderm 命令完成:

  1. 要从本地文件系统上传数据,您可以使用以下命令:

    pachctl put file -f <filename> repo@branch
    

仓库必须存在。

  1. 同样,要上传存储在远程位置的数据,您可以使用相同的命令,并指定正确的 URL:

    pachctl put file -f https://mylink repo@branch
    
  2. 对存储在对象存储中的文件同样适用。例如,如果您使用 Google Cloud Platform 上的对象存储,您可以使用以下命令:

    pachctl put file -f gs://my-bucket repo@branch
    

之前的命令将文件放置在仓库的根目录中,但您也可以通过指定路径,将它们放入任何子目录中,如下所示:

pachctl put file -f gs://my-bucket repo@branch:/path
  1. 要上传整个目录,请使用 -r 标志:

    pachctl put file -f directory -r repo@branch:/
    

运行pachctl put file --help查看更多示例。

  1. 如果您希望从消息队列自动上传数据到 Pachyderm,您需要创建一种特殊类型的管道,称为吐水口(spout)。吐水口的主要功能是将来自消息平台的数据流连接到 Pachyderm,并将其放入指定的 Pachyderm 仓库。您还可以指定一些代码,根据首选模式将数据分类到不同的文件夹中。以下是一个吐水口管道的示例:

    ---
    pipeline:
      name: my-spout
    spout: {}
    transform:
      cmd:
      - python
      - myspout.py
      image: registry/image:1.0
      env:
        HOST: my-messaging-queue
        TOPIC: mytopic
        PORT: '5672'
    

现在我们知道如何将数据放入 Pachyderm,让我们来看看 Pachyderm 中的数据来源和数据血统。

关于数据血统

如果您的系统依赖于数据,您需要确保用于决策过程的数据是准确且可信的。未能提供可追溯的数据足迹,可能会导致对组织的不利后果。随着越来越多基于数据的系统应用于我们生活的各个方面,基于错误数据做出的错误决策可能会对人们的生活造成毁灭性影响。

这就是为什么能够回溯到数据的源头并追踪数据的来源,是任何数据管理系统中的一个关键部分。能够追踪数据在多个转化步骤中发生的变化,直到其源头,这就是数据血统或数据来源。

通常,数据血统以有向无环图DAG)的形式进行可视化。以下是 Pachyderm UI 中 DAG 表示的示例:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_07_002.jpg

图 7.2 – Pachyderm DAG

每个容器代表一个输入或输出的仓库,或者一个管道。前面的示例非常简单。在有更多步骤的工作流中,DAG 可能看起来更为复杂。

为什么数据血统如此重要?以下是几个需要考虑的重要点:

  • 随着隐私和公平等话题在各个层面被广泛讨论,为治理提供审计追踪正变得越来越必要。

  • 随着数据科学的广泛产品化,实现一个能够回滚并修正数据和算法错误的系统变得至关重要。

  • 数据的可信度是可以通过数据血统验证的另一个方面。

第一章《可重复性问题》中,我们讨论了许多缺乏合适数据管理系统可能对人们生活产生毁灭性影响的例子,并且对企业造成损害。

现在我们已经讨论了数据血统的重要性,让我们来看一下如何在 Pachyderm 中探索数据血统。

探索数据血统

数据来源数据血统是 Pachyderm 最重要的特性之一,它确保您的更改被保存并且可以追溯到管道的起点。

为了演示这个功能,我们将使用在第六章中使用的相同管道,创建你的第一个管道。如果你还没有下载这些文件,可以访问github.com/PacktPublishing/Reproducible-Data-Science-with-Pachyderm/tree/main/Chapter06-Creating-Your-First-Pipeline并从那里下载:

  1. 创建 Pachyderm 的photos仓库,将brown_vase.png文件放入其中,并通过运行以下命令创建轮廓和直方图管道:

    pachctl create repo photos
    pachctl put file -f brown_vase.png photos@master
    pachctl create pipeline -f contour.yaml
    pachctl create pipeline -f histogram.yaml
    

你应该看到以下输出:

brown_vase.png 25.82KB / 25.82 KB [================] 0s 0.00 b/s
  1. 以下命令展示了如何查看你的数据和管道的谱系。首先,我们需要获取一个提交号,以便查看所需的数据变化:

    pachctl list commit contour@master
    

输出应该类似于以下内容:

REPO  BRANCH COMMIT  FINISHED SIZE ORIGIN DESCRIPTION
contour master 3d42... 22 seconds ago 23.78KiB AUTO

在这个示例中,我们只有一个输出提交,哈希值为3d42e6385854478fbd2c9212c3afdab2

  1. 然后,我们可以运行inspect commit命令来获取溯源信息:

    pachctl inspect commit contour@3d42e6385854478fbd2c9212c3afdab2
    

前面的命令返回以下输出:

{
  "commit": {
    "branch": {
      "repo": {
        "name": "contour",
        "type": "user"
      },
      "name": "master"
    },
    "id": "3d42e6385854478fbd2c9212c3afdab2"
  },
  "origin": {
    "kind": "AUTO"
  },
  "child_commits": [
    {
      "branch": {
        "repo": {
          "name": "contour",
          "type": "user"
        },
        "name": "master"
      },
      "id": "dfff764bd1dd41b9bf3613af86d6e45c"
    }
  ],
  "started": "2021-08-18T17:03:32.180913500Z",
  "finishing": "2021-08-18T17:03:39.172264700Z",
  "finished": "2021-08-18T17:03:39.225964100Z",
  "direct_provenance": [
    {
      "repo": {
        "name": "contour",
        "type": "spec"
      },
      "name": "master"
    },
    {
      "repo": {
        "name": "photos",
        "type": "user"
      },
      "name": "master"
    }
  ],
  "size_bytes_upper_bound": "24353",
  "details": {
    "size_bytes": "24353"
  }
}

该输出显示了提交是在photos仓库中创建的。它的类型为AUTO,因为它是在数据上传到photos仓库时自动生成的。你还可以看到它创建了一个子提交,哈希值为dfff764bd1dd41b9bf3613af86d6e45c,你可以对其运行相同的命令。该子提交将具有ALIAS类型,因为它与photos仓库中的原始提交相关联。随着新数据的到来,这个列表会逐渐增加。

  1. 前面的命令告诉我们contour仓库中提交的前驱是什么。我们还可以使用wait commit命令结合提交 ID 来跟踪提交何时进入输出仓库。例如,如果我们想查看3e16201310374944b48ed73f83be2be7提交在下游管道中带来的变化,可以运行以下命令:

    pachctl wait commitset photos@438428d0c3a145aa905c86c9fb1789ea
    

溯源是 Pachyderm 的一个强大功能。当你需要寻找审计轨迹以查明是什么导致管道产生偏差时,它特别有用。

现在我们已经学习了如何在 Pachyderm 中探索数据溯源,接下来我们来看看如何将 Pachyderm 仓库挂载到本地文件系统。

将 Pachyderm 仓库挂载到本地文件系统

你可以通过使用用户空间文件系统FUSE)接口将 Pachyderm 系统挂载到本地计算机,从而像访问本地文件一样访问你的 Pachyderm 仓库。FUSE 支持所有主流平台,如 Microsoft Windows、Linux 和 macOS。默认情况下,你可以以只读方式挂载 Pachyderm 仓库,但也可以启用写入权限。你需要明白,修改这些挂载中的文件会导致溯源信息破坏,因此通常不应使用这种方式。可以使用这个功能来执行以下操作:

  • 查看管道运行的结果。

  • 允许第三方应用程序访问 Pachyderm 输出仓库,以便进行进一步处理。

要将 Pachyderm 仓库挂载到本地计算机文件系统,请完成以下步骤:

  1. 在你的机器上安装 FUSE。如果你使用的是 macOS,请运行以下命令:

    brew install osxfuse
    

如果你使用的是 Linux,请运行以下命令:

sudo apt-get install -y fuse

在 Windows 上,运行以下命令:

choco install winfsp
  1. 使用pachctl mount命令挂载 Pachyderm 仓库。例如,要挂载contour仓库,请运行以下命令:

    pachctl mount ~/Documents/contour --repos contour@master 
    

此命令将在你的终端中持续运行,直到你用Ctrl + C中断它。

  1. 要访问你的文件,打开文件浏览器。例如,如果你使用的是 macOS,请使用 Finder。你应该能看到像下面这样的~/Documents/contour文件夹已挂载:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_07_003.jpg

图 7.3 – 挂载的 Pachyderm 仓库

在这里,你可以根据需要查看文件。

  1. 要挂载具有写权限的仓库,请使用相同的命令并加上--write标志:

    pachctl mount ~/Documents/contour --repos contour@master --write
    

请谨慎使用此功能,因为修改输出仓库中的文件会破坏来源信息。

  1. 要挂载多个仓库,请使用--repos标志指定每个仓库的列表:

    pachctl mount ~/Documents/pachyderm-repos --repos contour@master --repos data@master --repos histogram@master --repos photos@master
    

以下截图显示了datacontourhistogramphotos仓库在你的机器上是如何挂载的:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_07_004.jpg

图 7.4 – 挂载的 Pachyderm 仓库

在本节中,我们学习了如何执行最常见的 Pachyderm 数据操作,包括将数据上传到 Pachyderm、探索来源信息、将 Pachyderm 仓库挂载到本地计算机,以及在将数据上传到 Pachyderm 时进行数据拆分。接下来,我们将探讨在使用 Pachyderm 时需要执行的最常见管道操作。

执行管道操作

除了创建和删除管道外,你还可能需要使用新的代码更改更新管道。如果对管道规范本身进行了更改,例如增加 Pachyderm 工作节点的数量、输入仓库、通配符模式或类似的更改,你只需要在 YAML 或 JSON 文件中进行更改,并更新管道规范的版本。但是,如果更改发生在你的代码中,并且代码在 Docker 镜像中,你需要重建 Docker 镜像。让我们逐一讨论这些使用场景。

更新你的管道规范

管道规范使你能够控制各种 Pachyderm 参数,例如控制管道从哪个仓库获取数据、启动多少个工作节点以及为管道分配多少资源。你还可以通过stdin字段在管道中指定你的代码。这样的管道可以使用一个基本的 Docker 镜像,你不需要更新它。如果是这种情况,并且你需要在管道规范或stdin字段中的代码中进行更改,以下是你需要做的步骤:

  1. 在包含管道规范的 YAML 或 JSON 文件中进行必要的更改。例如,如果你想将contour.yaml管道中的 glob 模式从glob: "/"更改为glob: "/*",只需直接在 YAML 文件中进行这些更改并保存。

  2. 然后,你需要通过指定这个 YAML 文件来更新已运行管道的版本:

    pachctl update pipeline -f contour.yaml
    
  3. 验证管道版本是否已更新:

    pachctl list pipeline
    

如果之前的管道版本是1,它应该变成2

  NAME      VERSION INPUT     CREATED       STATE / LAST JOB  DESCRIPTION
contour   2       photos:/* 6 seconds ago running / success A pipeline that identifies contours on an image.

新的管道不会处理已经处理过的数据,除非你通过使用--reprocess标志明确指定。

  1. 要在已处理的数据上运行更新后的管道,请使用以下命令:

    pachctl update pipeline -f contour.yaml --reprocess 
    
  2. 在输出中,你应该看到版本已再次更新:

    NAME      VERSION INPUT     CREATED        STATE / LAST JOB  DESCRIPTION
    contour   3       photos:/* 15 seconds ago running / success A pipeline that identifies contours on an image.
    
  3. 默认情况下,如果你运行pachctl list pipeline,Pachyderm 只会显示最新管道的信息。如果你使用--history标志运行此命令,你可以看到所有的历史版本:

    pachctl list pipeline contour --history 3
    

输出应该如下所示:

NAME    VERSION INPUT    CREATED        STATE / LAST JOB  DESCRIPTION
contour 3       photos:/ 25 seconds ago running / success A pipeline that identifies contours on an image.
contour 3       photos:/ 25 seconds ago running / success A pipeline that identifies contours on an image.
contour 3       photos:/ 25 seconds ago running / success A pipeline that identifies contours on an image.

你可以看到,版本 3 的管道已经运行了三次。

  1. 现在,让我们检查第三个版本的管道是否在contour仓库中输出了提交:

    pachctl list commit contour@master
    

这个命令应该返回类似的输出:

REPO    BRANCH COMMIT  FINISHED  SIZE  ORIGIN   PROGRESS DESCRIPTION
contour master 38eb403e62844f45939c6307bb0177c7 46 seconds ago 23.78KiB AUTO

现在我们知道了如何在没有代码更改的情况下更新管道,让我们看看当你的代码在 Docker 镜像中时,需要更新代码的工作流。

更新你的代码

如果你的代码被指定在一个嵌入到 Docker 镜像中的文件中,每次修改代码时,你需要重新构建这个 Docker 镜像,上传到 Docker 注册表,并给镜像指定一个新的版本,然后在你的管道规范中更新镜像版本,最后运行pachctl update pipeline命令。

让我们修改在第六章中创建的轮廓管道中的contour.py文件,创建你的第一个管道。你需要在 Docker 注册表中有一个账户来完成此部分。如果你没有账户,可以在 Docker Hub 上创建一个免费账户。本书中提到的所有镜像都存储在 Docker Hub 中,我们将以 Docker Hub 为例。如果你使用其他 Docker 镜像注册表,请按照该注册表的文档进行登录并上传镜像。

我们还需要这个管道的 Dockerfile 来构建新的镜像:

  1. 如果你还没有这样做,请从github.com/PacktPublishing/Reproducible-Data-Science-with-Pachyderm/tree/main/Chapter06-Creating-Your-First-Pipeline下载 Dockerfile。

  2. 通过在hub.docker.com/注册来配置你的 Docker Hub 账户。

  3. 登录到 Docker Hub 后,点击创建仓库

  4. 为你的仓库命名并写一个简短的描述。在本示例中,我们将使用公共注册表,但 Pachyderm 也支持私有注册表:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_07_005.jpg

图 7.5 – 创建 Docker Hub 注册表

  1. 点击创建

  2. 打开您机器上的终端并运行以下命令:

    docker login
    
  3. 提供您的 Docker Hub 凭据以登录到 Docker Hub。您应该会看到如下输出:

    Login Succeeded
    
  4. 打开contour.py文件进行编辑。

  5. 让我们在代码中做一个非常小的改动——在第 18 行,将linewidth改为1。修改后应该是这样:

    ax.plot(contour[:, 1], contour[:, 0], linewidth=1)
    
  6. 保存您的更改并退出。

  7. 为了使这些更改在我们的 Pachyderm 管道中生效,我们需要构建一个新的 Docker 镜像。为了使下一个命令生效,您需要确保当前目录中有 Dockerfile。运行以下命令:

    docker build . -t <your-registry>/contour-histogram:1.1
    

<your-registry>替换为您通过前面的步骤创建的 Docker Hub 仓库名称。您应该会看到类似以下的输出:

Sending build context to Docker daemon 2.325GB
Step 1/10 : FROM ubuntu:18.04
 ---> 3339fde08fc3
…
Step 9/10 : ADD contour.py /contour.py
 ---> 4fb17a5f1f0b
Step 10/10 : ADD histogram.py /histogram.py
 ---> e64f4cb9ecb1
Successfully built e64f4cb9ecb1

第一次构建 Docker 镜像时可能会需要一些时间。请注意,在前面输出的第 9 步中,Docker 会添加您更新后的contour.py脚本。

  1. 下一步是将您的镜像上传到 Docker 注册表。您也可以先将 Docker 镜像本地挂载并测试,然后再上传。要将 Docker 镜像本地挂载,运行以下命令:

    docker save <your-registry>/contour-history:1.1 | (\
      eval $(minikube docker-env)
      docker load
    )
    

这个命令需要一些时间才能运行,但当您需要测试某些内容而不需要不断将新镜像推送到 Docker Hub 时,它非常方便。我们建议您将镜像本地挂载,运行管道,准备好后再上传到 Docker Hub。

或者,如果是直接上传到 Docker Hub,请运行以下命令:

docker push <your-registry>/contour-history:1.1
  1. 在加载完您的镜像后,您需要使用管道的新版本更新管道规范。每次构建新镜像时,给镜像分配一个新版本号,以便跟踪您的更改。要更新管道规范中的镜像版本,打开contour.yaml文件,并更改以下第9行:

    9  image: <your-registry>/contour-histogram:1.1
    
  2. 现在,您可以使用新的代码运行更新后的管道。让我们运行update命令并带上--reprocess标志,以查看我们的更改如何影响结果:

    pachctl update pipeline -f contour.yaml --reprocess
    

在下图中,您可以看到两个版本之间的比较。左边是第一版,轮廓明显比右边的新版本要粗:

https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/reprod-ds-pachyderu/img/B17085_07_006.jpg

图 7.6 – 比较管道版本的结果

我们已经学习了如何更新 Pachyderm 管道。这种方法适用于任何语言或框架。Pachyderm 也提供了内建的Docker buildDocker push命令可以使用。不过,我们建议您遵循前面描述的过程,因为它似乎更为大多数工程师熟悉,也更为透明。

运行维护操作

像所有系统或工具一样,Pachyderm 可能需要定期维护、升级和故障排除。在接下来的部分中,我们将讨论管道维护的最重要方面。

故障排除您的管道

在本节中,您将学习如何排查管道错误。

您的管道可能因以下原因失败:

  • 代码错误:这种类型的错误发生在代码中出现问题时,比如某个资源不可用或指定了错误的值。修复这种错误涉及到排查代码。您可以尝试在本地修复后再在 Pachyderm 中进行测试。

  • 管道规范错误:这种类型的错误发生在管道规范中出现问题时;例如,管道无法拉取 Docker 镜像。这通常发生在指定了错误的镜像版本或存在网络问题时。

  • 资源相关错误:这种类型的错误发生在您的集群内存耗尽或存在类似资源限制的问题时。

Pachyderm 提供了通过 pachctl logs 命令进行管道故障排查的内置功能,您也可以使用 Kubernetes 原生工具来排查管道问题。由于每个 Pachyderm 管道都是一个 Kubernetes Pod,您可以使用 Kubernetes 的日志记录和调试工具来进行故障排查。

若要检测和排查 Pachyderm 管道错误,请完成以下步骤:

  1. 当管道失败时,您应该在管道状态中看到它:

    pachctl list pipeline
    

这是一个失败管道的示例输出:

NAME    VERSION INPUT    CREATED        STATE / LAST JOB    DESCRIPTION
contour 1       photos:/ 28 seconds ago crashing / starting A pipeline that identifies contours on an image.
  1. 要排查此管道问题,我们需要查看管道或作业的日志。要查看管道的日志,请运行以下命令:

    pachctl logs --pipeline=contour
    

以下是一个示例响应:

container "user" in pod "pipeline-contour-v1-fmkxj" is waiting to start: image can't be pulled

在前面的示例中,失败的原因很明显——管道未能拉取 Docker 镜像。这可能是由于管道规范中指定的镜像版本错误或网络问题导致的。验证管道规范是否正确通常能够解决问题。

  1. 以下文本是管道中另一个常见代码错误的示例:

    Traceback (most recent call last):
      File "/pos-tag.py", line 13, in <module>
        with open('/pfs/out/pos-tag/pos-table.txt', 'w') as f:
    FileNotFoundError: [Errno 2] No such file or directory: '/pfs/out/contour/pos-table.txt'
    

在前面的示例中,管道未能找到指定的文件。这很可能是因为在 pos-tag.py 文件中指定的文件路径不正确。

  1. 在某些情况下,由于管道在启动作业之前崩溃,您可能无法查看作业日志。然而,在大多数情况下,您应该能够查看作业的日志。要查看作业日志,首先获取作业的哈希值:

    pachctl list job
    

这是一个示例输出:

ID                               SUBJOBS PROGRESS CREATED       MODIFIED
5865a26e1795481d96ecf867075c4f35 1       2 minutes ago 2 minutes ago

当您遇到管道错误时,如前述输出所示,进度条为黄色而不是绿色。这个指示符告诉您代码中可能存在问题。

  1. 使用作业哈希值查看作业日志中关于失败的更多信息:

    pachctl logs --job=contour@5865a26e1795481d96ecf867075c4f35
    

输出应提供更多关于失败的信息。

  1. 最后,您可以使用 kubectl 分析管道中的可能错误。通过运行以下命令获取您的管道 Pod 名称:

    kubectl get pod
    

您应该看到类似于以下的响应:

NAME          READY   STATUS        RESTARTS   AGE
etcd-0         1/1     Running      0           6h10m
pachd-85d69d846-drgrk    1/1  Running 0         6h10m
pg-bouncer-84df8bdc58-7kzzg 1/1 Running 0       6h10m
pipeline-contour-v1-7dgwl 1/2  ImagePullBackOff 0    6m54s
postgres-0     1/1     Running      0           6h10m

您需要获取管道 Pod 的日志。

  1. 通过运行以下命令获取 Pod 日志:

    kubectl describe pod pipeline-contour-v1-7dgw
    

    重要说明

    Pod 日志中的事件部分通常会提供关于任何问题的信息。有关 Kubernetes 调试和故障排除的更多信息,请参见 Kubernetes 文档:kubernetes.io/docs/tasks/debug-application-cluster/

这是你将看到的示例输出:

...
Events:
...
Normal BackOff 3m7s (x20 over 8m6s)  kubelet, minikube Back-off pulling image "svekars/contour-histogram:1.2"

在这一部分,我们讨论了基本的故障排除操作。最佳策略是尽可能收集更多日志,分类问题,然后有针对性地进行排查。如果问题出在用户代码中,你可能想先在本地测试代码,再在 Pachyderm 中运行。最近 Pachyderm 引入的一个限制是免费套餐下,你能运行的管道数量有限。除非升级到付费版本,否则你将无法运行超过 16 个管道和 8 个工作者。

接下来,我们将讨论如何将集群从一个版本升级到另一个版本。

升级你的 Pachyderm 集群

Pachyderm 定期发布次要版本升级。升级不同次要版本和补丁版本(例如从 1.13.0 到 1.13.1,或从 1.12.4 到 1.13.0)相对直接,但在主要版本之间升级(例如从 1.13.0 到 2.0)可能会更具破坏性。让我们来回顾一下每种使用场景的过程。主要版本的升级不常发生。通常,Pachyderm 每隔几年发布一次主要版本。这类升级通常涉及破坏性更改,可能会有特定的说明。请参考 Pachyderm 文档,了解执行主要版本升级的步骤。

升级补丁和次要版本

在升级 Pachyderm 集群时,你需要确保备份你的数据和管道,升级pachctl的版本,然后重新部署你的集群。如果你在minikube环境中进行本地升级,可能不需要使用备份,但为了安全起见,还是建议创建一个备份。如果你在同一个命名空间中重新部署,所有数据应该仍然可用。如果你使用的是云环境,那么你需要在一个新的命名空间中重新部署。

要从一个补丁版本或次要版本升级到另一个版本,请完成以下步骤:

  1. 停止集群中当前正在运行的所有管道:

    pachctl stop pipeline <pipeline>
    
  2. 停止contour管道:

    pachctl stop pipeline contour
    
  3. 验证管道是否已挂起:

    pachctl list pipeline
    

你应该看到以下输出:

NAME      VERSION INPUT     CREATED      STATE / LAST JOB  DESCRIPTION
contour   1       photos:/* 3 hours ago paused / success  A pipeline that identifies contours on an image.

如果你有其他管道在运行,也请将它们停止。

  1. 如果你有任何自动化服务将数据上传到 Pachyderm,也需要确保所有外部数据加载操作已暂停。

  2. 为以防万一,将你的pachdetcdconsole服务清单保存到单独的 YAML 文件中:

    kubectl get svc/pachd -o yaml > pachd_backup.yaml
    kubectl get svc/etcd -o yaml > etcd_backup.yaml
    kubectl get svc/dash -o yaml > dash_backup.yaml
    

如果你的升级失败,你应该能够通过这些清单手动恢复。

  1. 备份你的集群:

    pachctl extract --no-auth --no-enterprise > my-pachyderm-backup
    

在上述示例中,我们指定了 --no-auth--no-enterprise 标志。如果你使用的是 Pachyderm 企业版或已启用身份验证,请不要使用这些标志运行此命令。

  1. 验证 values.yaml 文件是否已更新值。特别是,验证以下自动生成的值是否正确:

    global:
          postgresql.postgresqlPassword
    pachd:
          clusterDeploymentID
          rootToken
          enterpriseSecret
          oauthClientSecret
    
  2. 升级你的 pachctl 版本,如以下示例所示:

    brew upgrade pachyderm/tap/pachctl@2.0
    

使用系统中的包管理器进行升级。

  1. 验证 Pachyderm 版本是否已升级:

    pachctl version --client-only
    

你应该在输出中看到升级后的版本。在这种情况下,版本为 2.0.0

pachctl             2.0.0
  1. 使用 helm upgrade 命令重新部署你的集群:

    helm upgrade pachd -f <pachyderm_deployment>_my_values.yaml pachyderm/pachyderm
    
  2. 运行kubectl get pod,直到你看到类似下面的 Pachyderm Pod 正在运行:

    NAME                      READY   STATUS  RESTARTS AGE
    console-5db94c4565-pzjft     1/1    Running   0     1m
    etcd-0                       1/1    Running   0     1m
    pachd-84984bf656-g4w8s       1/1    Running   0     1m
    pg-bouncer-7f47f5c567-zwg8d  1/1    Running   0     1m
    postgres-0                   1/1    Running   0     1m 
    
  3. 检查 pachd 是否在运行:

    pachctl version
    

此命令应该返回类似如下的输出:

COMPONENT           VERSION
pachctl             2.0.0
pachd               2.0.0
  1. 如果你在云环境中,使用以下命令从你创建的备份中恢复配置:

    pachctl restore < my-pachyderm-backup
    
  2. 检查你的管道和仓库是否已就绪:

    pachctl list pipeline && pachctl list repo
    

系统响应应该类似于此:

NAME    CREATED        SIZE (MASTER) DESCRIPTION
contour 49 seconds ago 23.78KiB      Output repo for ...
photos  49 seconds ago 25.21KiB
NAME    VERSION INPUT CREATED  STATE / LAST JOB DESCRIPTION
contour 1       photos:/* 6 minutes ago paused / success A pipeline that identifies contours on an image.

我们已经成功恢复了我们在新部署的集群中的仓库和管道。

清理

在你完成实验后,你可能想要清理你的集群,以便在下一个实验中重新开始。要清理环境,请运行以下命令:

  1. 删除所有管道和仓库:

    pachctl delete pipeline –all && pachctl delete repo --all
    
  2. 验证集群中是否没有仓库和管道:

    pachctl list repo && pachctl list pipeline
    

你应该看到以下输出:

NAME CREATED SIZE (MASTER) DESCRIPTION
NAME VERSION INPUT CREATED STATE / LAST JOB DESCRIPTION

你已经成功清理了你的集群。

总结

在这一章中,我们学习了一些在 Pachyderm 集群生命周期中需要执行的最重要的操作。我们学习了多种将数据加载到 Pachyderm 的方式,包括如何使用消息系统进行数据加载。我们还学习了如何更新管道、构建 Docker 镜像,并将它们本地挂载或上传到 Docker 镜像仓库。最后,我们了解了一些基本的故障排除技巧以及如何在补丁和小版本之间进行升级。

在下一章中,我们将实现一个端到端的机器学习工作流,并深入了解如何部署更复杂的多步骤 Pachyderm 管道。

进一步阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值