我编写了一个小的 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 放置。