如何解决检查HDFS文件是否已压缩的命令
在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
这将帮助我避免压缩文件(GZip),该文件已经作为通过Apache Oozie调用的Shell脚本的一部分进行了压缩。
#!/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
解决方法
HDFS在Linux中没有类似file
的命令。相反,可以阅读扩展名:if [ "$file" == "*.gz" ]
其他需要用python或Java编码的选项是:
- 管理
ZipFileInputFormat
以确保zip文件是真实的压缩内容。 - PySpark似乎有一个选项,可以以
zipfile.ZipFile(in_memory_data,"r")
的形式使用。
两者都放在this link中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。