HiveMetaStore支持基于Redis的CacheStore
操作场景
Hive中Metastore服务支持将部分表的元数据缓存在Redis上。
前提条件
集群已安装Redis服务。
配置Metastore的相关参数
- 登录FusionInsight Manager,具体请参见访问FusionInsight Manager,选择“集群 > 待操作集群名 > 服务 > Hive > 配置 > 全部配置 > MetaStore(角色) > 自定义”,修改以下参数,使MetaStore的cache对接到Redis服务上。
表1 参数说明 参数名
值
描述
hive.metastore.rawstore.impl
org.apache.hadoop.hive.metastore.cache.redis.RedisCachedStore
CachedStore的实现类,使用自定义的RedisCachedStore(必要配置)。
redis.cluster.host.and.port
xxx.xxx.xxx.xxx:22400;xxx.xxx.xxx.xxx.xxx:22401
配置redis集群中任意节点的ip和port,格式为:ip:port;ip:port,值尾部不可以分号结尾(必要配置)。
metastore.cached.rawstore.cached.object.whitelist
catalog.database.table,catalog.database.table
缓存表白名单,缓存配置的表到redis中,多张表之间以逗号分隔,默认为.* 代表缓存所有表(可选配置)。
说明:表名由catalog.database.table三组成,catalog默认为hive。
metastore.cached.rawstore.cached.object.blacklist
catalog.database.table,catalog.database.table
缓存表黑名单,将配置了的表不在redis中缓存,多张表之间以逗号分隔,默认为空(可选配置)。
说明:表名由catalog.database.table三组成,catalog默认为hive。
redis.cache.prewarm.cron
cronTab表达式, 比如:0 0 16 * * ?
定时执行prewarm的corn表达式,指将元数据库中缓存的数据刷新一次到redisCache中进行同步(可选配置)。
metastore.cached.rawstore.catalogs
hive
需要缓存的catalog,默认为hive,可不配置(可选配置)。
jedis.pool.max.wait.mills
30000
获取redis连接的超时时间,安全模式下可以长一些,单位ms,默认30000ms,可不配(可选配置)。
jedis.pool.max.idle
200
jedis连接池中的最大空闲连接数,建议与max.total相同,默认200(可选配置)。
jedis.pool.max.total
200
jedis连接池中的最大连接数,默认200(可选配置)。
redis.security.enabled
true或false
是否开启redis cacahe安全模式,默认为true开启安全模式(可选配置)。
当集群安装为非安全模式时,查看"集群 > 待操作集群名 > 服务 > Redis > 配置 > 全部配置 > Redis> 安全",查看参数“REDIS_SECURITY_ENABLED”是否为“false”,如果不是“false”则Redis服务不符合当前Metastore的非安全模式。
- 保存配置,选择“概览 > 更多 > 重启服务”重启Hive服务。
注意事项
使用Redis过程中如果切换回原生非缓存模式,执行一段时间后再切换回Redis,由于在使用数据库期间元数据的增删改是同步不到Redis的,所以再切回Redis前必须将Redis上缓存表清空然后重新同步元数据的数据,清空方式有两种方式。
- 登录Redis客户端,手动将所有Redis节点上执行flushall命令。
- 登录Redis客户端,修改Redis的两个标识,执行以下命令修改,其中{hiveServiceName}为Metastore配置文件“ENV_VARS”中“HIVE_DEFAULT_GROUP”参数的值,默认为“hive”。
set {hiveServiceName}-hive-isRedisAvailable false
del {hiveServiceName}-hive-isCanPrewarm