Я хочу переместить n количество файла, находящегося в каталоге Hadoop к Локальной файловой системе на основе метки времени. Сценарий:
Я хочу быть созданным сценарий автоматизации, который делает эту задачу
предпочтенный сценарий оболочки использования
Согласно вышеупомянутому сценарию, чтобы сделать эту задачу, существуют различные пути, мы можем сделать это на основе метки времени или путем отслеживания обработанный файл в некотором файле журнала
Здесь я использую подход, в котором я буду отслеживать название файла, который был обработан т.е. перемещен от 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