[英]run hadoop command in bash script
我需要在bash脚本中运行hadoop命令,它通过amazon S3上的一堆文件夹,然后将这些文件夹名称写入txt文件,然后进行进一步处理。 但问题是当我运行脚本时,似乎没有文件夹名称被写入txt文件。 我想知道是否hadoop命令运行时间过长而bash脚本没有等到它完成并继续进行进一步处理,如果是这样我怎么能让bash等到hadoop命令完成然后去做其他进程?
这是我的代码,我尝试了两种方式,既不起作用:
1.
listCmd="hadoop fs -ls s3n://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@$S3_BUCKET/*/*/$mydate | grep s3n | awk -F' ' '{print $6}' | cut -f 4- -d / > $FILE_NAME"
echo -e "listing... $listCmd\n"
eval $listCmd
...other process ...
2.
echo -e "list the folders we want to copy into a file"
hadoop fs -ls s3n://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@$S3_BUCKET/*/*/$mydate | grep s3n | awk -F' ' '{print $6}' | cut -f 4- -d / > $FILE_NAME
... other process ....
谁知道什么可能是错的? 并且最好使用eval函数或直接使用第二种方式运行hadoop命令
谢谢。
我宁愿在这种情况下eval
,更好的是将下一个命令附加到这个。 而且我宁愿将listCmd
分解为部分,这样你就知道grep
, awk
或cut
level没有任何问题。
listCmd="hadoop fs -ls s3n://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@$S3_BUCKET/*/*/$mydate > $raw_File"
gcmd="cat $raw_File | grep s3n | awk -F' ' '{print $6}' | cut -f 4- -d / > $FILE_NAME"
echo "Running $listCmd and other commands after that"
otherCmd="cat $FILE_NAME"
eval "$listCmd";
echo $? # This will print the exit status of the $listCmd
eval "$gcmd" && echo "Finished Listing" && eval "$otherCmd"
otherCmd
如果将只执行$gcmd
成功。 如果您需要执行太多命令,那么这会变得有点难看。 如果您大致知道需要多长时间,则可以插入sleep命令。
eval "$listCmd"
sleep 1800 # This will sleep 1800 seconds
eval "$otherCmd"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.