之前一直是通过cli连接hive,由于系统升级需要通过beeline连接。通过官方文档升级发现升级出现报错。
报错如下:
找不到usr/local/hive/conf,或者usr/local/hive/lib目录。
通过google搜索有没有解决方案,发现网上的说法几乎都是错误的。只能看源代码。
在kylin.sh中发现加载会自动加载find-hive-dependency.sh文件。内容如下:
client_mode=`bash ${KYLIN_HOME}/bin/get-properties.sh kylin.source.hive.client`
hive_env=
if [ "${client_mode}" == "beeline" ]
then
beeline_shell=`$KYLIN_HOME/bin/get-properties.sh kylin.source.hive.beeline-shell`
beeline_params=`bash ${KYLIN_HOME}/bin/get-properties.sh kylin.source.hive.beeline-params`
hive_env=`${beeline_shell} ${hive_conf_properties} ${beeline_params} --outputformat=dsv -e set 2>&1 | grep 'env:CLASSPATH' `
else
hive_env=`hive ${hive_conf_properties} -e set 2>&1 | grep 'env:CLASSPATH'`
fi
在这一段中发现kylin的在加载hive_env路径时候,如果是beeline方式会通过配置的beeline -e 访问server,然后通过返回信息grep到env:CLASSPATH拿到hive的路径。
在这个地方如果当前的hive-client和server端的路径不一致就会出现上述报错。
这个地方不知道官方是怎么想的(感觉有点尴尬,希望官方能做一下修改吧)。
我这边只能固定写死hive_conf_path, hive_exec_path.
hive_conf_path=/home/data/hive/conf
hive_exec_path=/home/data/hive/lib/hive-exec-2.1.1.jar
修改之后通过配置参数,然后重新启动就ok了。
kylin.source.hive.client=beeline
kylin.source.hive.beeline-params=-n data --hiveconf hive.security.authorization.sqlstd.confwhitelist.append='mapreduce.job.*|dfs.*' -u jdbc:hive2://*****
kylin.source.hive.beeline-shell=beeline
重启完成之后,通过cube build log可以发现修改成功了。
Create and distribute table, cmd:
cat >/tmp/1556604774125.hql<<EOL
USE default;