spark提交命令 spark-submit 的引數 executor-memory、executor-cores、num-executors、spark.default.parallelism分析
阿新 • • 發佈:2020-11-03
轉載: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=300spark_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