Apache Kylin跨Hadoop集群取数咨询:多集群Cube支持及Hive取数方案
嘿,针对你提出的两个Apache Kylin相关问题,我结合实际使用经验来给你解答:
1. Apache Kylin是否支持从多个Hadoop集群抽取Cube的数据?
当然支持!不过默认情况下Kylin是绑定单个Hadoop集群运行的,要实现多集群数据抽取,需要做一些配置或者架构上的调整,具体可以参考下面的实现方案。
2. 从两个不同集群的Hive表获取数据的实现方案
这里给你三种实用的方案,你可以根据自己的场景选择:
方案一:通过Hive外部表映射远程集群数据
这是轻量且直接的方案。在Kylin所在集群的Hive中,创建外部表直接指向另一个集群Hive表的HDFS存储路径。这样Kylin就可以像处理本地Hive表一样,将这个外部表纳入模型来构建Cube。
示例SQL:CREATE EXTERNAL TABLE remote_user_table ( user_id STRING, user_name STRING, age INT ) STORED AS ORC LOCATION 'hdfs://remote-nn-host:8020/user/hive/warehouse/user_db.db/user_info';注意:要确保两个集群之间网络互通,且Kylin运行用户拥有访问远程HDFS路径的权限,同时远程Hive表的存储格式(ORC/PARQUET等)要和创建的外部表一致。
方案二:使用数据同步工具将远程数据拉到本地集群
如果跨集群读取数据的性能无法满足需求,或者远程集群数据更新频率较低,可以先把数据同步到Kylin所在的集群。常用的工具是Hadoop自带的DistCp,也可以用Sqoop或者自定义定时任务。
示例DistCp命令:hadoop distcp -update hdfs://remote-nn-host:8020/user/hive/warehouse/user_db.db/user_info hdfs://local-nn-host:8020/user/hive/warehouse/local_user_db.db/synced_user_info同步完成后,在本地Hive中创建对应表,再让Kylin基于这个本地表构建Cube即可。这种方式的优势是Cube构建时的性能更好,避免跨集群网络开销。
方案三:配置Kylin多Hive数据源(适用于Kylin 4及以上版本)
Kylin 4及以后的版本对多数据源支持更友好,可以直接配置多个Hive数据源来访问不同集群的Hive服务。需要修改Kylin的配置文件kylin.properties,添加第二个Hive集群的配置:# 启用第二个Hive数据源 kylin.source.hive.second-cluster.enabled=true # 远程Hive Metastore地址 kylin.source.hive.second-cluster.hive.metastore.uris=thrift://remote-hive-metastore-host:9083 # 远程Hive配置文件目录(可选,用于加载远程集群的HDFS、Hive相关配置) kylin.source.hive.second-cluster.hive.conf.dir=/opt/hive-remote/conf配置完成后重启Kylin,在Web UI的数据源管理中就能看到新增的Hive集群,直接导入对应的表到模型即可。
额外注意事项
不管用哪种方案,都要确保两个集群之间的网络连通性(比如开放HDFS、Hive Metastore的端口),同时做好权限管控,避免数据访问权限问题。如果是跨集群网络延迟较高的场景,优先考虑数据同步的方案来保障Cube构建性能。
内容的提问来源于stack exchange,提问作者rohit

