编写jar的运行脚本(win和liunx环境)
Windows 环境中: bat 文件的写法
1. 任何位置都可以新建一个文件夹 (例如:D:/test),将项目的 pom 文件复制进来
2. 将已写好的项目打包, 把生成的 jar 文件复制到 test 里,
3. 再在 test 下新建 lib 文件夹,在 test 里执行 cmd 命令下载工件的所有的依赖的 jar 包,命令内容:
mvn -DoutputDirectory=./lib
-DgroupId=com.txj
-DartifactId= handeworkcheck
-Dversion=1.0-SNAPSHOT
以上的内容分别是:项目组名; 项目名;版本号
4. 写 runner.bat 文件,内容如下(按颜色一致):
java -cp handeworkcheck.jar;./lib/activation-1.1.jar;./lib/apacheds-i18n-2.0.0-M15.jar;./lib/zkclient-0.8.jar;./lib/zookeeper-3.4.6.jar com.mine.calllog.consumer.HbaseConsumer
内容分别有 4 部分:
第一: java -cp
第二:包名
第三:所有 lib 下依赖的包名
第四:运行的主类 (全类名)
注意: jar 之间用 ; 分开。最后一个 jar 与运行的类用空格分开
---------------------------------------------------------------------------------------
liunx 环境中:sh 文件
生成 jar 包,部署到 centos 执行
--------------------------------
1. 使用 maven 生成 jar 文件
和上面的 1、2、3、4 步骤一样
2. 部署到 centos
3. 执行
$>mkdir /home/centos/calllog
java -cp xxx.jar 全类名: 依赖包 参数 1...
4. 创建 centos 上的执行脚本
[calllog.sh]
#!/bin/bash
java -cp Calllog.jar com.mine.callloggen.App :./lib/activation-1.1.jar:./lib/apacheds-i18n-2.0.0-M15.jar /home/centos/calllog/calllog.log
5. 修改权限
$>chmod a+x calllog.sh
6. 执行脚本
$>cd ~/calllog
$>./calllog.sh
----------------------------------------------------------------------------------------------
hadoop 的运行脚本:sh 文件
------------------------------------------- 脚本一
#!/bin/bash
#到该目录下
cd ${dirname}
jarpath=$(dirname $PWD)
mainclass=com.txj
echo ${jarpath}
#计算昨天
yesterday=$(date --date='1 days ago' +'%Y%m%d')
echo ${yesterday}
#HDFS 上上传文件
HDFS_PATH=${dirname $PWD}/b.txt
#设置用户
export HADOOP_USER_NAME=admin
#上传文件
#hdfs dfs -mkdir -p /user/b
hdfs_path1=/user/b
hdfs dfs -rm -r ${hdfs_path1}
hdfs_path2=hdfs://192.168.187.30/user/a/b.txt
hadoop fs -test -e ${hdfs_path2}
if [$? -ne 0];then
echo "success"
else
echo "failed"
fi
----------------------------------------- 脚本二
参考: https://blog.csdn.net/zp_Fl/article/details/83895230
cd $(dirname $0)
jarPath=$(dirname $PWD)/work/dataAnalysisPlat.jar
hbase_zk=192.168.187.33
reducer_num=40
mainclass=a.App
mainClassName=b.ToHdfsApp
mainClassNameStep2=c.CntApp
# logDate="20190221 20190222"
for date in $logDate;
do
hbase_table_name="t_gps_std_"${date}
hdfs_output_step1=hdfs://192.168.187.33/data/gps_std_hbase2hdfs/${date}
hadoop fs -test -e ${hdfs_output_step1}'/_SUCCESS'
if [$? -ne 0];then
hadoop fs -rm -r ${hdfs_output_step1}
hadoop jar ${jarPath} ${mainclass} \
-M ${mainClassName} \
-Dmapreduce.reducer.num=${reducer_num} \
-Dhbase.source.zk.quorum=${hbase_zk} \
-Dhbase.source.nameserver.address=${hbase_zk} \
-Dhbase.source.table=${hbase_table_name} \
-Dmapreduce.hdfs.output=${hdfs_output_step1} \
-Dconf.log.date=${date} \
-Dmapreduce.reduce.memory.mb=5120 \
-Dmapreduce.input.fileinputformat.split.minsize=1073741824
hadoop fs -test -e ${hdfs_output_step1}'/_SUCCESS'
if [$? -ne 0];then
echo "calc ${hdfs_output_step1} failed" >> runlog.log
else
echo "calc ${hdfs_output_step1} success" >> runlog.log
fi
else
echo "calc ${hdfs_output_step1} success"
fi
done
//---------------------------------------- 以下运行 jar 时出现错误 ClassNotFoundException-------------
解决 1(常用,不同环境都能用):
打包时所用的所有 jar 整体打包,
执行时使用:
java -cp (详见:)
解决 2
将所有的包以及第三包保证都在 classpath 下,可以参考如下命令
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cloudera/parcels/CDH/jars/*
//---------------------------------------- 有时运行脚本报错-------------
查看脚本是否因为在 Windows 上编写的,出现空格等问题!