【工作日记】集群进程管理yarn + 书写spark-submit 脚本

一、集群进程管理yarn

集群运行spark、hadoop程序,可以通过UI界面查看进程状态,如图所示,可登陆到界面查看程序运行状态。

 

【工作日记】集群进程管理yarn + 书写spark-submit 脚本

可以通过application ID查看程序的日志信息以及输出信息,如图,查看logs

【工作日记】集群进程管理yarn + 书写spark-submit 脚本

【工作日记】集群进程管理yarn + 书写spark-submit 脚本

【工作日记】集群进程管理yarn + 书写spark-submit 脚本

2、使用yarn命令查看进程状态

2.1、kill掉不需要的整个shell程序,(kill掉某个进程进到UI界面的ApplicationMaster,点击kill的即可以),具体命令

yarn application -kill 你的application_id(application_id可通过上诉的方式找到)

2.2、查看spark程序日志信息的命令(其他类型程序应该也可以)

(由于程序跑完,一般日志信息就不存在了,可以把集群端的日志信息复制到本地服务器上查看)

yarn logs -applicationId application_1586245712370_490955(具体的任务ID) > application_1586245712370_490955(存储到本地的文件名字)

然后less application_1586245712370_490955打开,然后在命令行先输入一个"/",然后输入你要搜索的比如Exception,你就可以找到一些异常的地方。

二、spark、hadoop程序提交脚本

1、spark-shell命令脚本(.sh)

打开spark-shell交互命令行的脚本:

spark-shell --master yarn --name zlc-spark-shell --queue "marvel.service"

--executor-memory 12g --executor-cores 4 --num-executors 128 --driver-memory 10g --conf spark.sql.orc.enabled=true

--conf spark.sql.hive.convertMetastoreParquet=false

--master yarn这个表示用集群跑
--queue "marvel.service"指定集群哪个队列跑
--executor-memory 12g每个集群的机器给12G的内存
--num-executors 32总共需要32台机器
--executor-cores 4每个机器需要多少核并行跑
--driver-memory 10gdriver机器的内存


2、spark-submit提交spark程序(一般用于提交运行在本地用maven打好jar包的)

对于一般的只有一个主要jar包的情况:

#!/bin/bash
#set -x

#if [ $# != 1 ] ; then
#    echo "need type: pc/mb"
#    exit 1
#fi
#data_type=$1

#param_name=`python gen_params.py ${data_type}`
#hdfs_param=/user/mz_supertool/apps/test/model_service/weekly_compute/train/params/${param_name}
#hadoop fs -put params/${param_name} ${hdfs_param}
hdfs_param=程序中使用的参数文件路径json文件(一般提交到hdfs上)
#ct=`echo ${param_name} | awk -F_ '{print $2}' | awk -F. '{print $1}'`
#log=logs/${data_type}_${ct}.log

JAR=task2_train-1.0-SNAPSHOT.jar(jar的路径,如果和脚本在一个目录下,可以直接写jar包名字)
CLASS=TrainModel(指定好入口类名)(上述的的JAR和CLASS、hdfs也可以直接在下面的运行命令参数行写,不一定这样写,可参照下面样例)

 

/usr/lib/spark/spark-2.4.1-bin-hadoop2.7/bin/spark-submit \(选择你的spark下面的spark-submit的路径)
    --master yarn \
    --deploy-mode cluster \
    --queue "marvel.service" \
    --executor-memory 14g \
    --executor-cores 2 \
    --num-executors 200 \
    --driver-memory 12g \
    --name task2_train_zlc \
    --conf spark.sql.autoBroadcastJoinThreshold=1073741824 \
    --conf spark.sql.broadcastTimeout=600 \
    --conf spark.sql.shuffle.partitions=600 \
    --conf spark.default.parallelism=500 \
    --conf spark.sql.bigdata.useExecutorBroadcast=true \
    --class $CLASS \ (指定的class,传过来)
    $JAR ${hdfs_param} \(上面写好的jar包和参数文件)
#> ka_test0331.log 2>&1(这里可以去掉注释,则为程序运行的日志信息,不过一般spark程序会有时不产生日信息)

对于存在多个jar包,其中部分的jar包为依赖包的命令:

JAR=lookalike-1.0-SNAPSHOT.jar(运行的主jar包)
CLASS=mm_lookalike(class)
input_hdfs=/user/dmp_ids/discovery/fileUploadDir/fff8ab473b4bedd81af22f1437afd3b4/idfa1(接下来的所有的参数都是在脚本中逐个传入到命令行)
dmp_data=/user/hive/....
output_hdfs=/user/...
outvalue=0.5
appname="  "
platform="mobile"
idtype=" "
withscore="true"
taskid="2"
outtype="value"
#mediaid(选填)

../spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
        --master yarn-cluster \
        --executor-memory 8G \
        --executor-cores 4 \
        --num-executors 220 \
        --driver-memory 12g \
        --name mm-lookalike \
        --class $CLASS \
        --jars /home/hive-hcatalog-core-1.2.1.jar, /home/mysql-connector-java-5.1.30.jar \(其中两个依赖JAR包)
        --properties-file /home/dmp_ids/spark-1.6.1-bin-hadoop2.6/conf/spark-defaults.conf \ (配置信息。可以不写)
        $JAR ${input_hdfs}  \(将上面参数逐个传入,程序中可以获取,,例如args(0))
        ${dmp_data} \
        ${output_hdfs} \
        ${outvalue} \
        ${appname} \
        ${platform} \
        ${idtype} \
        ${withscore} \
        ${taskid} \
        ${outtype} \

> ka_test.log 2>&1

PS:注意每个行之后有“\”

3、hadoop中的MR程序的提交jar包的命令脚本

1、使用json文件提交配置参数的情况(类似上述spark-submit第一个)

#!/bin/bash
set -x

log_version=`date +%Y%m%d%H%M%S`(时间)

JAR=../feature-1.1-SNAPSHOT.jar(jar路径)
CLASS=FeatureExtractJob
PARAM_FILE=/user/...(参数文件路径,一般在hdfs,在程序使用conf.get("param_file")调用)

hadoop jar $JAR $CLASS \
-Dmapreduce.job.queuename=marvel.dataplus \
-Dmapreduce.map.memory.mb=5120 \
-Dmapreduce.map.java.opts="-Xmx4500m -XX:+HeapDumpOnOutOfMemoryError" \
-Dmapreduce.reduce.memory.mb=5120 \
-Dmapreduce.reduce.java.opts="-Xmx4500m -XX:+HeapDumpOnOutOfMemoryError" \
-Dmapreduce.job.reduces=256 \
-Dparam_file=${PARAM_FILE} \
> logs/feature_extract_${log_version}.log 2>&1(日志信息)

2、直接在命令行写入参数的情况

【工作日记】集群进程管理yarn + 书写spark-submit 脚本