设置 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_HOST和HIVE_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,用户应使用 hdfs 或 s3a 作为文件系统。
/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_HOST 和 HIVE_METASTORE_HOST 使用默认 DNS 未知的主机,用户应在 yaml/metastore.yaml 和 yaml/hive.yaml 的 spec.template.spec.hostAliases 字段中添加它们的别名。以下示例添加了默认 DNS 未知的主机名 red0 和 indigo20。
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_PORT和HIVE_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_PRINCIPAL和HIVE_SERVER2_KERBEROS_KEYTAB应分别指定服务主体和服务密钥表文件(用于hive-site.xml中的hive.server2.authentication.kerberos.principal和hive.server2.authentication.kerberos.keytab)。需要注意的是,此主体的服务名称可能与HIVE_METASTORE_KERBEROS_PRINCIPAL中的服务名称不同,服务密钥表文件也可能与HIVE_METASTORE_KERBEROS_KEYTAB中的文件不同。 TOKEN_RENEWAL_HIVE_ENABLED应设置为 true 以自动续订 Hive 令牌。