inotify flock rsync linux异步同步文件夹
spark提交jar包时候会传到所有节点work文件夹,提交的jar包占用主从服务器空间很大,
所以有两种办法:
1.将jar包传到hdfs(hdfs没玩熟,以后研究)
2.jar包传到主节点,同步到从节点
找了一下资料inotify可以监听文件,但是使用时会有重复通知,引起多次重复同步,
此脚本使用flock可以在设定的时间内只响应一次同步,可以改进的地方希望大家留言.
第一次shell勿喷~.~
#!/bin/bash #需要分发的slavehost hosts=(dataSlave31 dataSlave32 dataSlave33 dataSlave34 dataSlave35) listenDir='/usr/local/spark/lib/' #同步时忽略10秒内其他请求 function synclock(){ { flock -n 200 if [ $? -eq 1 ]; then echo " skip file -> $1" exit fi sleep 10 #同步 for host in ${hosts[@]} do echo "rsync -a --delete ${listenDir} hadoop@$host:${listenDir}" rsync -a --delete ${listenDir} hadoop@$host:${listenDir} if [ $? -eq 0 ];then echo "syn success";else echo "syn failed!";fi; done } 200<> /tmp/flock_spark.lock } /usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ${listenDir} |while read file do synclock "$file" & done
最后修改spark-default.properties
spark.driver.extraClassPath /paths/toyourassembly.jar
spark.executor.extraClassPath /paths/toyourassembly.jar
或者 spark-submit时候添加 --jar /paths/toyourassembly.jar
实验结果,spark的work文件夹下只保存运行的主jar文件,没有保存toyourassembly.jar,从而节省了依赖包的空间.
//下一步,尝试关闭或者缩小sprk-work文件夹记录