【发布时间】:2020-09-07 23:48:51
【问题描述】:
在 linux 中使用命令“file <filename>”显示文件是否被压缩。对于驻留在 HDFS 文件系统中的文件,如何实现这一点?
file 620591952596020.gz
620591952596020.gz: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT)
file 269146229598756
269146229598756: ASCII text, with very long lines
这将帮助我避免压缩已作为通过 Apache Oozie 调用的 Shell 脚本的一部分压缩的文件 (GZip)。
#!/bin/bash
HDFS_IN_PATH=$1;
IS_COMPRESS_FILE=true;
for archiveDir in 'ARCHIVE1' 'ARCHIVE2' ;
do
HDFS_OUT_PATH=${HDFS_IN_PATH}/$archiveDir;
for ls_entry in $(hdfs dfs -ls -C "$HDFS_IN_PATH"/$archiveDir);
do
fileAbsPath=$ls_entry;
jobName=$(basename "${fileAbsPath}");
if (hadoop fs -test -f "$fileAbsPath") ; then
echo "Its not a directory ${fileAbsPath}"
continue;
fi
for file in $(hdfs dfs -ls -C "$fileAbsPath");
do
filename=$(basename "${file}");
if [ "$IS_COMPRESS_FILE" = true ]; then
if(<<***COMMAND TO CHECK HDFS FILE ${file} IS COMPRESSED***>>); then
echo "File Name: ${file} is already compressed.."
continue;
fi
hadoop fs -cat "${file}" | gzip | hadoop fs -put - "${file}".gz;
echo "Successfully compressed file..!";
fi
done
hadoop archive -archiveName "${jobName}".har -p "${HDFS_OUT_PATH}" "${jobName}" "${HDFS_OUT_PATH}";
done
done
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/a/21196774/5372462
-
Hadoop 中没有这样的命令,但我认为通过使用此链接unix.stackexchange.com/questions/151008/… 您可以自己实现它。只读取一些字节并确定它是否被压缩
标签: shell unix hadoop hdfs gzip