如果将文件放到服务器中,那么当遇到服务器下线的时候,之前所有做过的JOB都会面临修改的问题,如何避免这种情况呢?
小白最近遇到这样的问题,以下是解决方案。
将服务器上的文件上传的HDFS上,在shell脚本调用时,再get到当前路径,就可以了。下面就讲一下,如何操作:
1.首先,在HDFS上创建一个自己使用的大目录
#命令:
hdfs dfs -mkdir hdfs://.../.../test1
2.将chen下的所有文件都上传到HDFS上面创建的目录下
hdfs dfs -put /.../.../chen/* hdfs://.../.../test1
3.由于每次get一个目录,如果test1下有很多文件或者包含大文件的话,就不适合每次get,因此,将要用的几个小文件copy到另外一个文件夹下,以便每次get到当前路径
hadoop fs -cp hdfs://.../.../test/csv2xls.py hdfs://.../.../test2
4.当2或者3命令执行后,可以先看下HDFS下是否上传成功或者copy成功
hdfs dfs -ls hdfs://.../.../test1
5.前面步骤准备就绪后,就可以使用shell脚本调用python了
#首先,从hdfs上将要用的文件夹get到当前路径
hdfs dfs -get hdfs://.../.../test ./
#获取当前路径
file_path=`cd $(dirname $0); pwd -P`
#下面是要使用的文件名
python_name="csv2xls.py"
file_name_t="ordernum_1.csv"
file_name_y="ordernum_2.xls"
hive -e "
select
sum(a) as a,
count(b) as b,
sum(c) as c
from table
;" > $file_path/$file_name_t
python2.7 $file_path/$python_name $file_path/$file_name_t $file_path/$file_name_y
以上,就是完整的使用HDFS路径下的文件,调用python脚本了