介紹
在偽分布式模式下,在Docker容器內運行Apache Hive,可以提供以下功能:快速啟動/調試/為Hive準備測試環境。
快速開始
1. 拉取鏡像
從DockerHub:https://hub.docker.com/r/apache/hive/tags中拉取鏡像。目前發布了3個鏡像:
- 4.0.0-alpha-2
- 4.0.0-alpha-1
- 3.1.3
docker pull apache/hive:4.0.0-alpha-2
2. 配置變量
export HIVE_VERSION=4.0.0-alpha-2
3. 啟動服務
這是輕量級的,為了快速啟動,它使用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/'
詳細配置
構建鏡像
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服務
在繼續之前,我們應該先定義環境變量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)
Metastore
為了快速開始,請使用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}
HiveServer2
使用嵌入式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}
同時啟用Metastore和HiveServer2
要快速了解HiveServer2和Metastore,您可以運行:
cd packaging/src/docker
docker compose up -d
卷用于將Hive生成的數據保存在Postgres和HiveServer2容器中: hive_db 卷將Hive表的元數據保存在Postgres容器中。 該卷將表的文件存儲在HiveServer2容器中。
- hive_db
- 卷將Hive表的元數據保存在Postgres容器中。
- warehouse
- 該卷將表的文件存儲在HiveServer2容器中。
更多
-
HiveServer2 web
- 在瀏覽器上訪問http://localhost:10002/
-
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;