Shell 尽管我可以在表列表中看到该表,但Invalidate metadata给出了TableNotFoundException
我正在尝试运行一个脚本,该脚本验证应该作为部署的一部分创建的所有表。这是我的剧本:Shell 尽管我可以在表列表中看到该表,但Invalidate metadata给出了TableNotFoundException,shell,sh,impala,Shell,Sh,Impala,我正在尝试运行一个脚本,该脚本验证应该作为部署的一部分创建的所有表。这是我的剧本: set -x ENV=$1 . /user/setenv.sh ticket="" wlf_kinit ticket echo "Checking if Kerberos Ticket is available.." klist $ticket if [ $? -eq 1 ]; then echo "Kerberos Ticket not found..Exiting"
set -x
ENV=$1
. /user/setenv.sh
ticket=""
wlf_kinit ticket
echo "Checking if Kerberos Ticket is available.."
klist $ticket
if [ $? -eq 1 ]; then
echo "Kerberos Ticket not found..Exiting"
exit 1
fi
echo "Validating Hadoop tables" > /tmp/psk1/db_validation_log.txt
db_dir=/user/db
cd $db_dir
for current_directory in `find . -maxdepth 1 -type d`
do
#current_directory=`echo $current_directory | awk -F '/' '{print $2}'`
echo $current_directory
if [ "$current_directory" != "." ]; then
current_directory=`echo $current_directory | awk -F '/' '{print $2}'`
if [ "${current_directory:0:1}" = "v" ]; then
dir=$db_dir/$current_directory/views
else
dir=$db_dir/$current_directory/tables
fi
cd $dir
pwd
#echo "Validating tables in "$current_directory >> /tmp/psk1/db_validation_log.txt
find . -name '*.hql' | while read rec; do
echo $rec
tbl_name=`echo $rec | awk -F '/' '{print $2}' | awk -F '.' '{print $1}'`
result=$(impala-shell --quiet --delimited --ssl -i ${impala_host} -ku ${user_id}${impala_realm} -q "set request_pool = ${request_pool}; use $current_directory$ENV; invalidate metadata $tbl_name; show tables like '$tbl_name';") 2>> /tmp/psk1/db_validation_log.txt
#echo $result
if [ $? -eq 0 ]; then
if [ ${result} == ${tbl_name} ]; then
echo "$tbl_name exists" #>> /tmp/psk1/db_validation_log.txt
else
echo "$tbl_name does not exist" #>> /tmp/psk1/db_validation_log.txt
fi
else
echo $current_directory$ENV"."$tbl_name" Query error" >> /tmp/psk1/db_validation_log.txt
impala-shell --quiet --delimited --ssl -i ${impala_host} -ku ${user_id}${impala_realm} -q "set request_pool = ${request_pool}; use $current_directory$ENV; invalidate metadata $tbl_name; show tables like '$tbl_name';" 2>> /tmp/psk1/db_validation_log.txt
fi
done
fi
done
cat /tmp/psk1/db_validation_log.txt | mail -a /tmp/psk1/db_validation_log.txt -s 'Hadoop DB validation completed. Check the attached log.' -r ${from_email} ${to_email} 2>> /tmp/psk1/db_validation_log.txt
kdestroy -c $ticket
此脚本将失败的查询打印到.txt文件中,并通过电子邮件发送。在文本文件中,我看到一些查询因TableNotFoundException而失败。但当我打开黑斑羚壳并列出表格时,我可以看到列表中的表格。我不确定是什么导致了这种不一致
任何帮助都将不胜感激。谢谢。您是否手动尝试过这些命令?他们有结果吗?只需确认您的脚本正在检查正确的位置,并对您的shell脚本具有适当的访问权限即可@谢谢你的评论。是的,我手动运行了各个命令,没有错误。我只是在运行脚本时才发现查询失败。脚本看起来不错,我只是觉得一些变量没有正确设置(如env),可能您可以使用一些日志文件跟踪流。将分步执行重定向到日志,并可能查看是否在某个地方出错:)表名是否包含表所在的数据库?因为如果它正在查看错误的数据库,则会产生此错误。