编写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上编写的,出现空格等问题!

原文地址:https://www.cnblogs.com/zyanrong/p/10804163.html