跳到主要内容

设置 env.sh

下面我们提供 env.sh 中环境变量的详细信息。

所有 Pod 共用

vi env.sh
MR3_NAMESPACE=hivemr3
MR3_SERVICE_ACCOUNT=hive-service-account
CONF_DIR_CONFIGMAP=hivemr3-conf-configmap
MASTER_SERVICE_ACCOUNT=master-service-account
WORKER_SERVICE_ACCOUNT=worker-service-account
CREATE_KEYTAB_SECRET=true
KEYTAB_SECRET=hivemr3-keytab-secret
CREATE_WORKER_SECRET=true
WORKER_SECRET=hivemr3-worker-secret

通用

  • MR3_NAMESPACE 指定所有 Kubernetes 对象的命名空间。
  • MR3_SERVICE_ACCOUNT 指定 Hive on MR3 的 ServiceAccount。
  • CONF_DIR_CONFIGMAP 指定从目录 kubernetes/conf 中的文件构建的 ConfigMap 的名称。

ServiceAccount

  • MASTER_SERVICE_ACCOUNT 指定 MR3 DAGAppMaster 的 ServiceAccount。
  • WORKER_SERVICE_ACCOUNT 指定 MR3 ContainerWorker 的 ServiceAccount。

Secret

  • CREATE_KEYTAB_SECRET 指定是否从目录 kubernetes/key 中的文件创建 Secret。如果使用 Kerberos 进行身份验证,应将其设置为 true。
  • KEYTAB_SECRET 指定当 CREATE_KEYTAB_SECRET 设置为 true 时要构建的 Secret 的名称。
  • CREATE_WORKER_SECRET 指定是否为 MR3 ContainerWorker 创建 Secret。
  • WORKER_SECRET 指定当 CREATE_WORKER_SECRET 设置为 true 时要构建的 Secret 的名称。

用于 Metastore

vi env.sh
HIVE_DATABASE_HOST=red0
HIVE_METASTORE_HOST=hivemr3-metastore-0.metastore.hivemr3.svc.cluster.local
HIVE_METASTORE_PORT=9850
HIVE_DATABASE_NAME=hivemr3
HIVE_WAREHOUSE_DIR=/opt/mr3-run/work-dir/warehouse/
METASTORE_SECURE_MODE=true
HIVE_METASTORE_KERBEROS_PRINCIPAL=hive/indigo20@REDHIVE_METASTORE_KERBEROS_KEYTAB=$KEYTAB_MOUNT_DIR/hive.service.keytab

通用

  • HIVE_DATABASE_HOST 指定运行数据库服务器的主机。
  • HIVE_METASTORE_HOSTHIVE_METASTORE_PORT 指定 Metastore 本身的地址。因为我们要创建一个 Metastore Pod,所以将 HIVE_METASTORE_HOST 设置为 hivemr3-metastore-0.metastore.hivemr3.svc.cluster.local。这里 hivemr3-metastore-0 是将运行 Metastore 的 Pod 的唯一名称,hivemr3 是命名空间。要使用作为外部组件运行的现有 Metastore(不创建新的 Metastore Pod),请将 HIVE_METASTORE_HOST 设置为其主机(例如 red0)。
  • HIVE_DATABASE_NAME 指定 MySQL 服务器中 Metastore 的数据库名称。

数据仓库

  • HIVE_WAREHOUSE_DIR 指定 Hive 数据仓库的路径。由于 MR3 与数据源类型无关,因此指定数据仓库的完整路径(包括文件系统)非常重要。如果未给出文件系统,MR3 会假设本地文件系统,因为在 conf/core-site.xml 中配置键 fs.defaultFS 设置为 file:///

由于数据仓库由 HivePlus 的所有组件共享,其路径应在每个 Pod 中全局有效。例如,HIVE_WAREHOUSE_DIR=hdfs://red0:8020/tmp/hive 是可以的,因为它指向全局有效的位置(red0 上运行的 HDFS 上的目录 /tmp/hive)。如果不是,用户可能无法创建新的数据库或表。例如,如果我们将 HIVE_WAREHOUSE_DIR 设置为 /foo/bar,而 Metastore 在其 Pod 内没有写权限,则用户无法创建新的数据库或表。如果 Metastore 恰好对 /foo/bar 有写权限,则用户可以创建新的数据库和表。

以下是路径的几个示例。要在 Kubernetes 集群中运行 HivePlus,用户应使用 hdfss3a 作为文件系统。

  • /opt/mr3-run/work-dir/warehouse/:使用 HiveServer2 Pod 内的本地目录作为 Hive 数据仓库。由于本地目录对外部不可见,这仅在所有组件(HiveServer2、DAGAppMaster 和 ContainerWorker)在同一个 Pod 中运行时才有效。
  • hdfs://red0:8020/user/hive/warehouse:使用 NameNode 在 red0 上的 HDFS 目录作为 Hive 数据仓库。
  • s3a://mr3-bucket/warehouse:使用 S3 存储桶作为 Hive 数据仓库。
信息

初始化模式时,Metastore 读取 env.sh 中的环境变量 HIVE_WAREHOUSE_DIR 并将数据仓库的路径存储在 MySQL 数据库中。一旦数据仓库的路径注册到 Metastore,用户只能通过直接访问 MySQL 数据库来更新它。因此,将 HIVE_WAREHOUSE_DIR 设置为新路径并重启 HiveServer2 没有任何效果。

安全

  • 如果 Metastore 使用 Kerberos 身份验证并以安全模式运行,METASTORE_SECURE_MODE 应设置为 true。如果 HiveServer2 使用 Kerberos 身份验证,METASTORE_SECURE_MODE 也应设置为 true。
  • HIVE_METASTORE_KERBEROS_PRINCIPAL 指定服务主体,HIVE_METASTORE_KERBEROS_KEYTAB 指定服务密钥表文件的名称,用户应将该文件复制到目录 kubernetes/key

如果 HIVE_DATABASE_HOSTHIVE_METASTORE_HOST 使用默认 DNS 未知的主机,用户应在 yaml/metastore.yamlyaml/hive.yamlspec.template.spec.hostAliases 字段中添加它们的别名。以下示例添加了默认 DNS 未知的主机名 red0indigo20

vi yaml/hive.yaml
spec:
template:
spec:
hostAliases:
- ip: "10.1.91.4"
hostnames:
- "red0"
- ip: "10.1.91.41"
hostnames:
- "indigo20"

用于 HiveServer2

vi env.sh
HIVE_SERVER2_HOST=$HOSTNAME
HIVE_SERVER2_PORT=9852
HIVE_SERVER2_HTTP_PORT=10001
HIVE_SERVER2_HEAPSIZE=32768
HIVE_SERVER2_AUTHENTICATION=KERBEROS
HIVE_SERVER2_KERBEROS_PRINCIPAL=hive/indigo20@REDHIVE_SERVER2_KERBEROS_KEYTAB=$KEYTAB_MOUNT_DIR/hive.service.keytab
TOKEN_RENEWAL_HIVE_ENABLED=false

通用

  • HIVE_SERVER2_PORTHIVE_SERVER2_HTTP_PORT 应与 yaml/hiveserver2-service.yaml 中指定的端口号匹配。
  • HIVE_SERVER2_HEAPSIZE 指定 HiveServer2 的堆大小(以 MB 为单位)。如果 DAGAppMaster 以 LocalThread 模式运行,堆大小不应大于分配给运行 HiveServer2 的 Pod 的内存(在 hive.yaml 中指定)。如果 DAGAppMaster 以 LocalProcess 模式运行,它与 DAGAppMaster 的堆大小(在 conf/mr3-site.xml 中由 mr3.am.resource.memory.mb 指定)的总和不应大于分配给 Pod 的内存。

安全

  • 如果 HiveServer2 使用 Kerberos 身份验证(将 HIVE_SERVER2_AUTHENTICATION 设置为 KERBEROS),HIVE_SERVER2_KERBEROS_PRINCIPALHIVE_SERVER2_KERBEROS_KEYTAB 应分别指定服务主体和服务密钥表文件(用于 hive-site.xml 中的 hive.server2.authentication.kerberos.principalhive.server2.authentication.kerberos.keytab)。需要注意的是,此主体的服务名称可能与 HIVE_METASTORE_KERBEROS_PRINCIPAL 中的服务名称不同,服务密钥表文件也可能与 HIVE_METASTORE_KERBEROS_KEYTAB 中的文件不同。
  • TOKEN_RENEWAL_HIVE_ENABLED 应设置为 true 以自动续订 Hive 令牌。