在伪分布式模式下,在Docker容器内运行Apache Hive,可以提供以下功能:快速启动/调试/为Hive准备测试环境。
从DockerHub:https://hub.docker.com/r/apache/hive/tags中拉取镜像。目前发布了3个镜像:
docker pull apache/hive:4.0.0-alpha-2
export HIVE_VERSION=4.0.0-alpha-2
这是轻量级的,为了快速启动,它使用Derby存储元数据。
docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 --name hive4 apache/hive:${HIVE_VERSION}
docker exec -it hiveserver2 beeline -u 'jdbc:hive2://hiveserver2:10000/'
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的版本。例如下面的命令使用Hive4.0.0-alpha-2、Hadoop hadoop.version和Tez tez.version构建镜像。
./build.sh -hive 4.0.0-alpha-2
如果命令没有指定Hive版本,它将使用本地的apache-hive-${project. version}-bin.tar.gz(如果不存在将触发构建),连同Hadoop3.1.0和Tez0.10.1构建镜像。
./build.sh -hadoop 3.1.0 -tez 0.10.1
构建成功后,我们可以默认得到一个名为apache/hive的Docker镜像,镜像由提供的Hive版本标记。
在继续之前,我们应该先定义环境变量HIVE_VERSION。例如,如果指定-hive4.0.0-alpha-2来构建映像。
export HIVE_VERSION=4.0.0-alpha-2
或者假设您依赖于pom. xml中的当前project.version。
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和Volume启动容器以保留它们。
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 \
--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 \
--name metastore apache/hive:${HIVE_VERSION}
使用嵌入式Metastore启动HiveServer2,
docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 --name hiveserver2-standalone apache/hive:${HIVE_VERSION}
或指定远程元存储,
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和Metastore,您可以运行:
cd packaging/src/docker
docker compose up -d
卷用于将Hive生成的数据保存在Postgres和HiveServer2容器中: hive_db 卷将Hive表的元数据保存在Postgres容器中。 该卷将表的文件存储在HiveServer2容器中。
HiveServer2 web
Beeline:
docker exec -it hiveserver2 beeline -u 'jdbc:hive2://hiveserver2:10000/'
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;