由于insight的数据需要每天同步,所以需要每天定时同步日志到集群的HDFS。所以写了个简单的脚本进行同步。脚本如下
前提是配置好ssh免密码
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
REMOTE_USER=username REMOTE_HOST=example.com REMOTE_SSH_PORT=22 REMOTE_LOG_PATH=/edx/var/log/tracking LOCAL_TMP_LOG_PATH=/tmp/insights/bistu HDFS_HOST=hadoop1.example.com HDFS_PORT=9000 HDFS_ROOT=hdfs://$HDFS_HOST:$HDFS_PORT HDFS_LOG_PATH=$HDFS_ROOT/edx-analytics-pipeline/bistu/data HDFS_PATH=/edx/app/hadoop/hadoop/bin/hdfs YESTERDAY=`date -d"1 day ago" +%Y%m%d` PATTERN=tracking.log-$YESTERDAY-* if [ ! -d $LOCAL_TMP_LOG_PATH ]; then mkdir -p $LOCAL_TMP_LOG_PATH chmod 777 $LOCAL_TMP_LOG_PATH else rm -rf $LOCAL_TMP_LOG_PATH/* fi scp -P $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST:$REMOTE_LOG_PATH/$PATTERN $LOCAL_TMP_LOG_PATH $HDFS_PATH dfs -put $LOCAL_TMP_LOG_PATH/$PATTERN $HDFS_LOG_PATH rm $LOCAL_TMP_LOG_PATH/$PATTERN |
以上脚本放入集群hdfs的NameNode主机上,执行crontab -e
编辑定时任务如下
1 0 * * * /bin/bash /path/sync.sh
这样每天凌晨00:01会定时同步前一天的日志到集群,便于定时执行分析任务。
另外,在初始化好/var/lib/analyticstasks后, 为了节省时间把整个文件夹直接复制到集群并改名为analytics-bistu。但是venv虚拟环境下的变量并没有更改,所以更改所有venv/bin下python解释器,除了activate文件在中间有个环境变量,其他的都在第一行。可以用sed批量替换。。。
scp不会复制软连接,所以可以考虑使用rsync。。。具体命令还没写=-=
0 Comments