作者:房孝敬 快手大数据架构
在快手大数据团队和 Databend 的共同努力下,终于支持基于 Hive Catalog 运行 Hive 上的查询。这个文档展示了如何设置 Databend 和 Hive 环境集成及运行 SQL 查询 Hive 上数据 。
如何搭建 Databend 和 Hive 集成环境
HiveServer & metastore & HDFS 应该是预先安装的。
- 目前官方还没放出来支持 Hive 的二进制 Databend-release。现在只能从源代码构建含 Hive 支持的 Databend。
## make sure JAVA_HOME is set
export JAVA_HOME=/path/to/java
export LD_LIBRARY_PATH=${JAVA_HOME}/lib/server:${LD_LIBRARY_PATH}
cargo build --features hive,storage-hdfs
- 设置 Databend 集群,参考[deploying-databend](https://databend.rs/doc/deploy/deploying-databend)
- 将 Hive 目录和 HDFS 存储添加到 databend-query.toml
[storage]
type = "hdfs"
[storage.hdfs]
# hdfs namenode address,such as 127.0.0.1:8020
name_node = "xx"
root = ""
[catalogs.hive]
type = "hive"
# hive metastore address, such as 127.0.0.1:9083
address = "xx"
- 使用 java & Hadoop 环境运行 databend-query
export HADOOP_HOME=xxx
export JAVA_HOME=xxx, such as /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
export LD_LIBRARY_PATH=$JAVA_HOME/lib/server:$LD_LIBRARY_PATH
./bin/databend-query -c ./databend-query.toml > query.log 2>&1 &
- 使用 mysql 客户端设置 Hive 相关设置
set global sql_dialect = 'hive';
建议设置:
-- for chinese users
set global timezone = 'Asia/Shanghai';
set global max_execute_time = 180000;
-- support hive nvl function
create FUNCTION nvl as (a,b) -> ifnull(a,b);
- 使用 mysql 客户端或 mysql jdbc 客户端查询 Hive 数据。注意:Hive 表必须被引用为 “hive.db.table”
select * from hive.$db.$table limit 10;
限制
- 只支持 parquet table,不支持 orc,txt
- 不支持 struct & map & decimal 这些 Hive 的数据类型
- 只支持 Hive SELECT 查询,不支持DDL、INSERT、DML 操作
- 不支持 Hive udfs,Hive 函数支持有限
Hive 功能现在处于测试阶段,如使用中遇到问题和建议,随时反馈到 Databend [issue](https://github.com/datafuselabs/databend/issues)
关于 Databend
Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。
- Databend 文档:https://databend.rs/
- Twitter:https://twitter.com/Datafuse_Labs
- Slack:https://datafusecloud.slack.com/
- Wechat:Databend
- GitHub :https://github.com/datafuselabs/databend