編寫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上編寫的,出現空格等問題!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM