作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!
1. 关于Spark
1.1 Spark简介
Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,基于Scala开发。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。
与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark支持更灵活的函数定义,可以将应用处理速度提升一到两个数量级,并且提供了众多方便的实用工具,包括SQL查询、流处理、机器学习和图处理等:
Spark体系架构包括如下三个主要组件:数据存储、API、管理框架,如图所示。
1.2 Spark特点
Apache Spark 具有以下特点:
使用先进的 DAG 调度程序,查询优化器和物理执行引擎,以实现性能上的保证;
多语言支持,目前支持的有 Java,Scala,Python 和 R;
提供了 80 多个高级 API,可以轻松地构建应用程序;
支持批处理,流处理和复杂的业务分析;
丰富的类库支持:包括 SQL,MLlib,GraphX 和 Spark Streaming 等库,并且可以将它们无缝地进行组合;
丰富的部署模式:支持本地模式和自带的集群模式,也支持在 Hadoop,Mesos,Kubernetes 上运行;
多数据源支持:支持访问 HDFS,Alluxio,Cassandra,HBase,Hive 以及数百个其他数据源中的数据。
1.3 Spark集群架构
Term(术语)Meaning(含义)ApplicationSpark 应用程序,由集群上的一个 Driver 节点和多个 Executor 节点组成。Driver program主运用程序,该进程运行应用的 main() 方法并且创建 SparkContextCluster manager集群资源管理器(例如,Standlone Manager,Mesos,YARN)Worker node执行计算任务的工作节点Executor位于工作节点上的应用进程,负责执行计算任务并且将输出数据保存到内存或者磁盘中Task被发送到 Executor 中的工作单元
执行过程:
用户程序创建 SparkContext 后,它会连接到集群资源管理器,集群资源管理器会为用户程序分配计算资源,并启动 Executor;
Driver 将计算程序划分为不同的执行阶段和多个 Task,之后将 Task 发送给 Executor;
Executor 负责执行 Task,并将执行状态汇报给 Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器。
目前Spark推出了2.0版本,性能大幅度提升,并在数据流方面退推出了很多新功能。
2. 在Docker中运行Spark
2.1 使用官方镜像
用户可以使用sequenceiq/spark镜像,版本方面支持Hadoop 2.6.0,Apache Spark v1.6.0(CentOS)。同时此镜像还包含Dockerfile,用户可以基于它构建自定义的Apache Spark镜像。
用户使用docker pull指令直接获取镜像:
$ docker pull sequenceiq/spark:1.6.0
1.6.0: Pulling from sequenceiq/spark
...
9d406b080497: Pull complete
Digest: sha256:64fbdd1a9ffb6076362359c3895d089afc65a533c0ef021ad4ae6da3f8b2a413
Status: Downloaded newer image for sequenceiq/spark:1.6.0
也可以使用docker build指令构建spark镜像:
$ docker build --rm -t sequenceiq/spark:1.6.0 .
另外,用户在运行容器时,需要映射YARN UI需要的端口:
$ docker run -it -p 8088:8088 -p 8042:8042 -h sandbox sequenceiq/spark:1.6.0 bash
bash-4.1#
启动后,可以使用bash命令行来查看namenode日志等信息:
bash-4.1# cat /usr/local/hadoop/logs/hadoop-root-namenode-sandbox.out
ulimit -a for user root
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7758
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1048576
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
2.2 验证
基于YARN部署Spark系统时,用户有两种部署方式可选:YARN客户端模式和YARN集群模式。下面分别论述两种部署方式。
**YARN客户端模式: **
在YARN客户端模式中,SparkContext(或称为驱动程序,driver program)运行在客户端进程中,应用的master仅处理来自YARN的资源管理请求
# 运行spark shell
spark-shell \
--master yarn-client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1
# 执行以下指令,若返回1000则符合预期
scala> sc.parallelize(1 to 1000).count()
YARN集群模式:
在YARN集群模式中,Spark driver驱动程序运行于应用master的进程 中,即由YARN从集群层面进行管理。下面,用户以Pi值计算为例子,展现两种模式的区别:
Pi计算(YARN集群模式):
# 执行以下指令,成功后,日志中会新增记录 "Pi is roughly 3.1418"
# 集群模式下用户必须制定--files参数,以开启metrics
spark-submit \
--class org.apache.spark.examples.SparkPi \
--files $SPARK_HOME/conf/metrics.properties \
--master yarn-cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.0-hadoop2.6.0.jar
Pi计算(YARN客户端模式):
#执行以下指令,成功后,命令行将显示 "Pi is roughly 3.1418"
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn-client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.0-hadoop2.6.0.jar
2.3 容器外访问Spark
如果需要从容器外访问Spark环境,则需要设置YARN_CONF_DIR环境变量。yarn-remote-client文件夹内置远程访问的配置信息:
export YARN_CONF_DIR="`pwd`/yarn-remote-client"
只能使用根用户访问Docker的HDFS环境。当用户从容器集群外部,使用非根用户访问Spark环境时,则需要配置HADOOP_USER_NAME环境变量:
export HADOOP_USER_NAME=root
👑👑👑结束语👑👑👑
版权归原作者 小鹏linux 所有, 如有侵权,请联系我们删除。