检测hdfs 文件是否存在并获取文件列表、大小、创建时间的shell开发

本文介绍了一个名为check_hdfs_dir.sh的Shell脚本,用于检查HDFS路径是否存在,并获取该路径下文件的大小、文件夹数量、文件数量和创建时间。脚本通过调用hadoop fsck和hadoop fs -ls命令,解析输出结果来获取相关信息。

命名 check_hdfs_dir.sh

运行:

sh check_hdfs_dir.sh /usr/data/000/

代码如下:

#!/bin/bash

 

lujing=$1

echo $lujing

 

command="hadoop fsck "${lujing}" > hadoop_fsck.txt"

eval $command

val=`awk '/Total size/ {print $3}' hadoop_fsck.txt`

 

#val=97987999

 

val_m=$[1024*1024]

val_k=$[1024]

val_g=$[1024*1024*1024]

val_t=$[1024*1024*1024*1024]

 

if [ `expr $val / $val_t` -gt 1 ]

then

echo "文件大小`expr $val / $val_t`t"

elif [ `expr $val / $val_g` -gt 1 ]

then

echo "文件大小`expr $val / $val_g`g"

elif [ `expr $val / $val_m` -gt 1 ]

then

echo "文件大小`expr $val / $val_m`m"

elif [ `expr $val / $val_k` -gt 1 ]

then

echo "文件大小`expr $val / $val_k`k"

fi

 

val1=`awk '/Total dirs/ {print $3}' hadoop_fsck.txt`

echo "文件夹数aa:$val1"

 

val2=`awk '/Total files/ {print $3}' hadoop_fsck.txt`

echo "文件数bb:$val2"

 

val3=`awk '/Total blocks (validated)/ {print $3}' hadoop_fsck.txt`

echo "总块数cc:$val3"





 

val_k=$[1024]

val_g=$[1024*1024*1024]

val_t=$[1024*1024*1024*1024]

val_m=$[1024*1024]

 

command="hadoop fs -ls "${lujing}" > hadoop_ls.txt"

eval $command

 

command="grep "${lujing}" hadoop_ls.txt | head -1 | awk '{print \$6}'"

echo "----****"

echo $command

chuangjianshijian=`eval $command`

echo "创建时间ddd=${chuangjianshijian}"

 

while read line

do

    #if [true]

    if [ ${line:0:5} == "Found" ]

    then

        echo "首行略过"

    else

        

        echo $line | awk -F ' ' '{print $5,$6,$7,$8}' | while read daxiao day time mulu

        do

            echo daxiao=$daxiao day=$day time=$time mulu=$mulu

            length=${#lujing}

            #echo -n ${lujing} | wc -c

            file_name=${mulu:length}

            echo 文件名=$file_name

            #command="hadoop fs -cat hdfs://10.87.49.221:8020"${mulu}" | wc -l | sed -n '1p'"

            command="hadoop fs -cat "${mulu}" | wc -l | sed -n '1p'"

            hangshu=`eval $command`

            #hangshu = $(hadoop fs -cat $mulu | wc -l)

            echo "行数:$hangshu"

            echo length=$length

            

            val=$daxiao

 

            if [ `expr $val / $val_t` -gt 1 ]

            then

               echo "文件大小`expr $val / $val_t`t"

            elif [ `expr $val / $val_g` -gt 1 ]

            then

             echo "文件大小`expr $val / $val_g`g"

            elif [ `expr $val / $val_m` -gt 1 ]

            then

             echo "文件大小`expr $val / $val_m`m"

            elif [ `expr $val / $val_k` -gt 1 ]

            then

             echo "文件大小`expr $val / $val_k`k"

            fi

            echo "上传时间:day:$day,time:$time"

        done

        

    fi

done < hadoop_ls.txt

<think>好的,我需要回答用户关于如何查看HDFS文件元信息的问题,包括权限、大小创建时间等。首先,我应该回忆HDFS相关的命令,特别是与文件元数据相关的。 记得HDFShdfs dfs -ls命令可以列出文件的基本信息,但用户需要更详细的元数据。通常,-ls命令会显示权限、所有者、大小、修改时间,但创建时间可能不在默认输出中。不过HDFS本身是否记录创建时间呢?可能需要查看NameNode的元数据,或者使用其他命令参数。 根据引用[2]提到的HDFS文件大小配置,用户可能还想了解块大小信息,但问题主要围绕元信息,如权限、大小创建时间。需要确认hdfs dfs -ls的输出是否包含这些信息。例如,-ls的输出通常包括修改时间而非创建时间,所以可能需要其他方法获取创建时间。 另外,HDFS的WebHDFS接口或FS Shell的其他命令可能提供更详细的信息。比如,使用hdfs dfs -stat命令可以指定格式输出不同的元数据,包括访问时间、修改时间、块大小等。例如,-stat %b可以获取文件大小(字节),-stat %r获取权限的八进制表示,-stat %y获取修改时间。但创建时间可能没有直接参数,可能需要通过其他途径。 用户的问题中提到“创建时间”,而HDFS默认可能不记录文件创建时间,而是记录访问时间和修改时间。需要确认这一点。如果确实没有创建时间,可能需要解释这一点,提供替代方案,如查看修改时间。 总结可能的步骤: 1. 使用hdfs dfs -ls命令查看基本元数据。 2. 使用hdfs dfs -stat命令按格式输出特定信息。 3. 解释各输出项的含义,包括权限、大小时间戳。 4. 说明创建时间可能不可用,建议使用修改时间作为替代。 需要确保命令语法正确,给出示例。例如: - hdfs dfs -ls -h /path/to/file 显示人类可读的大小。 - hdfs dfs -stat "%F %u %g %b %y" /path/to/file 输出类型、用户、组、大小、修改时间。 同时,需要引用提供的参考资料,比如引用[2]中关于块大小的配置,可能在解释文件大小时提到块大小的影响,但用户的问题主要关注元信息,所以可能不需要深入块大小,除非用户特别询问。 最后,生成相关问题,如如何查看块信息、修改权限等,帮助用户进一步探索。</think>在HDFS中查看文件的元信息可以通过以下命令实现,具体操作步骤如下: --- ### **1. 使用`hdfs dfs -ls`查看基础元信息** 命令格式: ```bash hdfs dfs -ls -h <文件路径> ``` **示例输出**: ``` -rw-r--r-- 3 hadoop supergroup 256.5 M 2023-10-05 14:30 /test/data.txt ``` **字段解析**: - **`rw-r--r--`**:读写权限(用户/组/其他用户)[^2]。 - **`3`**:文件的副本数(由HDFS的复制因子控制)[^1]。 - **`hadoop supergroup`**:文件所有者及所属用户组。 - **`256.5 M`**:文件大小(`-h`参数表示人类可读格式)。 - **`2023-10-05 14:30`**:最后修改时间HDFS默认不记录创建时间,但修改时间可通过其他方式推导)。 --- ### **2. 使用`hdfs dfs -stat`获取详细信息** 通过指定格式符输出特定元数据: ```bash hdfs dfs -stat "权限:%A 用户:%u 组:%g 大小:%b字节 块大小:%o 最后修改时间:%y" <文件路径> ``` **示例输出**: ``` 权限:rw-r--r-- 用户:hadoop 组:supergroup 大小:268435456字节 块大小:134217728 最后修改时间:2023-10-05 14:30:00 ``` **参数说明**: - **`%A`**:权限符号(如`rw-r--r--`)。 - **`%u/%g`**:文件所有者/用户组。 - **`%b`**:文件大小(字节)。 - **`%o`**:HDFS大小(默认128MB)。 - **`%y`**:最后修改时间(格式`YYYY-MM-DD HH:mm:ss`)。 --- ### **3. 关于创建时间的说明** HDFS默认**不直接记录文件创建时间**,但可通过以下方法间接获取: 1. **通过修改时间推断**:若文件未被覆盖,修改时间创建时间。 2. **审计日志**:需启用HDFS审计日志功能(配置`log4j.properties`),从日志中提取创建事件。 --- ### **4. 查看副本数与存储策略** ```bash hdfs fsck <文件路径> -files -blocks -locations ``` 输出包含文件块数量、副本分布及存储节点信息[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值