spark提交命令 spark-submit 的參數 executor-memory、executor-cores、num-executors、spark.default.parallelism分析


 轉載:https://blog.csdn.net/zimiao552147572/article/details/96482120

nohup spark-submit 
--master yarn 
--deploy-mode cluster 
--jars /xx/xx/xx/xx.jar 
--class com.spark_kudu_parquet.spark_kudu 
--name spark_kudu 
--driver-memory 2g 
--driver-cores 2 
--executor-memory 2g 
--executor-cores 2 
--num-executors 24 
--conf spark.default.parallelism=300 
spark_kudu_parquet-1.0-SNAPSHOT.jar > out.log &
 
帶有 CDH6.1.1 版本的jar包(每個jar包之間不能有空格,並且使用逗號分隔)
(yarn集群模式)nohup spark-submit --master yarn --deploy-mode cluster --jars /home/gzp/spark_kudu/jars/accessors-smart-1.2.jar,/home/gzp/spark_kudu/jars/activation-1.1.1.jar,/home/gzp/spark_kudu/jars/aggdesigner-algorithm-6.0.jar,/home/gzp/spark_kudu/jars/antlr4-runtime-4.7.jar,/home/gzp/spark_kudu/jars/antlr-runtime-3.5.2.jar,/home/gzp/spark_kudu/jars/aopalliance-1.0.jar,/home/gzp/spark_kudu/jars/aopalliance-repackaged-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/arrow-format-0.10.0.jar,/home/gzp/spark_kudu/jars/arrow-memory-0.10.0.jar,/home/gzp/spark_kudu/jars/arrow-vector-0.10.0.jar,/home/gzp/spark_kudu/jars/asm-5.0.4.jar,/home/gzp/spark_kudu/jars/async-1.4.1.jar,/home/gzp/spark_kudu/jars/audience-annotations-0.8.0.jar,/home/gzp/spark_kudu/jars/avatica-1.12.0.jar,/home/gzp/spark_kudu/jars/avro-1.8.2-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/avro-ipc-1.8.2-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/avro-mapred-1.8.2-cdh6.1.1-hadoop2.jar,/home/gzp/spark_kudu/jars/bonecp-0.8.0.RELEASE.jar,/home/gzp/spark_kudu/jars/calcite-core-1.12.0.jar,/home/gzp/spark_kudu/jars/calcite-druid-1.12.0.jar,/home/gzp/spark_kudu/jars/calcite-linq4j-1.12.0.jar,/home/gzp/spark_kudu/jars/chill_2.11-0.9.3.jar,/home/gzp/spark_kudu/jars/chill-java-0.9.3.jar,/home/gzp/spark_kudu/jars/commons-beanutils-1.9.3.jar,/home/gzp/spark_kudu/jars/commons-cli-1.4.jar,/home/gzp/spark_kudu/jars/commons-codec-1.10.jar,/home/gzp/spark_kudu/jars/commons-collections-3.2.2.jar,/home/gzp/spark_kudu/jars/commons-compiler-3.0.9.jar,/home/gzp/spark_kudu/jars/commons-compress-1.4.1.jar,/home/gzp/spark_kudu/jars/commons-configuration2-2.1.1.jar,/home/gzp/spark_kudu/jars/commons-crypto-1.0.0.jar,/home/gzp/spark_kudu/jars/commons-dbcp-1.4.jar,/home/gzp/spark_kudu/jars/commons-io-2.4.jar,/home/gzp/spark_kudu/jars/commons-lang-2.6.jar,/home/gzp/spark_kudu/jars/commons-lang3-3.7.jar,/home/gzp/spark_kudu/jars/commons-logging-1.2.jar,/home/gzp/spark_kudu/jars/commons-math3-3.4.1.jar,/home/gzp/spark_kudu/jars/commons-net-3.1.jar,/home/gzp/spark_kudu/jars/commons-pool-1.6.jar,/home/gzp/spark_kudu/jars/compress-lzf-1.0.3.jar,/home/gzp/spark_kudu/jars/curator-client-2.12.0.jar,/home/gzp/spark_kudu/jars/curator-framework-2.7.1.jar,/home/gzp/spark_kudu/jars/curator-recipes-2.7.1.jar,/home/gzp/spark_kudu/jars/datanucleus-api-jdo-4.2.1.jar,/home/gzp/spark_kudu/jars/datanucleus-core-4.1.6.jar,/home/gzp/spark_kudu/jars/datanucleus-rdbms-4.1.7.jar,/home/gzp/spark_kudu/jars/derby-10.14.1.0.jar,/home/gzp/spark_kudu/jars/fastutil-6.5.6.jar,/home/gzp/spark_kudu/jars/findbugs-annotations-1.3.9-1.jar,/home/gzp/spark_kudu/jars/flatbuffers-1.2.0-3f79e055.jar,/home/gzp/spark_kudu/jars/gson-2.2.4.jar,/home/gzp/spark_kudu/jars/guava-16.0.1.jar,/home/gzp/spark_kudu/jars/guice-3.0.jar,/home/gzp/spark_kudu/jars/guice-assistedinject-3.0.jar,/home/gzp/spark_kudu/jars/hadoop-annotations-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-auth-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-client-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-common-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-hdfs-client-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-mapreduce-client-common-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-mapreduce-client-core-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-yarn-api-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-yarn-client-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-yarn-common-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hamcrest-core-1.3.jar,/home/gzp/spark_kudu/jars/hbase-client-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-common-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-hadoop2-compat-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-hadoop-compat-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-metrics-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-metrics-api-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-protocol-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-protocol-shaded-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-shaded-miscellaneous-2.1.0.jar,/home/gzp/spark_kudu/jars/hbase-shaded-netty-2.1.0.jar,/home/gzp/spark_kudu/jars/hbase-shaded-protobuf-2.1.0.jar,/home/gzp/spark_kudu/jars/HikariCP-2.6.1.jar,/home/gzp/spark_kudu/jars/hive-exec-2.1.1-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hive-metastore-2.1.1-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hk2-api-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/hk2-locator-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/hk2-utils-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/hppc-0.7.2.jar,/home/gzp/spark_kudu/jars/htrace-core4-4.1.0-incubating.jar,/home/gzp/spark_kudu/jars/httpclient-4.5.3.jar,/home/gzp/spark_kudu/jars/httpcore-4.4.6.jar,/home/gzp/spark_kudu/jars/ivy-2.4.0.jar,/home/gzp/spark_kudu/jars/jackson-annotations-2.9.0.jar,/home/gzp/spark_kudu/jars/jackson-core-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-core-asl-1.9.13.jar,/home/gzp/spark_kudu/jars/jackson-databind-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-jaxrs-base-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-jaxrs-json-provider-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-mapper-asl-1.9.13-cloudera.1.jar,/home/gzp/spark_kudu/jars/jackson-module-jaxb-annotations-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-module-paranamer-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-module-scala_2.11-2.9.5.jar,/home/gzp/spark_kudu/jars/janino-3.0.9.jar,/home/gzp/spark_kudu/jars/javassist-3.18.1-GA.jar,/home/gzp/spark_kudu/jars/javax.annotation-api-1.2.jar,/home/gzp/spark_kudu/jars/javax.inject-1.jar,/home/gzp/spark_kudu/jars/javax.inject-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/javax.jdo-3.2.0-m3.jar,/home/gzp/spark_kudu/jars/javax.servlet-api-3.1.0.jar,/home/gzp/spark_kudu/jars/javax.ws.rs-api-2.0.1.jar,/home/gzp/spark_kudu/jars/javolution-5.5.1.jar,/home/gzp/spark_kudu/jars/jaxb-api-2.2.11.jar,/home/gzp/spark_kudu/jars/jcip-annotations-1.0-1.jar,/home/gzp/spark_kudu/jars/jcl-over-slf4j-1.7.25.jar,/home/gzp/spark_kudu/jars/jcodings-1.0.18.jar,/home/gzp/spark_kudu/jars/jdo-api-3.0.1.jar,/home/gzp/spark_kudu/jars/jersey-client-1.19.jar,/home/gzp/spark_kudu/jars/jersey-client-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-common-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-container-servlet-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-container-servlet-core-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-core-1.19.jar,/home/gzp/spark_kudu/jars/jersey-guava-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-media-jaxb-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-server-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-servlet-1.19.jar,/home/gzp/spark_kudu/jars/jetty-http-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-io-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-security-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-server-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-servlet-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-util-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-webapp-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-xml-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/joda-time-2.9.9.jar,/home/gzp/spark_kudu/jars/jodd-core-3.5.2.jar,/home/gzp/spark_kudu/jars/joni-2.1.11.jar,/home/gzp/spark_kudu/jars/json4s-ast_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json4s-core_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json4s-jackson_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json4s-scalap_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json-smart-2.3.jar,/home/gzp/spark_kudu/jars/jsp-api-2.1.jar,/home/gzp/spark_kudu/jars/jsr305-1.3.9.jar,/home/gzp/spark_kudu/jars/jsr311-api-1.1.1.jar,/home/gzp/spark_kudu/jars/jta-1.1.jar,/home/gzp/spark_kudu/jars/jul-to-slf4j-1.7.25.jar,/home/gzp/spark_kudu/jars/junit-4.12.jar,/home/gzp/spark_kudu/jars/kerb-admin-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-client-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-common-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-core-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-crypto-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-identity-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-server-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-simplekdc-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-util-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-asn1-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-config-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-pkix-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-util-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-xdr-1.0.0.jar,/home/gzp/spark_kudu/jars/kryo-shaded-4.0.2.jar,/home/gzp/spark_kudu/jars/kudu-client-1.8.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/kudu-client-tools-1.8.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/kudu-spark2_2.11-1.8.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/leveldbjni-all-1.8.jar,/home/gzp/spark_kudu/jars/libfb303-0.9.3.jar,/home/gzp/spark_kudu/jars/libthrift-0.9.3.jar,/home/gzp/spark_kudu/jars/log4j-1.2.17.jar,/home/gzp/spark_kudu/jars/log4j-api-2.8.2.jar,/home/gzp/spark_kudu/jars/log4j-core-2.8.2.jar,/home/gzp/spark_kudu/jars/logredactor-2.0.6.jar,/home/gzp/spark_kudu/jars/lz4-java-1.4.0.jar,/home/gzp/spark_kudu/jars/metrics-core-3.1.5.jar,/home/gzp/spark_kudu/jars/metrics-graphite-3.1.5.jar,/home/gzp/spark_kudu/jars/metrics-json-3.1.5.jar,/home/gzp/spark_kudu/jars/metrics-jvm-3.1.5.jar,/home/gzp/spark_kudu/jars/minlog-1.3.0.jar,/home/gzp/spark_kudu/jars/netty-3.10.6.Final.jar,/home/gzp/spark_kudu/jars/netty-all-4.1.17.Final.jar,/home/gzp/spark_kudu/jars/nimbus-jose-jwt-4.41.1.jar,/home/gzp/spark_kudu/jars/objenesis-2.5.1.jar,/home/gzp/spark_kudu/jars/okhttp-2.7.5.jar,/home/gzp/spark_kudu/jars/okio-1.6.0.jar,/home/gzp/spark_kudu/jars/oro-2.0.8.jar,/home/gzp/spark_kudu/jars/osgi-resource-locator-1.0.1.jar,/home/gzp/spark_kudu/jars/paranamer-2.8.jar,/home/gzp/spark_kudu/jars/parquet-column-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-common-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-encoding-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-format-2.3.1-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-hadoop-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-jackson-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/protobuf-java-2.5.0.jar,/home/gzp/spark_kudu/jars/py4j-0.10.7.jar,/home/gzp/spark_kudu/jars/pyrolite-4.13.jar,/home/gzp/spark_kudu/jars/re2j-1.0.jar,/home/gzp/spark_kudu/jars/RoaringBitmap-0.5.11.jar,/home/gzp/spark_kudu/jars/scala-library-2.11.8.jar,/home/gzp/spark_kudu/jars/scala-parser-combinators_2.11-1.1.0.jar,/home/gzp/spark_kudu/jars/scala-reflect-2.11.12.jar,/home/gzp/spark_kudu/jars/scala-xml_2.11-1.0.6.jar,/home/gzp/spark_kudu/jars/slf4j-api-1.7.25.jar,/home/gzp/spark_kudu/jars/slf4j-log4j12-1.7.25.jar,/home/gzp/spark_kudu/jars/snappy-java-1.1.4.jar,/home/gzp/spark_kudu/jars/spark-catalyst_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-core_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-hive_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark_kudu_parquet.jar,/home/gzp/spark_kudu/jars/spark-kvstore_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-launcher_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-network-common_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-network-shuffle_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-sketch_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-sql_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-tags_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-unsafe_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/ST4-4.0.4.jar,/home/gzp/spark_kudu/jars/stax2-api-3.1.4.jar,/home/gzp/spark_kudu/jars/stax-api-1.0.1.jar,/home/gzp/spark_kudu/jars/stream-2.7.0.jar,/home/gzp/spark_kudu/jars/tephra-api-0.6.0.jar,/home/gzp/spark_kudu/jars/tephra-core-0.6.0.jar,/home/gzp/spark_kudu/jars/tephra-hbase-compat-1.0-0.6.0.jar,/home/gzp/spark_kudu/jars/transaction-api-1.1.jar,/home/gzp/spark_kudu/jars/twill-api-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-common-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-core-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-discovery-api-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-discovery-core-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-zookeeper-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/univocity-parsers-2.7.3.jar,/home/gzp/spark_kudu/jars/unused-1.0.0.jar,/home/gzp/spark_kudu/jars/validation-api-1.1.0.Final.jar,/home/gzp/spark_kudu/jars/woodstox-core-5.0.3.jar,/home/gzp/spark_kudu/jars/xbean-asm6-shaded-4.8.jar,/home/gzp/spark_kudu/jars/xz-1.6.jar,/home/gzp/spark_kudu/jars/zookeeper-3.4.5-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/zstd-jni-1.3.2-2.jar --class com.spark_kudu_parquet.spark_kudu --name spark_kudu --driver-memory 2g --driver-cores 2 --executor-memory 2g --executor-cores 2 --num-executors 24 --conf spark.default.parallelism=300 spark_kudu_parquet-1.0-SNAPSHOT.jar > /home/gzp/spark_kudu/out.log &
(local本地單機模式)nohup spark-submit --master local --deploy-mode client --jars /home/gzp/spark_kudu/jars/accessors-smart-1.2.jar,/home/gzp/spark_kudu/jars/activation-1.1.1.jar,/home/gzp/spark_kudu/jars/aggdesigner-algorithm-6.0.jar,/home/gzp/spark_kudu/jars/antlr4-runtime-4.7.jar,/home/gzp/spark_kudu/jars/antlr-runtime-3.5.2.jar,/home/gzp/spark_kudu/jars/aopalliance-1.0.jar,/home/gzp/spark_kudu/jars/aopalliance-repackaged-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/arrow-format-0.10.0.jar,/home/gzp/spark_kudu/jars/arrow-memory-0.10.0.jar,/home/gzp/spark_kudu/jars/arrow-vector-0.10.0.jar,/home/gzp/spark_kudu/jars/asm-5.0.4.jar,/home/gzp/spark_kudu/jars/async-1.4.1.jar,/home/gzp/spark_kudu/jars/audience-annotations-0.8.0.jar,/home/gzp/spark_kudu/jars/avatica-1.12.0.jar,/home/gzp/spark_kudu/jars/avro-1.8.2-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/avro-ipc-1.8.2-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/avro-mapred-1.8.2-cdh6.1.1-hadoop2.jar,/home/gzp/spark_kudu/jars/bonecp-0.8.0.RELEASE.jar,/home/gzp/spark_kudu/jars/calcite-core-1.12.0.jar,/home/gzp/spark_kudu/jars/calcite-druid-1.12.0.jar,/home/gzp/spark_kudu/jars/calcite-linq4j-1.12.0.jar,/home/gzp/spark_kudu/jars/chill_2.11-0.9.3.jar,/home/gzp/spark_kudu/jars/chill-java-0.9.3.jar,/home/gzp/spark_kudu/jars/commons-beanutils-1.9.3.jar,/home/gzp/spark_kudu/jars/commons-cli-1.4.jar,/home/gzp/spark_kudu/jars/commons-codec-1.10.jar,/home/gzp/spark_kudu/jars/commons-collections-3.2.2.jar,/home/gzp/spark_kudu/jars/commons-compiler-3.0.9.jar,/home/gzp/spark_kudu/jars/commons-compress-1.4.1.jar,/home/gzp/spark_kudu/jars/commons-configuration2-2.1.1.jar,/home/gzp/spark_kudu/jars/commons-crypto-1.0.0.jar,/home/gzp/spark_kudu/jars/commons-dbcp-1.4.jar,/home/gzp/spark_kudu/jars/commons-io-2.4.jar,/home/gzp/spark_kudu/jars/commons-lang-2.6.jar,/home/gzp/spark_kudu/jars/commons-lang3-3.7.jar,/home/gzp/spark_kudu/jars/commons-logging-1.2.jar,/home/gzp/spark_kudu/jars/commons-math3-3.4.1.jar,/home/gzp/spark_kudu/jars/commons-net-3.1.jar,/home/gzp/spark_kudu/jars/commons-pool-1.6.jar,/home/gzp/spark_kudu/jars/compress-lzf-1.0.3.jar,/home/gzp/spark_kudu/jars/curator-client-2.12.0.jar,/home/gzp/spark_kudu/jars/curator-framework-2.7.1.jar,/home/gzp/spark_kudu/jars/curator-recipes-2.7.1.jar,/home/gzp/spark_kudu/jars/datanucleus-api-jdo-4.2.1.jar,/home/gzp/spark_kudu/jars/datanucleus-core-4.1.6.jar,/home/gzp/spark_kudu/jars/datanucleus-rdbms-4.1.7.jar,/home/gzp/spark_kudu/jars/derby-10.14.1.0.jar,/home/gzp/spark_kudu/jars/fastutil-6.5.6.jar,/home/gzp/spark_kudu/jars/findbugs-annotations-1.3.9-1.jar,/home/gzp/spark_kudu/jars/flatbuffers-1.2.0-3f79e055.jar,/home/gzp/spark_kudu/jars/gson-2.2.4.jar,/home/gzp/spark_kudu/jars/guava-16.0.1.jar,/home/gzp/spark_kudu/jars/guice-3.0.jar,/home/gzp/spark_kudu/jars/guice-assistedinject-3.0.jar,/home/gzp/spark_kudu/jars/hadoop-annotations-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-auth-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-client-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-common-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-hdfs-client-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-mapreduce-client-common-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-mapreduce-client-core-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-yarn-api-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-yarn-client-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hadoop-yarn-common-3.0.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hamcrest-core-1.3.jar,/home/gzp/spark_kudu/jars/hbase-client-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-common-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-hadoop2-compat-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-hadoop-compat-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-metrics-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-metrics-api-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-protocol-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-protocol-shaded-2.1.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hbase-shaded-miscellaneous-2.1.0.jar,/home/gzp/spark_kudu/jars/hbase-shaded-netty-2.1.0.jar,/home/gzp/spark_kudu/jars/hbase-shaded-protobuf-2.1.0.jar,/home/gzp/spark_kudu/jars/HikariCP-2.6.1.jar,/home/gzp/spark_kudu/jars/hive-exec-2.1.1-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hive-metastore-2.1.1-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/hk2-api-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/hk2-locator-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/hk2-utils-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/hppc-0.7.2.jar,/home/gzp/spark_kudu/jars/htrace-core4-4.1.0-incubating.jar,/home/gzp/spark_kudu/jars/httpclient-4.5.3.jar,/home/gzp/spark_kudu/jars/httpcore-4.4.6.jar,/home/gzp/spark_kudu/jars/ivy-2.4.0.jar,/home/gzp/spark_kudu/jars/jackson-annotations-2.9.0.jar,/home/gzp/spark_kudu/jars/jackson-core-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-core-asl-1.9.13.jar,/home/gzp/spark_kudu/jars/jackson-databind-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-jaxrs-base-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-jaxrs-json-provider-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-mapper-asl-1.9.13-cloudera.1.jar,/home/gzp/spark_kudu/jars/jackson-module-jaxb-annotations-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-module-paranamer-2.9.5.jar,/home/gzp/spark_kudu/jars/jackson-module-scala_2.11-2.9.5.jar,/home/gzp/spark_kudu/jars/janino-3.0.9.jar,/home/gzp/spark_kudu/jars/javassist-3.18.1-GA.jar,/home/gzp/spark_kudu/jars/javax.annotation-api-1.2.jar,/home/gzp/spark_kudu/jars/javax.inject-1.jar,/home/gzp/spark_kudu/jars/javax.inject-2.4.0-b34.jar,/home/gzp/spark_kudu/jars/javax.jdo-3.2.0-m3.jar,/home/gzp/spark_kudu/jars/javax.servlet-api-3.1.0.jar,/home/gzp/spark_kudu/jars/javax.ws.rs-api-2.0.1.jar,/home/gzp/spark_kudu/jars/javolution-5.5.1.jar,/home/gzp/spark_kudu/jars/jaxb-api-2.2.11.jar,/home/gzp/spark_kudu/jars/jcip-annotations-1.0-1.jar,/home/gzp/spark_kudu/jars/jcl-over-slf4j-1.7.25.jar,/home/gzp/spark_kudu/jars/jcodings-1.0.18.jar,/home/gzp/spark_kudu/jars/jdo-api-3.0.1.jar,/home/gzp/spark_kudu/jars/jersey-client-1.19.jar,/home/gzp/spark_kudu/jars/jersey-client-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-common-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-container-servlet-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-container-servlet-core-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-core-1.19.jar,/home/gzp/spark_kudu/jars/jersey-guava-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-media-jaxb-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-server-2.22.2.jar,/home/gzp/spark_kudu/jars/jersey-servlet-1.19.jar,/home/gzp/spark_kudu/jars/jetty-http-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-io-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-security-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-server-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-servlet-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-util-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-webapp-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/jetty-xml-9.3.20.v20170531.jar,/home/gzp/spark_kudu/jars/joda-time-2.9.9.jar,/home/gzp/spark_kudu/jars/jodd-core-3.5.2.jar,/home/gzp/spark_kudu/jars/joni-2.1.11.jar,/home/gzp/spark_kudu/jars/json4s-ast_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json4s-core_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json4s-jackson_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json4s-scalap_2.11-3.5.3.jar,/home/gzp/spark_kudu/jars/json-smart-2.3.jar,/home/gzp/spark_kudu/jars/jsp-api-2.1.jar,/home/gzp/spark_kudu/jars/jsr305-1.3.9.jar,/home/gzp/spark_kudu/jars/jsr311-api-1.1.1.jar,/home/gzp/spark_kudu/jars/jta-1.1.jar,/home/gzp/spark_kudu/jars/jul-to-slf4j-1.7.25.jar,/home/gzp/spark_kudu/jars/junit-4.12.jar,/home/gzp/spark_kudu/jars/kerb-admin-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-client-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-common-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-core-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-crypto-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-identity-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-server-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-simplekdc-1.0.0.jar,/home/gzp/spark_kudu/jars/kerb-util-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-asn1-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-config-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-pkix-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-util-1.0.0.jar,/home/gzp/spark_kudu/jars/kerby-xdr-1.0.0.jar,/home/gzp/spark_kudu/jars/kryo-shaded-4.0.2.jar,/home/gzp/spark_kudu/jars/kudu-client-1.8.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/kudu-client-tools-1.8.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/kudu-spark2_2.11-1.8.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/leveldbjni-all-1.8.jar,/home/gzp/spark_kudu/jars/libfb303-0.9.3.jar,/home/gzp/spark_kudu/jars/libthrift-0.9.3.jar,/home/gzp/spark_kudu/jars/log4j-1.2.17.jar,/home/gzp/spark_kudu/jars/log4j-api-2.8.2.jar,/home/gzp/spark_kudu/jars/log4j-core-2.8.2.jar,/home/gzp/spark_kudu/jars/logredactor-2.0.6.jar,/home/gzp/spark_kudu/jars/lz4-java-1.4.0.jar,/home/gzp/spark_kudu/jars/metrics-core-3.1.5.jar,/home/gzp/spark_kudu/jars/metrics-graphite-3.1.5.jar,/home/gzp/spark_kudu/jars/metrics-json-3.1.5.jar,/home/gzp/spark_kudu/jars/metrics-jvm-3.1.5.jar,/home/gzp/spark_kudu/jars/minlog-1.3.0.jar,/home/gzp/spark_kudu/jars/netty-3.10.6.Final.jar,/home/gzp/spark_kudu/jars/netty-all-4.1.17.Final.jar,/home/gzp/spark_kudu/jars/nimbus-jose-jwt-4.41.1.jar,/home/gzp/spark_kudu/jars/objenesis-2.5.1.jar,/home/gzp/spark_kudu/jars/okhttp-2.7.5.jar,/home/gzp/spark_kudu/jars/okio-1.6.0.jar,/home/gzp/spark_kudu/jars/oro-2.0.8.jar,/home/gzp/spark_kudu/jars/osgi-resource-locator-1.0.1.jar,/home/gzp/spark_kudu/jars/paranamer-2.8.jar,/home/gzp/spark_kudu/jars/parquet-column-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-common-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-encoding-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-format-2.3.1-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-hadoop-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/parquet-jackson-1.9.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/protobuf-java-2.5.0.jar,/home/gzp/spark_kudu/jars/py4j-0.10.7.jar,/home/gzp/spark_kudu/jars/pyrolite-4.13.jar,/home/gzp/spark_kudu/jars/re2j-1.0.jar,/home/gzp/spark_kudu/jars/RoaringBitmap-0.5.11.jar,/home/gzp/spark_kudu/jars/scala-library-2.11.8.jar,/home/gzp/spark_kudu/jars/scala-parser-combinators_2.11-1.1.0.jar,/home/gzp/spark_kudu/jars/scala-reflect-2.11.12.jar,/home/gzp/spark_kudu/jars/scala-xml_2.11-1.0.6.jar,/home/gzp/spark_kudu/jars/slf4j-api-1.7.25.jar,/home/gzp/spark_kudu/jars/slf4j-log4j12-1.7.25.jar,/home/gzp/spark_kudu/jars/snappy-java-1.1.4.jar,/home/gzp/spark_kudu/jars/spark-catalyst_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-core_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-hive_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark_kudu_parquet.jar,/home/gzp/spark_kudu/jars/spark-kvstore_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-launcher_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-network-common_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-network-shuffle_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-sketch_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-sql_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-tags_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/spark-unsafe_2.11-2.4.0-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/ST4-4.0.4.jar,/home/gzp/spark_kudu/jars/stax2-api-3.1.4.jar,/home/gzp/spark_kudu/jars/stax-api-1.0.1.jar,/home/gzp/spark_kudu/jars/stream-2.7.0.jar,/home/gzp/spark_kudu/jars/tephra-api-0.6.0.jar,/home/gzp/spark_kudu/jars/tephra-core-0.6.0.jar,/home/gzp/spark_kudu/jars/tephra-hbase-compat-1.0-0.6.0.jar,/home/gzp/spark_kudu/jars/transaction-api-1.1.jar,/home/gzp/spark_kudu/jars/twill-api-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-common-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-core-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-discovery-api-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-discovery-core-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/twill-zookeeper-0.6.0-incubating.jar,/home/gzp/spark_kudu/jars/univocity-parsers-2.7.3.jar,/home/gzp/spark_kudu/jars/unused-1.0.0.jar,/home/gzp/spark_kudu/jars/validation-api-1.1.0.Final.jar,/home/gzp/spark_kudu/jars/woodstox-core-5.0.3.jar,/home/gzp/spark_kudu/jars/xbean-asm6-shaded-4.8.jar,/home/gzp/spark_kudu/jars/xz-1.6.jar,/home/gzp/spark_kudu/jars/zookeeper-3.4.5-cdh6.1.1.jar,/home/gzp/spark_kudu/jars/zstd-jni-1.3.2-2.jar --class com.spark_kudu_parquet.spark_kudu --name spark_kudu --driver-memory 2g --driver-cores 2 --executor-memory 2g --executor-cores 2 --num-executors 24 --conf spark.default.parallelism=300 spark_kudu_parquet-1.0-SNAPSHOT.jar > /home/gzp/spark_kudu/out.log &
  
 
    參數解析:
        1.3台主機,每台主機有2個cpu和62G內存,每個cpu有8個核,那么每台機器一共有16核,3台機器一共有48個核
        2.num-executors 24 和 executor-cores 2:每個executors用2個核,那么24個executors一共用48個核
        3.num-executors 24 和 executor-memory 2g:每個executors用2g,那么24個executors一共用48g
        4.每個主機的executors數量 = 30 / 8 約等於 3.75
        5.spark.default.parallelism:指定並行的task數量為300
            參數說明:該參數用於設置每個stage的默認task數量。這個參數極為重要,如果不設置可能會直接影響你的Spark作業性能。
            參數調優建議:Spark作業的默認task數量為500~1000個較為合適。很多同學常犯的一個錯誤就是不去設置這個參數,
                          那么此時就會導致Spark自己根據底層HDFS的block數量來設置task的數量,默認是一個HDFS block對應一個task。
                          通常來說,Spark默認設置的數量是偏少的(比如就幾十個task),如果task數量偏少的話,就會導致你前面設置好的Executor的參數都前功盡棄。
                          試想一下,無論你的Executor進程有多少個,內存和CPU有多大,但是task只有1個或者10個,那么90%的Executor進程可能根本就沒有task執行,
                          也就是白白浪費了資源!因此Spark官網建議的設置原則是,設置該參數為num-executors * executor-cores的2~3倍較為合適,
                          比如Executor的總CPU core數量為300個,那么設置1000個task是可以的,此時可以充分地利用Spark集群的資源。
                
 
ps aux|grep spark_kudu_parquet-1.0-SNAPSHOT.jar            
查看yarn當前運行任務列表,可使用如下命令查看:yarn application -list
如需殺死當前某個作業,使用kill application-id的命令如下:yarn application -kill spark程序id
nohup spark-submit --master yarn  --deploy-mode cluster 
        --jars /home/xx/lib/mysql-connector-java-5.1.32-bin.jar  --class xxx.xx.xx 
        --name XX 
        --driver-memory 2g 
        --driver-cores 2 
        --executor-memory 2g 
        --executor-cores 2  
        --num-executors 30  
        --conf spark.default.parallelism=300  
        xx-0.0.1-SNAPSHOT.jar  > xx.log  &
 
    參數解析:
        1.8台主機,每台主機有2個cpu和62G內存,每個cpu有8個核,那么每台機器一共有16核,8台機器一共有128核
        2.num-executors 30 和 executor-cores 2:每個executors用2個核,那么30個executors一共用60個核
        3.num-executors 30 和 executor-memory 2g:每個executors用2g,那么30個executors一共用60g
        4.每個主機的executors數量 = 30 / 8 約等於 3.75
        5.spark.default.parallelism:指定並行的task數量為300
            參數說明:該參數用於設置每個stage的默認task數量。這個參數極為重要,如果不設置可能會直接影響你的Spark作業性能。
            參數調優建議:Spark作業的默認task數量為500~1000個較為合適。很多同學常犯的一個錯誤就是不去設置這個參數,
                          那么此時就會導致Spark自己根據底層HDFS的block數量來設置task的數量,默認是一個HDFS block對應一個task。
                          通常來說,Spark默認設置的數量是偏少的(比如就幾十個task),如果task數量偏少的話,就會導致你前面設置好的Executor的參數都前功盡棄。
                          試想一下,無論你的Executor進程有多少個,內存和CPU有多大,但是task只有1個或者10個,那么90%的Executor進程可能根本就沒有task執行,
                          也就是白白浪費了資源!因此Spark官網建議的設置原則是,設置該參數為num-executors * executor-cores的2~3倍較為合適,
                          比如Executor的總CPU core數量為300個,那么設置1000個task是可以的,此時可以充分地利用Spark集群的資源。
                  
num-executors
    參數說明:該參數用於設置Spark作業總共要用多少個Executor進程來執行。
              Driver在向YARN集群管理器申請資源時,YARN集群管理器會盡可能按照你的設置來在集群的各個工作節點上,啟動相應數量的Executor進程。
              這個參數非常之重要,如果不設置的話,默認只會給你啟動少量的Executor進程,此時你的Spark作業的運行速度是非常慢的。
    參數調優建議:每個Spark作業的運行一般設置50~100個左右的Executor進程比較合適,設置太少或太多的Executor進程都不好。
                  設置的太少,無法充分利用集群資源;設置的太多的話,大部分隊列可能無法給予充分的資源。
                  
executor-cores
    參數說明:該參數用於設置每個Executor進程的CPU core數量。這個參數決定了每個Executor進程並行執行task線程的能力。
              因為每個CPU core同一時間只能執行一個task線程,因此每個Executor進程的CPU core數量越多,越能夠快速地執行完分配給自己的所有task線程。
    參數調優建議:Executor的CPU core數量設置為2~4個較為合適。
                  同樣得根據不同部門的資源隊列來定,可以看看自己的資源隊列的最大CPU core限制是多少,再依據設置的Executor數量,來決定每個Executor進程可以分配到幾個CPU core。
                  同樣建議,如果是跟他人共享這個隊列,那么num-executors * executor-cores不要超過隊列總CPU core的1/3~1/2左右比較合適,也是避免影響其他同學的作業運行。
                  
executor-memory
    參數說明:該參數用於設置每個Executor進程的內存。Executor內存的大小,很多時候直接決定了Spark作業的性能,而且跟常見的JVM OOM異常,也有直接的關聯。
    參數調優建議:每個Executor進程的內存設置4G~8G較為合適。但是這只是一個參考值,具體的設置還是得根據不同部門的資源隊列來定。
                  可以看看自己團隊的資源隊列的最大內存限制是多少,num-executors乘以executor-memory,就代表了你的Spark作業申請到的總內存量(也就是所有Executor進程的內存總和),
                  這個量是不能超過隊列的最大內存量的。此外,如果你是跟團隊里其他人共享這個資源隊列,那么申請的總內存量最好不要超過資源隊列最大總內存的1/3~1/2,
                  避免你自己的Spark作業占用了隊列所有的資源,導致別的同學的作業無法運行。
                  
                  
--driver-memory
    Driver內存,默認1G
 
--driver-cores
    Driver的核數,默認是1。在yarn集群模式下使用
 
====================================================================================================
 
在我們提交spark程序時,應該如何為Spark集群配置 num-executors、executor-memory、execuor-cores 呢?
    Hadoop / Yarn / OS Deamons
        當我們使用像Yarn這樣的集群管理器運行spark應用程序時,會有幾個守護進程在后台運行,如NameNode,Secondary NameNode,DataNode,JobTracker和TaskTracker等。
        因此,在指定num-executors時,我們需要確保為這些守護進程留下足夠的核心(至少每個節點約1 CPU核)以便順利運行。
    Yarn ApplicationMaster(AM)
        ApplicationMaster負責協調來自ResourceManager的資源,並與NodeManagers一起執行container並監控其資源消耗。
        如果我們在YARN上運行Spark,那么我們需要預估運行AM所需要的資源(至少1024MB和1 CPU核)。
    HDFS吞吐量
        HDFS客戶端遇到大量並發線程會出現一些bug。一般來說,每個executors最多可以實現5個任務的完全寫入吞吐量,因此最好將每個executors的核心數保持在該數量之下。
    MemoryOverhead
        JVM還需要一些off heap的內存,請參考下圖中描繪的Spark和YARN中內存屬性的層次結構,
 
 
簡單來說,有以下兩個公式:
    每個executor從YARN請求的內存 = spark.executor-memory + spark.yarn.executor.memoryOverhead
    spark.yarn.executor.memoryOverhead = Max(384MB, 7% of spark.executor-memory)
    例如當我設置 --executor-memory=20 時,我們實際請求了 20GB + memoryOverhead = 20 + 7% of 20GB = ~23GB。
    運行具有executors較大內存的通常會導致過多的GC延遲。
    運行具有executors較小內存的(例如,1G & 1 CPU core)則會浪費 單個JVM中運行多個任務所帶來的優點。
 
    
不同配置的優劣分析
    1.現在,讓我們考慮一個具有以下配置的10節點集群,並分析執行程序的不同可能性,核心內存分布:
        10 Nodes 
        每個Node:16 cores、64GB RAM
 
    2.第一種方法:使用較小的executors,每個核心一個executors
        `--num-executors` = `在這種方法中,我們將為每個核心分配一個executor`
                          = `集群的總核心數`
                          = `每個節點的核心數 * 集群的總節點數` 
                          =  16 x 10 = 160
                          
        `--executor-cores`  = 1 (`每個executor分配的核心數目`)
 
        `--executor-memory` = `每個executor分配的內存數`
                            = `每個節點內存總數 / 每個節點上分配的executor數`
                            = 64GB/16 = 4GB
        分析:
            由於每個executor只分配了一個核,我們將無法利用在同一個JVM中運行多個任務的優點。 
            此外,共享/緩存變量(如廣播變量和累加器)將在節點的每個核心中復制16次。 
            最嚴重的就是,我們沒有為Hadoop / Yarn守護程序進程留下足夠的內存開銷,我們還忘記了將ApplicationManagers運行所需要的開銷加入計算。
 
    3.第二種方法:使用較大的executors,每個節點一個executors
        `--num-executors` = `在這種方法中,我們將為每個節點分配一個executor`
                          = `集群的總節點數`
                          = 10
                            
        `--executor-cores` = `每個節點一個executor意味着該節點的所有核心都分配給一個執executor`
                           = `每個節點的總核心數`
                           = 16
                             
        `--executor-memory` = `每個executor分配的內存數`
                            = `每個節點內存總數數/每個節點上分配的executor數`
                            = 64GB/1 = 64GB
 
        分析:
            每個executor都有16個核心,由於HDFS客戶端遇到大量並發線程會出現一些bug,即HDFS吞吐量會受到影響。
            同時過大的內存分配也會導致過多的GC延遲。ApplicationManager和守護進程沒有計算在內,HDFS的吞吐量會受到影響,並且會導致垃圾結果過多,不好!
 
    4.第三種方法:使用優化的executors
        1.基於上面提到的建議,讓我們為每個執行器分配5個核心, 即 --executor-cores = 5(用於良好的HDFS吞吐量)
        2.為每個節點留出1個核心用於Hadoop / Yarn守護進程, 即每個節點可用的核心數為 16 -1 = 15。 因此,群集中核心的可用總數剩余 15 x 10 = 150
        3.可用executors的數量 =(群集中核心的可用總數/每個executors分配的核心數)= 150/5 = 30
          然后為ApplicationManager預留1個executors的資源,所以即 --num-executors = 29
          每個節點的executors數目 30/10 = 3
        4.群集中每個節點的可使用的總內存數 64GB - 1GB = 63GB
          每個executor的內存= 64GB / 3 = 21GB
          預留的 off heap overhead = 21GB * 7% 約等於 1.47G
          所以,實際的--executor-memory = 21 - 1.47G 約等於 19GB
        5.所以,推薦的配置是:29個executors,每個executors 18GB內存,每個executors 5個核心!
            --num-executors = 29
            --executor-cores = 5
            --executor-memory = 18
            
====================================================================================================
屬性名稱                默認值            含義
spark.cores.max            (infinite)    當運行在一個獨立部署集群上或者是一個粗粒度共享模式的Mesos集群上的時候,最多可以請求多少個CPU核心。默認是所有的都能用。
spark.executor.memory    512m        每個處理器可以使用的內存大小,跟JVM的內存表示的字符串格式是一樣的(比如: '512m''2g')
 
 
executor 數量 = spark.cores.max / spark.executor.cores 
executor 進程的數量 等於 spark程序設置的最大核心數 除以 每個 executor進程分配的 核心數
 
 
比如機器有12cpu和36g內存,那么將會啟動12/4=3個executor,每個executor使用4cpu和12g內存,總共占用worker資源12cpu和36g內存
默認情況下,Spark集群下的worker,只會啟動一個Executor。
1、設置每個executor使用的cpu數為4
    spark.executor.cores 4
2、設置cpu的最大使用數量 
    spark.cores.max 12  
3、設置每個executor的內存大小為12gg
    spark.executor.memory 12g
 
Spark1.6的源碼部分為:
    protected final String EXECUTOR_MEMORY = "--executor-memory";
    protected final String TOTAL_EXECUTOR_CORES = "--total-executor-cores";
    protected final String EXECUTOR_CORES = "--executor-cores";
    
也可以在提交任務的時候添加:
    SparkSubmit 
        --class com.dyq.spark.MyClass 
        --master:spark://master:7077  
        --total-executor-cores 12 
        --executor-cores 24 
        --executor-memory 12g
 
 
Executor是spark任務(task)的執行單元,Executor運行在worker上,但是不等同於worker,實際上Executor是一組計算資源(cpu核心、memory)的集合。
一個worker上的memory、cpu由多個executor共同使用。
 
spark.executor.cores     顧名思義這個參數是用來指定executor的cpu內核個數,分配更多的內核意味着executor並發能力越強,能夠同時執行更多的task
spark.cores.max          為一個application分配的最大cpu核心數,如果沒有設置這個值默認為spark.deploy.defaultCores
spark.executor.memory    配置executor內存大小
 
executor個數 = spark.max.cores / spark.executor.cores
    集群的executor個數由spark.max.cores、spark.executor.cores共同決定,注意在standalone、mesos coarse-grained模式 下cores不要大於對應節點的內核數
    要保證每個worker上啟動的executor均衡。如果不均衡的話會造成數據傾斜,拉慢任務的整體速度。
    在運行過程中一個task對應一個partition,配置不均衡,會導致每個節點處理的任務量不一樣,因此會產生短板效應。
    如果運行過程中發現GC時間變紅(管理界面可以看到),應該適當調大spark.executor.memory
 
====================================================================================================
 
 
1.RDD在計算的時候,RDD中的每個分區都會起一個task,所以rdd中的分區數目決定了總的的task數目。
2.申請的計算節點Executor數目和每個計算節點核數,決定了你同一時刻可以並行執行的task數目。
3.比如的RDD中有100個分區,那么計算的時候就會生成100個task,你的資源配置為10個計算節點Executor數目,每個計算節點Executor有兩2個核,
  同一時刻可以並行的task數目為20,計算這個RDD就需要5輪。
4.如果計算資源不變,你有101個task的話,就需要6個輪次,在最后一輪中,只有一個task在執行,其余核都在空轉。
5.如果資源不變,你的RDD只有2個分區,那么同一時刻只有2個task運行,其余18個核空轉,造成資源浪費。這就是在spark調優中,增大RDD分區數目,增大任務並行度的做法。
 
 
指定spark executor 數量的公式
    executor數量 = spark.cores.max/spark.executor.cores
    spark.cores.max 是指你的spark程序需要的總核數
    spark.executor.cores 是指每個executor需要的核數
 
指定並行的task數量
    spark.default.parallelism
    參數說明:該參數用於設置每個stage的默認task數量。這個參數極為重要,如果不設置可能會直接影響你的Spark作業性能。
    參數調優建議:Spark作業的默認task數量為500~1000個較為合適。很多同學常犯的一個錯誤就是不去設置這個參數,
                  那么此時就會導致Spark自己根據底層HDFS的block數量來設置task的數量,默認是一個HDFS block對應一個task。
                  通常來說,Spark默認設置的數量是偏少的(比如就幾十個task),如果task數量偏少的話,就會導致你前面設置好的Executor的參數都前功盡棄。
                  試想一下,無論你的Executor進程有多少個,內存和CPU有多大,但是task只有1個或者10個,那么90%的Executor進程可能根本就沒有task執行,
                  也就是白白浪費了資源!因此Spark官網建議的設置原則是,設置該參數為num-executors * executor-cores的2~3倍較為合適,
                  比如Executor的總CPU core數量為300個,那么設置1000個task是可以的,此時可以充分地利用Spark集群的資源。
 
在關於spark任務並行度的設置中,有兩個參數我們會經常遇到,spark.sql.shuffle.partitions 和 spark.default.parallelism, 那么這兩個參數到底有什么區別的?
首先,讓我們來看下它們的定義
                         
spark.sql.shuffle.partitions(對sparks SQL專用的設置)    
    默認值:200                
    含義:當shuffle數據時,配置joins聯接或aggregations聚合時要使用的分區數 
    
spark.default.parallelism(只有在處理RDD時才會起作用,對Spark SQL的無效)
    默認值:
            1.對於分布式無序移動操作(如reducebykey和join),父RDD中的最大分區數。
            2.對於沒有父RDD的並行化操作,它取決於集群管理器:
                1.本地模式:本地計算機上的核心數
                2.細粒模式:8
                3.其他:所有執行器節點上的核心總數或2個,以較大者為准。
    含義:在RDD中,由join、reducebykey、parallelize等轉換(如果不是由用戶設置)返回的默認分區數 
 
 
命令示例
    spark-submit 
        --class com.cjh.test.WordCount 
        --conf spark.default.parallelism=12 
        --conf spark.executor.memory=800m 
        --conf spark.executor.cores=2 
        --conf spark.cores.max=6 my.jar
        
    spark-submit     
        --conf spark.sql.shuffle.partitions=20 
        --conf spark.default.parallelism=20
 
====================================================================================================
 
spark.storage.memoryFraction
 
    參數說明:該參數用於設置RDD持久化數據在Executor內存中能占的比例,默認是0.6。也就是說,默認Executor 60%的內存,可以用來保存持久化的RDD數據。
              根據你選擇的不同的持久化策略,如果內存不夠時,可能數據就不會持久化,或者數據會寫入磁盤。
 
    參數調優建議:如果Spark作業中,有較多的RDD持久化操作,該參數的值可以適當提高一些,保證持久化的數據能夠容納在內存中。
                  避免內存不夠緩存所有的數據,導致數據只能寫入磁盤中,降低了性能。但是如果Spark作業中的shuffle類操作比較多,而持久化操作比較少,
                  那么這個參數的值適當降低一些比較合適。此外,如果發現作業由於頻繁的gc導致運行緩慢(通過spark web ui可以觀察到作業的gc耗時),
                  意味着task執行用戶代碼的內存不夠用,那么同樣建議調低這個參數的值。
 
spark.shuffle.memoryFraction
 
    參數說明:該參數用於設置shuffle過程中一個task拉取到上個stage的task的輸出后,進行聚合操作時能夠使用的Executor內存的比例,默認是0.2。
              也就是說,Executor默認只有20%的內存用來進行該操作。shuffle操作在進行聚合時,如果發現使用的內存超出了這個20%的限制,
              那么多余的數據就會溢寫到磁盤文件中去,此時就會極大地降低性能。
 
    參數調優建議:如果Spark作業中的RDD持久化操作較少,shuffle操作較多時,建議降低持久化操作的內存占比,提高shuffle操作的內存占比比例,
                  避免shuffle過程中數據過多時內存不夠用,必須溢寫到磁盤上,降低了性能。此外,如果發現作業由於頻繁的gc導致運行緩慢,
                  意味着task執行用戶代碼的內存不夠用,那么同樣建議調低這個參數的值。
Spark最主要資源管理方式按排名為Hadoop Yarn, Apache Standalone 和Mesos。
在單機使用時,Spark還可以采用最基本的local模式。
目前Apache Spark支持三種分布式部署方式,分別是standalone、spark on mesos和 spark on YARN,其中,第一種類似於MapReduce 1.0所采用的模式,
內部實現了容錯性和資源管理,后兩種則是未來發展的趨勢,部分容錯性和資源管理交由統一的資源管理系統完成:讓Spark運行在一個通用的資源管理系統之上,
這樣可以與其他計算框架,比如MapReduce,公用一個集群資源,最大的好處是降低運維成本和提高資源利用率(資源按需分配)。本文將介紹這三種部署方式,並比較其優缺點。 
 
 
 
1.Standalone模式
    即獨立模式,自帶完整的服務,可單獨部署到一個集群中,無需依賴任何其他資源管理系統。從一定程度上說,該模式是其他兩種的基礎。借鑒Spark開發模式,
    我們可以得到一種開發新型計算框架的一般思路:先設計出它的standalone模式,為了快速開發,起初不需要考慮服務(比如master/slave)的容錯性,
    之后再開發相應的wrapper,將stanlone模式下的服務原封不動的部署到資源管理系統yarn或者mesos上,由資源管理系統負責服務本身的容錯。
    目前Spark在standalone模式下是沒有任何單點故障問題的,這是借助zookeeper實現的,思想類似於Hbase master單點故障解決方案。
    將Spark standalone與MapReduce比較,會發現它們兩個在架構上是完全一致的: 
        1) 都是由master/slaves服務組成的,且起初master均存在單點故障,后來均通過zookeeper解決(Apache MRv1的JobTracker仍存在單點問題,但CDH版本得到了解決); 
        2) 各個節點上的資源被抽象成粗粒度的slot,有多少slot就能同時運行多少task。不同的是,MapReduce將slot分為map slot和reduce slot,
           它們分別只能供Map Task和Reduce Task使用,而不能共享,這是MapReduce資源利率低效的原因之一,而Spark則更優化一些,它不區分slot類型,
           只有一種slot,可以供各種類型的Task使用,這種方式可以提高資源利用率,但是不夠靈活,不能為不同類型的Task定制slot資源。總之,這兩種方式各有優缺點。 
 
2.Spark On Mesos模式
    這是很多公司采用的模式,官方推薦這種模式(當然,原因之一是血緣關系)。正是由於Spark開發之初就考慮到支持Mesos,因此,目前而言,
    Spark運行在Mesos上會比運行在YARN上更加靈活,更加自然。目前在Spark On Mesos環境中,用戶可選擇兩種調度模式之一運行自己的應用程序
    (可參考Andrew Xia的“Mesos Scheduling Mode on Spark”): 
        1) 粗粒度模式(Coarse-grained Mode):每個應用程序的運行環境由一個Dirver和若干個Executor組成,其中,每個Executor占用若干資源,
           內部可運行多個Task(對應多少個“slot”)。應用程序的各個任務正式運行之前,需要將運行環境中的資源全部申請好,且運行過程中要一直占用這些資源,
           即使不用,最后程序運行結束后,回收這些資源。舉個例子,比如你提交應用程序時,指定使用5個executor運行你的應用程序,每個executor占用5GB內存和5個CPU,
           每個executor內部設置了5個slot,則Mesos需要先為executor分配資源並啟動它們,之后開始調度任務。另外,在程序運行過程中,
           mesos的master和slave並不知道executor內部各個task的運行情況,executor直接將任務狀態通過內部的通信機制匯報給Driver,
           從一定程度上可以認為,每個應用程序利用mesos搭建了一個虛擬集群自己使用。 
        2) 細粒度模式(Fine-grained Mode):鑒於粗粒度模式會造成大量資源浪費,Spark On Mesos還提供了另外一種調度模式:細粒度模式,
           這種模式類似於現在的雲計算,思想是按需分配。與粗粒度模式一樣,應用程序啟動時,先會啟動executor,但每個executor占用資源僅僅是自己運行所需的資源,
           不需要考慮將來要運行的任務,之后,mesos會為每個executor動態分配資源,每分配一些,便可以運行一個新任務,單個Task運行完之后可以馬上釋放對應的資源。
           每個Task會匯報狀態給Mesos slave和Mesos Master,便於更加細粒度管理和容錯,這種調度模式類似於MapReduce調度模式,每個Task完全獨立,
           優點是便於資源控制和隔離,但缺點也很明顯,短作業運行延遲大。
 
3.Spark On YARN模式
    這是一種很有前景的部署模式。但限於YARN自身的發展,目前僅支持粗粒度模式(Coarse-grained Mode)。這是由於YARN上的Container資源是不可以動態伸縮的,
    一旦Container啟動之后,可使用的資源不能再發生變化,不過這個已經在YARN計划中了。 
    spark on yarn 的支持兩種模式: 
        1) yarn-cluster:適用於生產環境; 
        2) yarn-client:適用於交互、調試,希望立即看到app的輸出 
    yarn-cluster和yarn-client的區別在於yarn appMaster,每個yarn app實例有一個appMaster進程,是為app啟動的第一個container;
    負責從ResourceManager請求資源,獲取到資源后,告訴NodeManager為其啟動container。yarn-cluster和yarn-client模式內部實現還是有很大的區別。
    如果你需要用於生產環境,那么請選擇yarn-cluster;而如果你僅僅是Debug程序,可以選擇yarn-client。
 
總結: 
    這三種分布式部署方式各有利弊,通常需要根據實際情況決定采用哪種方案。進行方案選擇時,往往要考慮公司的技術路線(采用Hadoop生態系統還是其他生態系統)、
    相關技術人才儲備等。上面涉及到Spark的許多部署模式,究竟哪種模式好這個很難說,需要根據你的需求,如果你只是測試Spark Application,你可以選擇local模式。
    而如果你數據量不是很多,Standalone 是個不錯的選擇。當你需要統一管理集群資源(Hadoop、Spark等),那么你可以選擇Yarn或者mesos,但是這樣維護成本就會變高。 
    · 從對比上看,mesos似乎是Spark更好的選擇,也是被官方推薦的 
    · 但如果你同時運行hadoop和Spark,從兼容性上考慮,Yarn是更好的選擇。
    · 如果你不僅運行了hadoop,spark。還在資源管理上運行了docker,Mesos更加通用。 
    · Standalone對於小規模計算集群更適合!
編寫好的Spark程序一般通過Spark-submit指令的方式提交給Spark集群進行具體的任務計算,
Spark-submit指令可以指定一些向集群申請資源的參數(也可直接在Spark程序代碼中指定,參數生效的優先級最高),
在Linux環境下,可通過spark-submit –help 了解spark-submit指令的各種參數說明。
 
案例(Python任務提交): 
spark-submit –master spark://192.168.1.10:7077 –name router_app –total-executor-cores 8 –executor-memory 4g router_inout.py
 
常用的重要參數詳解: 
1) –master MASTER_URL: 指定要連接的集群模式(集群資源管理器) 
            standalone模式: spark://host:port, 如:spark://192.168.1.10:7077 
            Spark On Mesos模式 : mesos://host:port 
            Spark On YARN模式: yarn://host:port 
            本地模式:local
 
2) – deploy-mode DEPLOY_MODE : 指定任務的提交方式(client 和cluster) 
     client: 本地客戶端模式(默認方式),一般會在集群主節點安裝客戶端 
     cluster: 集群工作節點模式 
    任務最終都會提交給主節點處理,所以在指定任務提交方式時,考慮本地客戶端和集群工作節點對主節點的網絡開銷問題即可。
 
3)–name appName :設置任務的名稱,方便在webUI查看
 
4)–py-files PY_FILES :加載Python外部依賴文件
 
5)–driver-memory MEM:設置driver的運行內存(占用客戶端內存,用於通信及調度開銷,默認為1G)
 
6)–executor-memory MEM:設置每一個executor的運行內存(占用工作節點內存,主要用於執行任務的內存開銷),executor代表work節點上的一個進程。
 
7)–total-executor-cores NUM:設置任務占用的總CPU核數(即任務的並發量),由主節點指定各個工作節點CPU的使用數。 
                              注意:該參數選項只在Spark standalone and Mesos 模式下有效
 
8)–executor-cores NUM:設置執行任務的每一個executor的CPU核數(yarn模式有效,默認為1)或者工作節點的總CPU核數(standalone模式有效)
 
9)–num-executors NUM:設置任務的executor進程數(yarn模式下有效)
 
10)–conf PROP=VALUE:設置Spark的屬性參數 
    –conf spark.default.parallelism=1000 設置RDD分區大小,系統默認為200 
    –conf spark.storage.memoryFraction=0.5 設置內存分配大小(存儲),系統默認為0.6 
    –conf spark.shuffle.memoryFraction=0.3 設置shuffle上限內存空間,系統默認為0.2
編寫好的Spark程序一般通過Spark-submit指令的方式提交給Spark集群進行具體的任務計算,
Spark-submit指令可以指定一些向集群申請資源的參數(也可直接在Spark程序代碼中指定,參數生效的優先級最高),
在Linux環境下,可通過spark-submit –help 了解spark-submit指令的各種參數說明。
 
 
spark-submit -help 命令 查看所有參數幫助
 
Usage: spark-submit [options] <app jar | python file | R file> [app arguments]
Usage: spark-submit --kill [submission ID] --master [spark://...]
Usage: spark-submit --status [submission ID] --master [spark://...]
Usage: spark-submit run-example [options] example-class [example args]
 
Options:
  --master MASTER_URL         spark://host:port, mesos://host:port, yarn,
                              k8s://https://host:port, or local (Default: local[*]).
                              
  --deploy-mode DEPLOY_MODE   是否在本地啟動驅動程序 ("client") 或 在集群中的一台工作機上 ("cluster")
                              (默認值: client) 
                              
  --class CLASS_NAME          你的應用程序的主要類(對於Java/Scala應用程序)。
 
  --name NAME                 應用程序的名稱
  
  --jars JARS                 驅動程序上要包含的jar的逗號分隔列表和執行器類路徑
                       
  --packages                  要包含的jar maven坐標的逗號分隔列表在驅動程序和執行器類路徑上。
                              將搜索本地 Maven repo,然后是Maven Central和任何附加遠程存儲庫由--repositories 提供。
                              坐標應為groupid:artifactid:version的格式
                   
  --exclude-packages          groupid:artifactid的逗號分隔列表,在解析包中提供的依賴項以避免依賴關系沖突
 
 
  --repositories              以逗號分隔的其他遠程存儲庫列表搜索給定的maven坐標--packages
 
 
  --py-files PY_FILES         要放置的.zip、.egg或.py文件的逗號分隔列表
                              在pythonpath for python應用程序上。
                              
  --files FILES               要放置在工作中的文件的逗號分隔列表每個執行者的目錄。
                              這些文件的文件路徑可以通過sparkfiles.get(文件名)訪問in執行器
 
  --conf PROP=VALUE           任意Spark配置屬性
  
  --properties-file FILE      要從中加載額外屬性的文件的路徑。
                              如果沒有指定后,將查找conf/spark-defaults.conf。
 
  --driver-memory MEM         驅動程序內存(例如1000M、2G)(默認值:1024M)
  
  --driver-java-options       額外的Java選項傳遞給驅動程序。
  
  --driver-library-path       要傳遞給驅動程序的額外庫路徑項
  
  --driver-class-path         要傳遞給驅動程序的額外類路徑條目。注意添加的jar 自動包含在 --jar 類路徑
 
  --executor-memory MEM       每個執行器的內存(例如1000M、2G)(默認值:1G)
 
  --proxy-user NAME           提交應用程序時要模擬的用戶。
                              此參數不適用於--principal/--keytab。
 
  --help, -h                  顯示此幫助消息並退出
  
  --verbose, -v               打印其他調試輸出。
  
  --version,                  打印當前spark的版本
 
 Cluster deploy mode only:
      --driver-cores NUM          驅動程序僅在群集模式下使用的核心數(默認值: 1)
 
 Spark standalone or Mesos with cluster deploy mode only:
      --supervise                 如果給定,則在出現故障時重新啟動驅動程序
      --kill SUBMISSION_ID        如果給定,則殺死指定的驅動程序。
      --status SUBMISSION_ID      如果給定,則請求指定的驅動程序的狀態。
 
 Spark standalone and Mesos only:
      --total-executor-cores NUM  所有執行器的核心總數。
 
 Spark standalone and YARN only:
      --executor-cores NUM        每個executor 占用的cores核心數 
                                  (默認值: 1 在 YARN 模式,或者 工作機上所有可用的核心處於 standalone 模式)
 YARN-only:
      --queue QUEUE_NAME          要提交到的YARN隊列(默認值: "default") 
      
      --num-executors NUM         要啟動的executors數 (默認值: 2)。如果啟用了動態分配,則executors至少為num。
 
      --archives ARCHIVES         以逗號分隔的要提取到每個執行者的工作目錄。
 
      --principal PRINCIPAL       用於登錄到kdc的主體, 在HDFS上安全運行
                                   
      --keytab KEYTAB             包含鍵選項卡的文件的完整路徑上面指定的主體。
                                  此密鑰選項卡將復制到通過安全的分布式緩存,用於更新登錄票證tickets 和 定期委派令牌tokens 

 


免責聲明!

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



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