1. 程式人生 > 實用技巧 >spark提交命令 spark-submit 的引數 executor-memory、executor-cores、num-executors、spark.default.parallelism分析

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