如何在Kubernetes中安装Hive Metastore?

ie3xauqp  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(2)|浏览(273)

我正在Kubernetes上做一个项目,我使用Spark SQL来创建表,我想向Hive Metastore添加分区和模式。然而,我没有找到任何合适的文档来在Kubernetes上安装Hive Metastore。是否有可能知道我已经安装了PostgreSQL数据库?如果是的话,你能帮我提供任何官方文件吗?
先谢谢你了。

sczxawaw

sczxawaw1#

MR3上的Hive允许用户在Kubernetes上的Pod中运行Metastore。指令可能看起来很复杂,但一旦Pod配置正确,就很容易在Kubernetes上启动Metastore。您也可以在Docker Hub找到预构建的Docker镜像。还提供了 Helm 图。
https://mr3docs.datamonad.com/docs/k8s/guide/run-metastore/
https://mr3docs.datamonad.com/docs/k8s/helm/run-metastore/
本文档假设使用MySQL,但我们也用PostgreSQL测试过它。

ecr0jaav

ecr0jaav2#

对于install Hive Metastore on Kubernetes,您需要运行Metastore服务的Docker镜像和Kubernetes部署配置。Metastore服务连接到用于存储元数据的关系数据库。以下是步骤:

*在Kubernetes上设置Hive Metastore

  • 使用YAML文件为metastore-standalone创建Kubernetes Pod。该Pod应包括:
  • 一个Init Containers,用于下载应用程序所需的依赖项。此容器使用busybox:1.28映像并运行shell命令从Maven存储库下载hadoop-awsaws-java-sdk-bundle JAR文件。
  • 运行apache/hive:3.1.3映像的Main Container。此容器被配置为运行Hive Metastore服务。Metastore服务管理Hive表和分区的元数据。
  • 几个Environment Variables用于Hive Metastore服务。SERVICE_NAME设置为metastore。还设置了AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,将用于访问AWS S3。
  • 一个Command,首先将下载的JAR文件从/jars目录移动到/opt/hadoop/share/hadoop/common目录。然后,它使用Derby作为数据库初始化Metastore模式。最后,它运行Hive Metastore服务。
    *使用远程数据库:此设置中的Hive Metastore服务使用本地/嵌入式Metastore数据库(Derby),这对于测试或开发目的是很好的。但是,对于生产使用,建议使用远程元存储数据库。Metastore服务支持多种类型的数据库,包括MySQL、Postgres、Oracle和MS SQL Server。您需要调整schematool命令并提供其他配置以使用远程数据库。
    *配置Spark将远程Hive Metastore和S3用作仓库
  • 要将Spark指向您的Hive Metastore服务,请在提交Spark应用程序时提供特定配置。这可以使用Spark配置来完成。这些配置包括您的AWS凭据、S3存储桶名称和hadoop-aws包,允许Spark与S3交互。
  • 配置spark.hadoop.fs.s3a.access.keyspark.hadoop.fs.s3a.secret.key提供了与AWS S3交互所需的访问密钥。spark.hadoop.fs.s3a.endpoint配置将端点设置为访问S3服务。
  • spark.sql.catalogImplementation配置设置为hive,这意味着应用程序将使用Hive的目录实现。spark.hadoop.hive.metastore.uris配置设置用于连接到Hive元存储区的URI。
    *解决常见问题
  • 问题1:如果Docker镜像入口点中存在bug,最有效的解决方法是在Kubernetes配置的containers部分使用自定义命令覆盖默认命令。此命令初始化Derby数据库的模式,然后启动HiveMetastore服务。
  • 问题2:如果Hive的默认Docker镜像不包含AWS相关的JAR文件,这些JAR文件对于将Metastore服务连接到S3存储桶至关重要,请在Kubernetes配置中添加init容器。这个init容器基于busybox映像,从Maven存储库下载必要的AWS JAR文件,并将其存储在共享卷中。然后,将这些JAR添加到主Hive Metastore容器的类路径中。请记住,这些说明是相当一般的,您可能需要调整它们以适应您的特定需求和环境。

此外,请记住将YAML配置和Spark-submit命令中的AWS Access Key和Secret Key占位符替换为您的实际AWS凭据。
下面是一个简单的例子:

apiVersion: v1
kind: Pod
spec:
  initContainers:
  - name: download-dependencies
    image: busybox:1.28
    command:
    - /bin/sh
    - -c
    - |
      wget -P /jars https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.1.0/hadoop-aws-3.1.0.jar https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.271/aws-java-sdk-bundle-1.11.271.jar
    volumeMounts:
    - name: jar-volume
      mountPath: /jars
  containers:
  - name: hive-metastore
    image: apache/hive:3.1.3
    ports:
    - containerPort: 9083
    command: ["/bin/bash", "-c", "mv /jars/* /opt/hadoop/share/hadoop/common && /opt/hive/bin/schematool -dbType derby -initSchema && exec /opt/hive/bin/hive --skiphadoopversion --skiphbasecp --service metastore --hiveconf fs.s3a.endpoint=your-s3-endpoint"]
    volumeMounts:
    - name: jar-volume
      mountPath: /jars
  volumes:
  - name: jar-volume
    emptyDir: {}

我希望这对你有帮助!如果你有任何问题请告诉我。

相关问题