0

我编写了一个小的 bash 脚本,它基本上有 2 个部分。第 1 部分:wget 第 2 部分:hadoop put

第1部分

wget -r -nH –cut-dirs=1 -R index.html -P /home/snoiniM/data/in/ https://www.someWebSite.com/folder/level2 --user=someUserName --password=P@ssword

下载的文件保存到 /home/snoiniM/data/in/。下载完文件后,我会立即告诉它从 /home/snoiniM/data/in/ 加载所有文件到 /place/in/hadoop/downloaded/

hadoop fs -put /home/snoiniM/data/in/ /place/in/hadoop/downloaded/

问题是,脚本执行 wget 部分,但不执行 hadoop put 部分。但是,当我注释掉 wget 行(没有其他变化)时,它运行 hadoop -put 部分没有错误。

为什么两个部分不能一起工作?我似乎无法弄清楚为什么。有人知道吗?

根据要求,这是我的实际代码。

代码片段

#! /bin/bash

temp_dir=/tmp/snoiniM
paypal_date=2013-07-01
hdfsdir=/warehouse/hive/f_paypal_agg #target destination

Log INFO "Downloading Paypal Data..."
wget -r -nH -nd -R index.html -A *$paypal_date.zip -P $temp_dir/paypal https://secure.paypaldata.com/gru/ --user=$paypal_user --password=$paypal_passwd

echo "I'll sleep for 2 seconds. Meanwhile, when you see this you know wget is done."
sleep 2
echo "All done. Proceed to hadoop part"

Log INFO "Clearing down any old/duplicate files or data in HDFS..."
for file in /tmp/snoiniM/paypal/*.zip
        do
#               hadoop fs -rm -f /warehouse/hive/f_paypal_agg/${file##*/}
                hadoop fs -rm -f /warehouse/hive/f_paypal_agg/paypal/${file##*/}
done

Log INFO "Loading all trackpal export zip files to HDFS..."
hadoop fs -put $temp_dir/paypal/ $hdfsdir
Log INFO "------------------------------------------------------------"
Log INFO "Paypal exports for $paypal_date loaded to HDFS."

rm -f $temp_dir/paypal/*$paypal_date.zip
Log INFO "Contents in $temp_dir/paypal cleaned and is ready for next run."

快速回顾一下:程序运行没有错误,但它在 wget 之后立即停止——我没有看到睡眠消息。但是,如果我随后注释掉 wget 并第二次运行它,它会进入睡眠部分,然后进入 hadoop 放置。

4

0 回答 0