Shell Scripts
本页面介绍如何使用 DockerHub 上提供的预构建 Docker 镜像在多节点 Kubernetes 上操作 Hive on MR3。按照以下说明,用户将学习:
- 如何启动 Metastore
- 如何运行 Hive on MR3
安装 Hive on MR3 后,进入 kubernetes 目录。
cd kubernetes/
概述
Hive on MR3 由四个组件构成:Metastore、HiveServer2、MR3 DAGAppMaster 和 MR3 ContainerWorkers。MR3 release 可以创建附加组件。
- 用户可以连接 HiveServer2(通过 JDBC/ODBC),它暴露在 Kubernetes 集群外部。
- 用户可以直接连接 MR3-UI、Grafana 和 Ranger。
- 内部我们运行一个 Prometheus 服务器来收集 DAGAppMaster 的指标。
- DAGAppMaster 中嵌入了 Timeline Server 来收集历史日志。
Hive on MR3 需要三种类型的存储:
- 数据源,如 HDFS 或 S3
- 用于存储临时数据的 PersistentVolume 或 HDFS/S3
- 用于在 ContainerWorker Pod 中存储中间数据的 hostPath 卷
hostPath 卷在每个 ContainerWorker Pod 中运行时挂载。这些 hostPath 卷保存要在 ContainerWorker Pod 之间进行 shuffle 的中间数据。为了能够在每个 ContainerWorker Pod 中挂载相同的 hostPath 卷集,所有工作节点(创建 ContainerWorker Pod 的地方)上应该准备好相同的本地目录集。为了提高性能,所有本地目录应位于不同的本地磁盘上。
运行 Hive on MR3 涉及以下步骤:
- 用户更新
env.sh以设置其他环境变量。 - 用户更新目录
yaml中的yaml文件。 - 用户在配置目录
conf中更新hive-site.xml、mr3-site.xml和tez-site.xml。 - 用户执行
run-metastore.sh和run-hive.sh来启动 Metastore 和 HiveServer2。HiveServer2 创建一个 DAGAppMaster Pod,DAGAppMaster 创建 ContainerWorker Pod。
在第三步中,更新 hive-site.xml 和 mr3-site.xml 通常足以开始使用,因为 tez-site.xml 中的默认值在常见设置中效果良好。
为 Metastore 配置 env.sh
env.sh 是一个自我描述的脚本,包含在每个环境中应该设置的主要环境变量。
打开 env.sh 并设置以下环境变量。
vi env.sh
HIVE_DATABASE_HOST=192.168.10.1
HIVE_DATABASE_NAME=hivemr3
HIVE_WAREHOUSE_DIR=s3a://hivemr3/warehouse
HIVE_METASTORE_DB_TYPE=mysql
- 将
HIVE_DATABASE_HOST设置为 Metastore 的 MySQL 服务器的 IP 地址。在我们的示例中,MySQL 服务器运行在 IP 地址192.168.10.1。 - 将
HIVE_DATABASE_NAME设置为 MySQL 服务器中 Metastore 的数据库名称。 - 将
HIVE_WAREHOUSE_DIR设置为存储仓库的 HDFS 目录或 S3 桶(例如hdfs://hdfs.server:8020/hive/warehouse或s3a://hivemr3/hive/warehouse)。请注意,要使用 S3,我们应使用前缀s3a,而不是s3。 - 将
HIVE_METASTORE_DB_TYPE设置为 Metastore 的数据库类型,用作schematool的参数(mysql表示 MYSQL,postgres表示 PostgreSQL,mssql表示 MS SQL)。
Docker 镜像
我们使用 DockerHub 上提供的预构建 Docker 镜像。打开 env.sh 并设置以下环境变量。
DOCKER_HIVE_IMG指定 MR3 DAGAppMaster Pod 的 Docker 镜像。DOCKER_HIVE_WORKER_IMG指定 MR3 ContainerWorker Pod 的 Docker 镜像。
vi env.sh
DOCKER_HIVE_IMG=mr3project/hive:4.0.0.mr3.2.4
DOCKER_HIVE_WORKER_IMG=$DOCKER_HIVE_IMG
在 yaml/metastore.yaml 和 yaml/hive.yaml 中,将 image 字段设置为 Metastore 和 HiveServer2 Pod 的 Docker 镜像。
vi yaml/metastore.yaml
spec:
template:
spec:
containers:
- image: mr3project/hive:4.0.0.mr3.2.4
vi yaml/hive.yaml
spec:
template:
spec:
containers:
- image: mr3project/hive:4.0.0.mr3.2.4
Metastore 和 HiveServer2 Pod 的资源
打开 env.sh 并设置以下环境变量,以调整分配给 HiveServer2 和 Metastore Pod 的内存大小(以 MB 为单位)。
HIVE_SERVER2_HEAPSIZE应与 HiveServer2 Pod 的内存大小匹配。HIVE_METASTORE_HEAPSIZE应与 Metastore Pod 的内存大小匹配。
在我们的示例中,我们使用以下值。
vi env.sh
HIVE_SERVER2_HEAPSIZE=16384 # HiveServer2 Pod 内存(MB)
HIVE_METASTORE_HEAPSIZE=16384 # Metastore Pod 内存(MB)
打开 yaml/metastore.yaml 并设置资源以匹配 env.sh 中的 HIVE_METASTORE_HEAPSIZE。
vi yaml/metastore.yaml
containers:
resources:
requests:
cpu: 4
memory: 16Gi
limits:
cpu: 4
memory: 16Gi
打开 yaml/hive.yaml 并设置资源以匹配 HIVE_SERVER2_HEAPSIZE。
vi yaml/hive.yaml
containers:
resources:
requests:
cpu: 4
memory: 16Gi
limits:
cpu: 4
memory: 16Gi
DAGAppMaster Pod 的资源
默认情况下,我们为 DAGAppMaster Pod 分配 16GB 内存和 4 个 CPU。要调整资源,请更新 conf/mr3-site.xml。
vi conf/mr3-site.xml
<property>
<name>mr3.am.resource.memory.mb</name>
<value>16384</value>
</property>
<property>
<name>mr3.am.resource.cpu.cores</name>
<value>4</value>
</property>
设置主机别名(可选)
要在配置 Hive on MR3 时使用主机名(而不是 IP 地址),用户应更新:
yaml/metastore.yaml和yaml/hive.yaml中的spec.template.spec.hostAliases字段conf/mr3-site.xml中的配置键mr3.k8s.host.aliases
例如,如果 env.sh 中的环境变量 HIVE_DATABASE_HOST 或 HIVE_WAREHOUSE_DIR 使用名为 orange0/orange1 的主机名,IP 地址为 192.168.10.100/192.168.10.1,请按如下方式更新。
vi yaml/metastore.yaml
spec:
template:
spec:
hostAliases:
- ip: "192.168.10.100"
hostnames:
- "orange0"
- ip: "192.168.10.1"
hostnames:
- "orange1"
vi yaml/hive.yaml
spec:
template:
spec:
hostAliases:
- ip: "192.168.10.100"
hostnames:
- "orange0"
- ip: "192.168.10.1"
hostnames:
- "orange1"
vi conf/mr3-site.xml
<property>
<name>mr3.k8s.host.aliases</name>
<value>orange0=192.168.10.100,orange1=192.168.10.1</value>
</property>
配置临时数据的存储
用户可以使用 PersistentVolume 或 HDFS/S3 来存储临时数据(例如,运行查询的结果要传递给 ContainerWorkers)。要使用 PersistentVolume,请按照 1. 创建和挂载 PersistentVolume 中的说明进行操作。要使用 HDFS/S3,请按照 2. 使用 HDFS/S3 中的说明进行操作。
1. 创建和挂载 PersistentVolume
环境变量 CREATE_PERSISTENT_VOLUME 在 env.sh 中指定是否创建 PersistentVolume 和相应的 PersistentVolumeClaim。
vi env.sh
CREATE_PERSISTENT_VOLUME=true
如果 PersistentVolume 和相应的 PersistentVolumeClaim 已经创建(例如在 Amazon EKS 上),请将 CREATE_PERSISTENT_VOLUME 设置为 false。
清单 yaml/workdir-pv.yaml 定义了一个 PersistentVolume。用户应更新它以使用所需类型的 PersistentVolume。在我们的示例中,我们使用 NFS 创建一个 PersistentVolume,其中 NFS 服务器运行在 192.168.10.1 并使用目录 /home/nfs/hivemr3。PersistentVolume 应该对 UID 1000 的用户可写。
vi yaml/workdir-pv.yaml
spec:
persistentVolumeReclaimPolicy: Delete
nfs:
server: "192.168.10.1"
path: "/home/nfs/hivemr3"
清单 yaml/workdir-pvc.yaml 定义了一个 PersistentVolumeClaim,它引用由 yaml/workdir-pv.yaml 创建的 PersistentVolume。用户应指定 Hive on MR3 使用的存储大小:
vi yaml/workdir-pvc.yaml
spec:
resources:
requests:
storage: 10Gi
2. 使用 HDFS/S3
由于我们不使用 PersistentVolume,请在 env.sh 中将 CREATE_PERSISTENT_VOLUME 设置为 false。
vi env.sh
CREATE_PERSISTENT_VOLUME=false
在 conf/hive-site.xml 中设置配置键 hive.exec.scratchdir 和 hive.query.results.cache.directory,以指向用于存储临时数据的 HDFS 或 S3 上的目录。
- HDFS 上的目录必须对运行 HiveServer2 的用户可写,且目录权限为 733。如果不存在,HiveServer2 会自动创建一个权限为 733 的新目录。
- 要使用 S3,我们应使用前缀
s3a,而不是s3。由于 S3 是一个对象存储,只模拟目录而不维护所有权和权限,应在conf/mr3-site.xml中将配置键mr3.am.staging.dir.check.ownership.permission设置为 false。
vi conf/hive-site.xml
<property>
<name>hive.exec.scratchdir</name>
<value>s3a://hivemr3/workdir</value>
</property>
<property>
<name>hive.query.results.cache.directory</name>
<value>s3a://hivemr3/workdir/_resultscache_</value>
</property>
- 仅在用户计划执行
REPL DUMP命令时才更新hive.repl.rootdir。 - 不要更新
hive.downloaded.resources.dir,因为它应指向本地文件系统上的目录。
打开 env.sh 并将以下两个环境变量更新为空值,因为我们不使用 PersistentVolume。同时将 METASTORE_USE_PERSISTENT_VOLUME 设置为 false。
vi env.sh
WORK_DIR_PERSISTENT_VOLUME_CLAIM=
WORK_DIR_PERSISTENT_VOLUME_CLAIM_MOUNT_DIR=
METASTORE_USE_PERSISTENT_VOLUME=false
打开 yaml/metastore.yaml 并注释掉以下行:
vi yaml/metastore.yaml
# - name: work-dir-volume
# mountPath: /opt/mr3-run/work-dir/
# - name: work-dir-volume
# persistentVolumeClaim:
# claimName: workdir-pvc
打开 yaml/hive.yaml 并注释掉以下行:
vi yaml/hive.yaml
# - name: work-dir-volume
# mountPath: /opt/mr3-run/work-dir
# - name: work-dir-volume
# persistentVolumeClaim:
# claimName: workdir-pvc
配置 S3(可选)
要访问 S3 存储,应在 conf/core-site.xml 中设置其他配置键。打开 conf/core-site.xml 并设置 S3 的配置键。配置键 fs.s3a.endpoint 应设置为指向存储服务器。
vi conf/core-site.xml
<property>
<name>fs.s3a.aws.credentials.provider</name>
<value>com.amazonaws.auth.EnvironmentVariableCredentialsProvider</value>
</property>
<property>
<name>fs.s3a.endpoint</name>
<value>http://orange0:9000</value>
</property>
<property>
<name>fs.s3a.path.style.access</name>
<value>true</value>
</property>
当使用类 EnvironmentVariableCredentialsProvider 读取 AWS 凭证时,在 env.sh 中添加两个环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。由于 env.sh 作为 Secret 挂载在 Metastore 和 HiveServer2 Pod 内部,因此将 AWS 访问密钥 ID 和秘密访问密钥写在 kubernetes/env.sh 中是安全的。
vi env.sh
export AWS_ACCESS_KEY_ID=_your_aws_access_key_id_
export AWS_SECRET_ACCESS_KEY=_your_aws_secret_secret_key_
请注意,AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 已附加到 conf/mr3-site.xml 中配置键 mr3.am.launch.env 和 mr3.container.launch.env 的值。出于安全目的,用户不应将 AWS 访问密钥 ID 和秘密访问密钥写在 conf/mr3-site.xml 中。
vi conf/mr3-site.xml
<property>
<name>mr3.am.launch.env</name>
<value>LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mr3-run/hadoop/apache-hadoop/lib/native,HADOOP_CREDSTORE_PASSWORD,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGION</value>
</property>
<property>
<name>mr3.container.launch.env</name>
<value>LD_LIBRARY_PATH=/opt/mr3-run/hadoop/apache-hadoop/lib/native,HADOOP_CREDSTORE_PASSWORD,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGION</value>
</property>
配置 Metastore Pod
打开 yaml/metastore.yaml 并删除 nodeAffinity,因为我们不使用节点亲和性规则。
vi yaml/metastore.yaml
affinity:
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: roles
# operator: In
# values:
# - "masters"
默认情况下,Metastore 不会初始化 schema。如果这是首次运行 Metastore 且用户需要初始化 schema,请添加 --init-schema 作为参数。
vi yaml/metastore.yaml
spec:
template:
spec:
containers:
args: ["start", "--kubernetes", "--init-schema"]
配置 HiveServer2 Pod
(无需对 yaml/hive.yaml 进行进一步更改)
配置 HiveServer2 的 Service
清单 yaml/hiveserver2-service.yaml 定义了一个 Service,用于将 HiveServer2 暴露到 Kubernetes 集群外部。用户应为 HiveServer2 指定一个公共 IP 地址,以便客户端可以从 Kubernetes 集群外部连接到它。默认情况下,HiveServer2 使用端口 9852 进行 Thrift 传输,端口 10001 进行 HTTP 传输。在我们的示例中,我们在 192.168.10.1 暴露 HiveServer2。
vi yaml/hiveserver2-service.yaml
spec:
ports:
- protocol: TCP
port: 9852
targetPort: 9852
name: thrift
- protocol: TCP
port: 10001
targetPort: 10001
name: http
externalIPs:
- 192.168.10.1
对于使用 SSL 的安全通信,需要公共 IP 地址的有效主机名。
配置 MR3 DAGAppMaster 和 ContainerWorker Pod
作为先决条件,每个可能运行 ContainerWorker Pod 的工作节点应该有一组相同的本地目录用于存储中间数据。这些目录映射到每个 ContainerWorker Pod 中的 hostPath 卷。在 conf/mr3-site.xml 中将配置键 mr3.k8s.pod.worker.hostpaths 设置为本地目录列表。
vi conf/mr3-site.xml
<property>
<name>mr3.k8s.pod.worker.hostpaths</name>
<value>/data1/k8s,/data2/k8s,/data3/k8s</value>
</property>
配置安全
更新 conf/hive-site.xml 中的以下配置键。
- 两个配置键
javax.jdo.option.ConnectionUserName和javax.jdo.option.ConnectionPassword应与 MySQL 服务器用于 Metastore 的用户名和密码匹配。 hive.metastore.pre.event.listeners设置为空,因为我们在 Metastore 端未启用安全。
vi conf/hive-site.xml
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>passwd</value>
</property>
<property>
<name>hive.metastore.pre.event.listeners</name>
<value></value>
</property>
检查身份验证和授权的配置:
vi conf/hive-site.xml
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.HadoopDefaultAuthenticator</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory</value>
</property>
配置资源
在 conf/hive-site.xml 中,以下配置键指定分配给 Map Task、Reduce Task 或 ContainerWorker 的资源。在我们的示例中,我们为 Map Task 和 Reduce Task 分配 4GB 内存和单个核心,为 ContainerWorker 分配 16GB 内存和四个核心。
vi conf/hive-site.xml
<property>
<name>hive.mr3.map.task.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>hive.mr3.map.task.vcores</name>
<value>1</value>
</property>
<property>
<name>hive.mr3.reduce.task.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>hive.mr3.reduce.task.vcores</name>
<value>1</value>
</property>
<property>
<name>hive.mr3.all-in-one.containergroup.memory.mb</name>
<value>16384</value>
</property>
<property>
<name>hive.mr3.all-in-one.containergroup.vcores</name>
<value>4</value>
</property>
更新这些配置键时,应满足以下要求:
hive.mr3.map.task.memory.mb≤hive.mr3.all-in-one.containergroup.memory.mbhive.mr3.map.task.vcores≤hive.mr3.all-in-one.containergroup.vcoreshive.mr3.reduce.task.memory.mb≤hive.mr3.all-in-one.containergroup.memory.mbhive.mr3.reduce.task.vcores≤hive.mr3.all-in-one.containergroup.vcores
删除现有的 ConfigMaps 和 Services
在运行 Metastore 和 HiveServer2 之前,确保命名空间 hivemr3 中没有 ConfigMaps 和 Services。例如,用户可能会看到从上一次运行留下的 ConfigMaps 和 Services。
kubectl get configmaps -n hivemr3
NAME DATA AGE
mr3conf-configmap-master 1 16m
mr3conf-configmap-worker 1 16m
kubectl get svc -n hivemr3
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service-master-1237-0 ClusterIP 10.105.238.21 <none> 80/TCP 11m
service-worker ClusterIP None <none> <none> 11m
在这种情况下,请手动删除这些 ConfigMaps 和 Services。
kubectl delete configmap -n hivemr3 mr3conf-configmap-master mr3conf-configmap-worker
kubectl delete svc -n hivemr3 service-master-1237-0 service-worker
启动 Metastore
要运行 Metastore,请执行脚本 run-metastore.sh。在启动 Metastore 之前,脚本会自动从 https://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-8.0.28.tar.gz 下载 MySQL 连接器,因为 --init-schema 选项被传递给 Metastore。
./run-metastore.sh
...
CLIENT_TO_AM_TOKEN_KEY=ac37fec2-559b-4970-8191-b7821c57481e
MR3_APPLICATION_ID_TIMESTAMP=6451
MR3_SHARED_SESSION_ID=4c338f6e-c98c-4b67-a0c8-a1ac82e03b95
configmap/client-am-config created
statefulset.apps/hivemr3-metastore created
service/metastore created
启动 Metastore 后,用户应删除参数 --init-schema,以免意外再次初始化 schema。
vi yaml/metastore.yaml
spec:
template:
spec:
containers:
args: ["start", "--kubernetes"]
启动 HiveServer2
要运行 HiveServer2,请执行脚本 run-hive.sh。
./run-hive.sh
...
CLIENT_TO_AM_TOKEN_KEY=49e6ab1a-d62b-40c8-87d5-e7a6bf8ded1c
MR3_APPLICATION_ID_TIMESTAMP=20045
MR3_SHARED_SESSION_ID=9b6fad64-c280-4013-ace2-3c8c7f947166
Error from server (AlreadyExists): configmaps "client-am-config" already exists
deployment.apps/hivemr3-hiveserver2 created
service/hiveserver2 created
这些脚本在 Metastore 和 HiveServer2 Pod 内挂载以下文件:
env.shconf/*
这样,用户可以完全指定 Metastore 和 HiveServer2 以及 DAGAppMaster 和 ContainerWorkers 的行为。
为了使对这些文件的任何更改生效,用户应在删除命名空间 hivemr3 中的现有 ConfigMaps 和 Services 后重启 Metastore 和 HiveServer2。
执行脚本 run-hive.sh 会立即启动一个 HiveServer2 Pod 和一个 DAGAppMaster Pod。HiveServer2 Pod 在 readiness probe 联系后变为就绪状态。根据 readiness probe 的配置,HiveServer2 可能会在正常运行之前重启一次。在提交查询之前不会创建任何 ContainerWorkers Pod。
kubectl get pods -n hivemr3
NAME READY STATUS RESTARTS AGE
hivemr3-hiveserver2-8cdc6f486-lsptj 1/1 Running 0 99s
hivemr3-metastore-0 1/1 Running 0 2m37s
mr3master-6451-0-94ff6dc96-jqs2x 1/1 Running 0 84s
用户可以检查 DAGAppMaster Pod 的日志以确保它已正确启动。
kubectl logs -f -n hivemr3 mr3master-6451-0-94ff6dc96-jqs2x
...
2025-03-21T09:55:11,519 INFO [DAGAppMaster-1-13] DAGTimeoutHandler$: DAG timeout check: 0 DAGs
2025-03-21T09:55:11,600 INFO [K8sContainerLauncher-2-1] K8sContainerLauncher: Resynchronizing Pod states for appattempt_6451_0000_000000: 0
运行 Beeline
用户可以使用任意客户端程序(不一定是 MR3 release 中包含的 Beeline)通过使用 yaml/hiveserver2-service.yaml 创建的 Service 连接到 HiveServer2(默认打开 Thrift 端口 9852 和 HTTP 端口 10001)。在我们的示例中,我们在 Hiveserver2 Pod 内运行 Beeline。
kubectl exec -n hivemr3 -it hivemr3-hiveserver2-8cdc6f486-lsptj -- /bin/bash -c 'export PS1="$ "; exec /bin/bash'
export USER=root
/opt/mr3-run/hive/run-beeline.sh
...
Connecting to jdbc:hive2://hivemr3-hiveserver2-8cdc6f486-lsptj:9852/;;;
Connected to: Apache Hive (version 4.0.0)
Driver: Hive JDBC (version 4.0.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 4.0.0 by Apache Hive
0: jdbc:hive2://hivemr3-hiveserver2-8cdc6f486>
执行几个查询后,将创建 ContainerWorker Pod。
kubectl get pods -n hivemr3
NAME READY STATUS RESTARTS AGE
hivemr3-hiveserver2-8cdc6f486-lsptj 1/1 Running 0 4m7s
hivemr3-metastore-0 1/1 Running 0 5m5s
mr3master-6451-0-94ff6dc96-jqs2x 1/1 Running 0 3m52s
mr3worker-3515-1 1/1 Running 0 15s
mr3worker-3515-2 1/1 Running 0 15s
mr3worker-3515-3 1/1 Running 0 15s
停止 Hive on MR3
删除 HiveServer2 的 Deployment。
kubectl -n hivemr3 delete deployment hivemr3-hiveserver2
deployment.apps "hivemr3-hiveserver2" deleted
删除 HiveServer2 的 Deployment 不会自动终止 DAGAppMaster Pod。这是功能,不是错误,这是由于 Hive on MR3 支持高可用性。例如,在正确设置环境变量 MR3_APPLICATION_ID_TIMESTAMP 后,再次执行脚本 run-hive.sh 会将现有的 DAGAppMaster Pod 附加到新的 HiveServer2 Pod。
删除 DAGAppMaster 的 Deployment。
kubectl delete deployment -n hivemr3 mr3master-6451-0
deployment.apps "mr3master-6451-0" deleted
删除 DAGAppMaster Pod 会自动删除所有 ContainerWorker Pod。
删除 Metastore 的 StatefulSet。
kubectl -n hivemr3 delete statefulset hivemr3-metastore
statefulset.apps "hivemr3-metastore" deleted
过一会儿,命名空间 hivemr3 中应该没有 Pod 在运行。要删除所有剩余资源,请执行以下命令:
kubectl -n hivemr3 delete configmap --all; kubectl -n hivemr3 delete svc --all; kubectl -n hivemr3 delete secret --all; kubectl -n hivemr3 delete serviceaccount --all; kubectl -n hivemr3 delete role --all; kubectl -n hivemr3 delete rolebinding --all; kubectl delete clusterrole node-reader; kubectl delete clusterrolebinding hive-clusterrole-binding; kubectl -n hivemr3 delete persistentvolumeclaims workdir-pvc; kubectl delete persistentvolumes workdir-pv