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;
    
相关推荐
JessieZeng aaa3 小时前
CSV文件数据导入hive
数据仓库·hive·hadoop
木古古184 小时前
使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题
前端·chrome·apache
Yz987610 小时前
hive复杂数据类型Array & Map & Struct & 炸裂函数explode
大数据·数据库·数据仓库·hive·hadoop·数据库开发·big data
疯一样的码农11 小时前
Apache Maven简介
java·maven·apache
EDG Zmjjkk12 小时前
Hive 函数(实例操作版2)
数据仓库·hive·hadoop
疯一样的码农13 小时前
Apache Maven 标准文件目录布局
java·maven·apache
千羽星弦13 小时前
Apache和HTTPS证书的生成与安装
网络协议·https·apache
high20111 天前
【Apache Paimon】-- 5 -- Flink 向 Paimon 表写入数据
linux·flink·apache·paimon
那一抹阳光多灿烂1 天前
Spark核心组件解析:Executor、RDD与缓存优化
hadoop·spark
Yz98761 天前
Hive分桶超详细!!!
大数据·数据仓库·hive·hadoop·hdfs·数据库开发·big data