Файл копии от HDFS до Локальной файловой системы на основе метки времени Используя Сценарий оболочки

Я хочу переместить n количество файла, находящегося в каталоге Hadoop к Локальной файловой системе на основе метки времени. Сценарий:

  1. предположите, что я делаю в первый раз переход от HDFS до Локальной файловой системы, таким образом, не будет никакого файла в Локальной файловой системе также. в этом случае весь файл, находящийся в каталоге HDFS, будет перемещен в локальную файловую систему
  2. Теперь, если новый файл прибудет в каталог HDFS, и я должен снова переместить файл в Локальную файловую систему, в этом случае, последний файл, который еще не обработал, то они только будут переданы, на основе метки времени.

Я хочу быть созданным сценарий автоматизации, который делает эту задачу

предпочтенный сценарий оболочки использования

0
задан 23 July 2018 в 03:14

1 ответ

Согласно вышеупомянутому сценарию, чтобы сделать эту задачу, существуют различные пути, мы можем сделать это на основе метки времени или путем отслеживания обработанный файл в некотором файле журнала

Здесь я использую подход, в котором я буду отслеживать название файла, который был обработан т.е. перемещен от HDFS до локальной файловой системы.

если я запущу скрипт в первый раз, то файл, который находится в HDFS, будет перемещен в Локальную файловую систему и проверит, присутствует ли название файла в Processedfile.txt или нет. Если это не будет затем файл, то будет перемещен в Локальную файловую систему и сделает запись в Processedfile.txt. Если имя файла присутствует в Processedfile.txt, чем не переместится в локальную файловую систему.

Код:

# Local file system location
path=/home/cloudera/test/

#processedfile.txt location
logpath=/home/cloudera/test/processedfile.txt

#HDFS file location
hdfspath=/user/test/

# to get list of files from HDFS dir
for filename in `hadoop fs -ls ${hdfspath}*|  awk '{print $NF}'  | tr '\n' ' '`
do

# get file name
    name=$(basename $filename)

# check filename is present in processedfile.txt or not 
            if grep -Fxq $name $logpath;
        then
        echo $name is present in local file system
        else

#copy file from HDFS to Local File System.      
          hadoop fs -copyToLocal $filename $path
          echo "$name" >> "$logpath"
        fi
done
echo prosessing completed   
1
ответ дан 28 October 2019 в 07:17

Другие вопросы по тегам:

Похожие вопросы: