一、准备工作:
1.需要的软件:java安装jre1.8 spark-2.2.0.tar.gz(已配置好)
2.运行工程需要的东西:maven工程打的jar包 --prodmge-mapreduce-0.0.1-SNAPSHOT.jar,运行工程需要的lib,xxx.sql
二、安装spark和配置spark的变量:主要是参考的linux下spark安装安装及环境配置_weixin_46995451的博客-优快云博客
安装时需要注意spark版本需要跟项目中使用的版本一致,否则会出错。
修改环境变量:vim /etc/profile(项目中不需要修改,暂时忽略这一步)
添加完后,source /etc/profile
运行完后只有当前窗口可直接在任何位置使用spark的命令,重启后才全部起作用。
三、使用命令运行工程
1.在spark-2.2.0/bin目录下执行 不带配置文件
./spark-submit --driver-class-path /home/sy/spark/mysql-connector-java-5.1.6-bin.jar --jars $(files=(/home/sy/single-node/3.docker-service-image-build/lib/*.jar); IFS=,; echo "${files[*]}") --class com.XXX.ProdmgeDataStastics --master local /home/sy/single-node/3.docker-service-image-build/test.jar
2.配置环境变量后,直接用spark-submit命令
spark-submit --driver-class-path /home/sy/spark/mysql-connector-java-5.1.6-bin.jar --jars $(files=(/home/sy/single-node/3.docker-service-image-build/lib/*.jar); IFS=,; echo "${files[*]}") --class com.XXX.ProdmgeDataStastics --master local /home/sy/single-node/3.docker-service-image-build/test.jar
四、将命令和配置写到shell脚本中
vim data.sh
添加如下内容到该脚本
#!/bin/bash
set mysql-host-mapreduce=192.168.1.242:3306
set mysql-database-XXX=XXX
set mysql-username=root
set mysql-passwd=xxxxx
cd /home/sy/spark/spark-2.2.0/bin && ./spark-submit --driver-class-path /home/sy/spark/mysql-connector-java-5.1.6-bin.jar --jars $(files=(/home/sy/single-node/3.docker-service-image-build/lib/*.jar); IFS=,; echo "${files[*]}") --class com.bjtds.ProdmgeDataStastics --master local /home/sy/single-node/3.docker-service-image-build/test.jar
chmod +x data.sh
五、使用shell脚本自动添加定时任务到crontab
vim execCrontab.sh
添加内容:
#!/bin/sh
crontab -l > conf && echo "* * * * * /bin/bash /home/sy/spark/test.sh>>/home/sy/spark/prodmgeDataStastics.log 2>&1 " >> conf && crontab conf && rm -f conf
chmod +x execCrontab.sh //设置权限
./execCrontab.sh //执行脚本
执行完后,查看
crontab -e //编辑查看crontab,原来的命令不删除,追加到后面。
六、出现过的问题总结
1.ip地址不对,项目中配置的ip跟运行中的ip不一致,出现这个错误。
最后找到原因是项目代码中配置的mysql-host,系统中mysql已经配置了ip,解决办法:改了项目代码中mysql-host为mysql-host-xxx。
2.命令中没有mysql驱动报错spark-submit --jars $(files=(/home/sy/single-node/3.docker-service-image-build/lib/*.jar); IFS=,; echo "${files[*]}") --class com.bjtds.ProdmgeDataStastics --files /home/sy/spark/prodmgeDataStastics.xml --master local /home/sy/single-node/3.docker-service-image-build/test.jar
添加驱动后spark-submit --driver-class-path /home/sy/spark/mysql-connector-java-5.1.6-bin.jar --jars $(files=(/home/sy/single-node/3.docker-service-image-build/lib/*.jar); IFS=,; echo "${files[*]}") --class com.bjtds.ProdmgeDataStastics --files /home/sy/spark/prodmgeDataStastics.xml --master local /home/sy/single-node/3.docker-service-image-build/test.jar正确运行。
3、crontab定时执行
crontab -e 进入编辑状态,加入最后一行内容
service cron restart进行重启。
但是发现找不到spark-submit命令,spark已经配置了环境变量,仍然在crontab执行shell脚本时出现找不到问题,于是查找原因
改完为如下图命令,可正确运行。
先清空一下日志文件
日志文件也正常输出