Linux

通過使用 shell 腳本過濾修改日期,將文件從 hdfs 文件夾複製到另一個 hdfs 位置

  • July 19, 2019

我的 hdfs 位置有 1 年的數據,我想將過去 6 個月的數據複製到另一個 hdfs 位置。是否可以直接從 hdfs 命令複製 6 個月的數據,還是我們需要編寫 shell 腳本來複製過去 6 個月的數據?

我已經嘗試過 hdfs 命令來執行此操作,但沒有奏效。

我嘗試使用下面的 shell 腳本,它工作正常,直到創建 TempFile 但拋出錯誤

$ sh scriptnew.sh
scriptnew.sh: line 8: syntax error: unexpected end of file

並且腳本不會進一步執行。

下面是我使用的shell腳本。

#!/bin/bash
hdfs dfs -ls /hive/warehouse/data.db/all_history/ |awk 'BEGIN{ SIXMON=60*60*24*180; "date +%s" | getline NOW } { cmd="date -d'\''"$6" "$7"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-SIXMON; if(WHEN > DIFF){print $8}}' >> TempFile.txt
cat TempFile.txt |while read line
do
   echo $i
   hdfs dfs -cp -p $line /user/can_anns/all_history_copy/;
done

可能是什麼錯誤以及如何解決這個問題?

要將 6 個月的文件從 hdfs 位置複製到另一個位置,我們可以使用以下腳本。

腳本應該從您的本地 linux 位置執行。

#!/bin/bash
hdfs dfs -ls /hive/warehouse/data.db/all_history/ |awk 'BEGIN{ SIXMON=60*60*24*180; "date +%s" | getline NOW } { cmd="date -d'\''"$6" "$7"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-SIXMON; if(WHEN > DIFF){print $8}}' >> TempFile.txt
cat TempFile.txt |while read line
do
  echo $i
  hdfs dfs -cp -p $line /user/can_anns/all_history_copy/;
done

> > > > > > 第 2 行:我們正在將最長 180 天的文件列表複製到 TempFile。然後我們遍歷這個 Temp 文件,如果找到匹配項,則複製該文件。 > > > > > > > > >

如果您是從 windows 編寫腳本並複製到 linux 機器,有時它可能無法顯示語法錯誤。為避免輸入錯誤,將腳本複製到 linux 機器本地路徑後執行以下命令。 sed -i ’s/\r//’ 然後執行腳本 >>> sh FileName.sh

引用自:https://unix.stackexchange.com/questions/530431