獲取hdfs文件的詳細信息(創建時間等)


#!/bin/sh

feature_data_path='hdfs://xx/xy/xx/test_day_v2'
my_data_path='hdfs://xx/xy/xx/liukai_copy_test_day_v2'
today=`date +%Y%m%d`#顯示當前日期  20201216
hour=`date +%H` #顯示當前小時  8

echo "para today:$today hour:$hour"
#today:20201216   hour:hour

echo " ${feature_data_path}/${today}"
#hdfs://xx/xy/xx/test_day_v2/20201216

detail=$(hdfs dfs -ls ${feature_data_path}/${today}/_SUCCESS)#顯示 {feature_data_path}/${today}的生成時間等信息
#-rw-rw----+  3 username 用戶權限     0 2020-12-16 10:32    hdfs://xx/xy/xx/test_day_v2/20201216
"
參考資料:https://www.cnblogs.com/kongzhongqijing/p/3488884.html
1,第一個欄位代表文件的屬性,第一個欄位可以填充10個字母,
    1.1第一個字母代表文件類型 ”-”,普通文件. ”d”目錄,字母”d”,是dirtectory(目錄)的縮寫.

    1.2緊接着的3*3個字符分3組,各指示此文件的讀、寫、執行權限,對於owner、group、others而言。
     因為Linux是多用戶多任務系統,所以一個文件可能同時被許多人使用,所以我們一定要設好每個文件的權限,
     其文件的權限位置排列順序是(以-rwxr-xr-x為例):  rwx(Owner)r-x(Group)r-x(Other)  
     這個例子表示的權限是:使用者自己可讀,可寫,可執行;同一組的用戶可讀,不可寫,可執行;其它用戶可讀,不可寫,可執行。
2,第二個欄位表示文件個數。如果是文件的話,那這個數目自然是1了,如果是目錄的話,那它的數目就是該目錄中的文件個數了。

3,第三個欄位表示該文件或目錄的擁有者。若使用者目前處於自己的Home,那這一欄大概都是它的賬號名稱。

4,第四個欄位,表示所屬的組(group)。每一個使用者都可以擁有一個以上的組,不過大部分的使用者應該都只屬於一個組,只有當系統管理員希望給予某使用者特殊權限時,才可能會給他另一個組。

5,第五欄位,表示文件大小。文件大小用byte來表示,而空目錄一般都是1024byte,當然可以用其它參數使文件顯示的單位不同,如使用ls –k就是用kb萊顯示一個文件的大小單位,不過一般我們還是以byte為主。

6,表示最后一次修改時間。以“月,日,時間”的格式表示,如Aug 15 5:46表示8月15日早上5:46分

7,表示文件名
"
time=$(hdfs dfs -ls ${feature_data_path}/${today}/_SUCCESS|awk -F" " '{print $7}'| awk -F":" '{print $1"_"$2}')
"
-rw-rw----+  3 username 用戶權限     0 2020-12-16 10:32    hdfs://xx/xy/xx/test_day_v2/20201216/_SUCCESS

1,awk -F" " '{print $7}'

空格分隔,取第7個   10:32

2,| awk -F":" '{print $1"_"$2}
:分隔,取第一個和第二個用_連接  10_32

""
echo "detal:$detail hour:$hour time:$time"
echo "copy test data into $my_data_path"

hadoop fs -test -e ${my_data_path}/${today}/${time}

"
hadoop fs -test -e /hdfs_dir
if [ $? -ne 0 ]; then
    echo "Directory not exists!"
fi
hadoop fs -test -e 用於判斷HDFS目錄/文件是否存在,下一步檢測該命令的返回值,以確定其判斷結果。

$?表示上一條命令返回值,$0表示第一個參數,-ne表示不等於  -eq 等於
0存在  1不存在
"

if [ $? -ne 0 ]; then
    echo "Directory not exists!"
    hadoop fs -mkdir -p ${my_data_path}/${today}/${time}
    echo "${my_data_path}/${today}/${time} was made!!"
    echo " begin copy"
    hadoop fs -cp ${feature_data_path}/${today}  ${my_data_path}/${today}/${time}
    echo "end copy"
    else
    echo "${my_data_path}/${today}/${time}  exists!"
fi

  

獲取時間 天和小時
hadoop fs -ls == ll(hadoop 中無ll)
awk 分隔符和取值
判斷hadoop文件是否存在
$? -ne -eq 用法
hadoop fs -mkdir -p
hadoop fs -cp


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM