Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 用于检查HDFS文件是否已压缩的命令_Shell_Unix_Hadoop_Hdfs_Gzip - Fatal编程技术网

Shell 用于检查HDFS文件是否已压缩的命令

Shell 用于检查HDFS文件是否已压缩的命令,shell,unix,hadoop,hdfs,gzip,Shell,Unix,Hadoop,Hdfs,Gzip,在linux中使用命令“file”显示文件是否被压缩。对于驻留在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),该

在linux中使用命令“
file
”显示文件是否被压缩。对于驻留在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),该文件已经作为通过ApacheOozie调用的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
#/bin/bash
HDFS_IN_PATH=$1;
IS_COMPRESS_FILE=true;
“ARCHIVE1”“ARCHIVE2”中的archiveDir;
做
HDFS_OUT_PATH=${HDFS_IN_PATH}/$archiveDir;
对于$中的ls_条目(hdfs dfs-ls-C“$hdfs_in_PATH”/$archiveDir);
做
fileAbsPath=$ls\u条目;
jobName=$(basename“${fileAbsPath}”);
if(hadoop fs-test-f“$fileAbsPath”);然后
echo“它不是目录${fileAbsPath}”
继续;
fi
对于$(hdfs dfs-ls-C“$fileAbsPath”)中的文件;
做
filename=$(basename“${file}”);
如果[“$IS_COMPRESS_FILE”=true];然后
if();然后
echo“文件名:${File}已被压缩..”
继续;
fi
hadoop fs-cat“${file}”gzip | hadoop fs-put-“${file}”.gz;
echo“已成功压缩文件…”;
fi
完成
hadoop归档文件-archiveName“${jobName}”.har-p“${HDFS\u OUT\u PATH}”${jobName}”${HDFS\u OUT\u PATH}”;
完成
完成
在Linux中没有类似于
文件的命令。相反,读取扩展可能会起作用:
if[“$file”==“*.gz”]

其他需要用python或Java编码的选项有:

  • 管理
    ZipFileInputFormat
    ,以确保zip文件是真正的压缩内容
  • PySpark似乎有一个选项,可以以
    zipfile.zipfile(内存中的数据,“r”)
    的形式使用

这可能会有所帮助:Hadoop中没有这样的命令,但我想通过使用此链接,您可以自己实现它。仅读取一些字节并确定其是否已压缩