Apache Hive 通过Docker快速入门

QuickStarted

介绍

在伪分布式模式下在 docker 容器内运行 Apache Hive,以便为 Hive 提供以下快速启动/调试/准备测试环境

快速入门

  • 步骤 1:拉取镜像

从 DockerHub 拉取镜像:https://hub.docker.com/r/apache/hive/tags。以下是最新的镜像:

  • 4.0.0

  • 3.1.3

    docker pull apache/hive:4.0.0

  • 步骤 2:导出 Hive 版本

    export HIVE_VERSION=4.0.0

  • 步骤 3:启动带有嵌入式 Metastore 的 HiveServer2。

它是轻量级的,并且为了快速设置,它使用 Derby 作为元存储数据库。

docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 --name hive4 apache/hive:${HIVE_VERSION}
  • 步骤 4:连接到 beeline

    docker exec -it hiveserver2 beeline -u 'jdbc:hive2://hiveserver2:10000/'

注意:启动独立 Metastore 要将独立 Metastore 与 Derby 一起使用,

docker run -d -p 9083:9083 --env SERVICE_NAME=metastore --name metastore-standalone apache/hive:${HIVE_VERSION}

详细设置

    • 构建图像

Apache Hive 依赖 Hadoop、Tez 和其他一些工具来促进大型数据集的读取、写入和管理。/packaging/src/docker/build.sh提供了针对依赖项的指定版本构建映像以及从源代码构建的方法。

    • 从源代码构建

      mvn clean package -pl packaging -DskipTests -Pdocker

    • 使用指定版本构建

有一些参数可以指定组件版本:

-hadoop <hadoop version>
-tez <tez version>
-hive <hive version>

如果未提供版本,它将分别从当前版本pom.xml: project.version、hadoop.version和tez.version中读取 Hive、Hadoop 和 Tez 的版本。例如,以下命令使用 Hive 4.0.0、Hadoophadoop.version和 Teztez.version构建映像,

./build.sh -hive 4.0.0

如果命令未指定 Hive 版本,它将使用本地apache-hive-${project.version}-bin.tar.gz(如果不存在则会触发构建),以及 Hadoop 3.3.6 和 Tez 0.10.3 来构建镜像,

./build.sh -hadoop 3.3.6 -tez 0.10.3

构建成功后,我们可以得到一个默认命名的Docker 镜像apache/hive,该镜像以提供的Hive版本为标签。

运行服务

在继续之前,我们应该HIVE_VERSION先定义环境变量。例如,如果-hive 4.0.0指定构建映像,

export HIVE_VERSION=4.0.0

或者假设你依赖于project.versionpom.xml 中的 current ,

export HIVE_VERSION=$(mvn -f pom.xml -q help:evaluate -Dexpression=project.version -DforceStdout)
    • 元存储

要快速启动,请使用 Derby 启动 Metastore,

docker run -d -p 9083:9083 --env SERVICE_NAME=metastore --name metastore-standalone apache/hive:${HIVE_VERSION}

当服务关闭时,所有内容都会丢失。为了保存 Hive 表的架构和数据,请使用外部 Postgres 和卷启动容器以保存它们,

docker run -d -p 9083:9083 --env SERVICE_NAME=metastore --env DB_DRIVER=postgres \
   --env SERVICE_OPTS="-Djavax.jdo.option.ConnectionDriverName=org.postgresql.Driver -Djavax.jdo.option.ConnectionURL=jdbc:postgresql://postgres:5432/metastore_db -Djavax.jdo.option.ConnectionUserName=hive -Djavax.jdo.option.ConnectionPassword=password" \
   --mount source=warehouse,target=/opt/hive/data/warehouse \
   --mount type=bind,source=`mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout`/org/postgresql/postgresql/42.5.1/postgresql-42.5.1.jar,target=/opt/hive/lib/postgres.jar \
   --name metastore-standalone apache/hive:${HIVE_VERSION}

如果你想要使用自己的hdfs-site.xml或yarn-site.xml为服务使用,可以HIVE_CUSTOM_CONF_DIR为命令提供环境变量。例如,将自定义配置文件放在目录下/opt/hive/conf,然后,

docker run -d -p 9083:9083 --env SERVICE_NAME=metastore --env DB_DRIVER=postgres \
   -v /opt/hive/conf:/hive_custom_conf --env HIVE_CUSTOM_CONF_DIR=/hive_custom_conf \
   --mount type=bind,source=`mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout`/org/postgresql/postgresql/42.5.1/postgresql-42.5.1.jar,target=/opt/hive/lib/postgres.jar \
   --name metastore apache/hive:${HIVE_VERSION}

对于 4.0 之前的 Hive 版本,如果要将现有的外部 Metastore 架构升级到目标版本,则添加--env SCHEMA_COMMAND=upgradeSchema到命令中。要跳过 schematool 初始化或升级 metastore 使用--env IS_RESUME="true",请为详细日志记录设置--env VERBOSE="true"。

  • -HiveServer2

启动带有嵌入式 Metastore 的 HiveServer2,

 docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 --name hiveserver2-standalone apache/hive:${HIVE_VERSION}

或者指定一个远程 Metastore(如果可用),

 docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 \
      --env SERVICE_OPTS="-Dhive.metastore.uris=thrift://metastore:9083" \
      --env IS_RESUME="true" \
      --name hiveserver2-standalone apache/hive:${HIVE_VERSION}

要在容器重启之间保存数据,可以使用 Volume 启动 HiveServer2,

docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 \
   --env SERVICE_OPTS="-Dhive.metastore.uris=thrift://metastore:9083" \
   --mount source=warehouse,target=/opt/hive/data/warehouse \
   --env IS_RESUME="true" \
   --name hiveserver2 apache/hive:${HIVE_VERSION}
    • HiveServer2,元存储

为了快速了解 HiveServer2 和 Metastore,下面有一个为此目的docker-compose.yml放置的内容,请指定第一个:packaging/src/dockerPOSTGRES_LOCAL_PATH

export POSTGRES_LOCAL_PATH=your_local_path_to_postgres_driver

例子:

mvn dependency:copy -Dartifact="org.postgresql:postgresql:42.5.1" && \
export POSTGRES_LOCAL_PATH=`mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout`/org/postgresql/postgresql/42.5.1/postgresql-42.5.1.jar

如果你没有安装 maven 或者无法解析 postgres 驱动程序,你可以自己下载这个 jar,将 更改POSTGRES_LOCAL_PATH为下载的 jar 的路径。然后,

docker compose up -d

因此将启动 HiveServer2、Metastore 和 Postgres 服务。卷用于在 Postgres 和 HiveServer2 容器内保存 Hive 生成​​的数据:

  • 配置单元数据库

该卷将 Hive 表的元数据保存在 Postgres 容器内。

  • 仓库

该卷将表的文件存储在 HiveServer2 容器内。

要停止/删除它们,

docker compose down

用法

HiveServer2 Web

在浏览器上访问 http://localhost:10002/

  • 直线:

    docker exec -it hiveserver2 beeline -u 'jdbc:hive2://hiveserver2:10000/'

    If beeline is installed on host machine, HiveServer2 can be simply reached via:

    beeline -u 'jdbc:hive2://localhost:10000/'

  • 运行一些查询

    show tables;
    create table hive_example(a string, b int) partitioned by(c int);
    alter table hive_example add partition(c=1);
    insert into hive_example partition(c=1) values('a', 1), ('a', 2),('b',3);
    select count(distinct a) from hive_example;
    select sum(b) from hive_example;
    
相关推荐
Hello.Reader1 小时前
深入解析 Apache APISIX
java·apache
武子康9 小时前
大数据-257 离线数仓 - 数据质量监控 监控方法 Griffin架构
java·大数据·数据仓库·hive·hadoop·后端
hwscom9 小时前
如何永久解决Apache Struts文件上传漏洞
java·服务器·struts·web安全·apache
白开水2339 小时前
Apache RocketMQ 5.1.3安装部署文档
apache·rocketmq
莹雨潇潇9 小时前
Hadoop完全分布式环境部署
大数据·hadoop·分布式
学计算机的睿智大学生14 小时前
Hadoop集群搭建
大数据·hadoop·分布式
清平乐的技术专栏1 天前
Hive SQL 查询所有函数
hive·hadoop·sql
节点。csn1 天前
Hadoop yarn安装
大数据·hadoop·分布式