Spark入门(三)

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

三、服务端介绍

1. 硬件&部署建议

  1. HDFS 部署在同一台机器上,其次部署在同一个局域网下;
  2. HBase(低延迟存储) 分开部署;
  3. 配置 4-8 个磁盘,无RAID;
  4. Linux下选择 noatime 安装磁盘以减少不必要的写入;
  5. Spark 配置中 spark.local.dir 为本地磁盘的逗号分割列表;可与 HDFS 共用磁盘;
  6. 内存 >= 8GiB 且 <=200GiB,Spark 使用内存最多占比 75%;
  7. 万兆网卡;
  8. 至少 8-16 CPU核数;

2. 环境变量

环境变量 含义
JAVA_HOME Java的安装位置(如果不是默认设置PATH)。
PYSPARK_PYTHON 在驱动程序和工作程序中都可用于PySpark的Python二进制可执行文件(python2.7如果可用,则为默认值,否则为python)。spark.pyspark.python如果设置了属性,则优先
PYSPARK_DRIVER_PYTHON 仅在驱动程序中用于PySpark的Python二进制可执行文件(默认为PYSPARK_PYTHON)。spark.pyspark.driver.python如果设置了属性,则优先
SPARKR_DRIVER_R 用于SparkR shell的R二进制可执行文件(默认为R)。spark.r.shell.command如果设置了属性,则优先
SPARK_LOCAL_IP 绑定机器的IP地址。
SPARK_PUBLIC_DNS 您的Spark程序的主机名将播发到其他计算机。
SPARK_MASTER_HOST 将主服务器绑定到特定的主机名或IP地址,例如公共主机名或IP地址。
SPARK_MASTER_PORT 在其他端口上启动主服务器(默认:7077)。
SPARK_MASTER_WEBUI_PORT 主Web UI的端口(默认值:8080)。
SPARK_MASTER_OPTS 仅以“ -Dx = y”的形式应用于主服务器的配置属性(默认值:无)。请参阅下面的可能选项列表。
SPARK_LOCAL_DIRS 用于Spark中“临时”空间的目录,包括映射输出文件和存储在磁盘上的RDD。它应该在系统中的快速本地磁盘上。它也可以是不同磁盘上多个目录的逗号分隔列表。
SPARK_WORKER_CORES 允许Spark应用程序在计算机上使用的核心总数(默认值:所有可用的核心)。
SPARK_WORKER_MEMORY 允许Spark应用程序在计算机上使用的内存总量,例如1000m2g(默认值:总内存减去1 GiB);请注意,每个应用程序的单独内存都是使用其spark.executor.memory属性配置的。
SPARK_WORKER_PORT 在特定端口上启动Spark worker(默认值:随机)。
SPARK_WORKER_WEBUI_PORT 辅助Web UI的端口(默认值:8081)。
SPARK_WORKER_DIR 要在其中运行应用程序的目录,其中将包括日志和临时空间(默认值:SPARK_HOME / work)。
SPARK_WORKER_OPTS 仅以“ -Dx = y”的形式应用于工作程序的配置属性(默认值:无)。请参阅下面的可能选项列表。
SPARK_DAEMON_MEMORY 分配给Spark主守护程序和辅助守护程序本身的内存(默认值:1g)。
SPARK_DAEMON_JAVA_OPTS Spark主服务器和辅助服务器守护程序的JVM选项本身以“ -Dx = y”的形式出现(默认值:无)。
SPARK_DAEMON_CLASSPATH Spark主守护程序和辅助守护程序本身的类路径(默认值:无)。
SPARK_PUBLIC_DNS Spark主服务器和辅助服务器的公共DNS名称(默认值:无)。

四、客户端介绍

1. 关键配置

val conf = new SparkConf()
  .setMaster(...)
  .setAppName(...)
  .set("spark.cores.max", "10")
val sc = new SparkContext(conf)
复制代码
  1. spark.executor.cores 分配给每个应用程序的CPU核数;
  2. spark.cores.max 限制使用的CPU核数;

2. 提交作业

${SPARK_HOME}/bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]
  
# Run application locally on 8 cores
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master local[8] \
  /path/to/examples.jar \
  100

# Run on a Spark standalone cluster in client deploy mode
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://207.184.161.138:7077 \
  --executor-memory 20G \
  --total-executor-cores 100 \
  /path/to/examples.jar \
  1000

# Run on a Spark standalone cluster in cluster deploy mode with supervise
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://207.184.161.138:7077 \
  --deploy-mode cluster \
  --supervise \
  --executor-memory 20G \
  --total-executor-cores 100 \
  /path/to/examples.jar \
  1000

# Run on a YARN cluster
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master yarn \
  --deploy-mode cluster \  # can be client for client mode
  --executor-memory 20G \
  --num-executors 50 \
  /path/to/examples.jar \
  1000

# Run a Python application on a Spark standalone cluster
./bin/spark-submit \
  --master spark://207.184.161.138:7077 \
  examples/src/main/python/pi.py \
  1000

# Run on a Mesos cluster in cluster deploy mode with supervise
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master mesos://207.184.161.138:7077 \
  --deploy-mode cluster \
  --supervise \
  --executor-memory 20G \
  --total-executor-cores 100 \
  http://path/to/examples.jar \
  1000

# Run on a Kubernetes cluster in cluster deploy mode
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master k8s://xx.yy.zz.ww:443 \
  --deploy-mode cluster \
  --executor-memory 20G \
  --num-executors 50 \
  http://path/to/examples.jar \
  1000
复制代码