我开始使用hadoopfsimage来验证etl进程是否正确地加载了数据(具有适当的文件大小)。我分析图像,并通过 Impala 提供。我注意到,对于查询显示为加载错误的所有文件(filesize是错误的),fsimage中显示的文件大小是2147483647。
但是如果我用 hadoop fs -du
,我得到了不同的(正确的)文件大小。你知道为什么fsimage会显示这个数字吗?如果我得到一个新的图像,并再次搜索,该值仍然是不正确的,无论多少天过去我看。
编辑:获取图像的代码不是我开发的:
sudo ssh hostname 'hdfs oiv -p Delimited -i $(ls -t /dfs/nn/current/fsimage_* | grep -v md5 | head -1) -o /dev/stdout 2>/dev/null' | grep -v "/.Trash/" |sed -e 's/\r/\\r/g' | awk 'BEGIN { FS="\t"; OFS="\t" } $0 !~ /_impala_insert_staging/ && ($0 ~ /^\/user\/hive\/warehouse\/cz_prd/ ||
$0 ~ /^\/user\/hive\/warehouse\/cz_tst/) { split($1,a,"/"); db=a[5]; table=a[6]; gsub(".db$", "", table); } db && $10 ~ /^d/ {par=""; for(i=7;i<=length(a);i++) par=par"/"a[i] } db && $10 !~ /^d/ { par=""; for(i=7;i<=length(a) - 1;i++) par=par"/"a[i]; file=a[length(a)] } NR > 1 { print db,table, par, file, $0 }' | hadoop fs -put -f -
/user/hive/warehouse/cz_prd_mon_ma.db/hive_warehouse_files/fsimage.tsv
1条答案
按热度按时间iih3973s1#
尽管我很愚蠢,我还是把sql表定义类型化为int。
当我用
hadoop fs -cat command
,它看起来没问题,所以我把列改成了bigint,现在它正确地显示了大小。