轉載: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