我想自己编写程序入门

1381人阅读
BIGDATA(44)
spark-env.sh
export JAVA_HOME=/usr/local/jdk1.7
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=10.67.2.21
export MASTER=spark://10.67.2.21:7077
export SPARK_WORKER_CORES=1
export SPARK_LOCAL_IP=10.67.2.21
1.启动master
sbin/start-master.sh
2.启动slave
在conf/slaves中配上本机的主机名,如是ubuntu
并执行: ./start-slaves.sh --master spark://ubuntu:7077 --webui-port 8082
3.thriftserver启动
./start-thriftserver --master spark://ubuntu:7077
1.需要在/etc/hosts配置主机名与ip的对应关系
2.如果是虚拟机的话,一定将ip配定死;不能够是DHCP动态IP;要不然在重新启动计算机后,ip发生了变化,可能会导致查询假死的问题(log中会报错连接不上hdfs的问题,用旧ip)
性能比较好的配置文件:
thriftserver启动时:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1023453次
积分:13131
积分:13131
排名:第757名
原创:458篇
转载:61篇
评论:163条
(4)(2)(9)(3)(4)(4)(1)(13)(6)(4)(7)(8)(6)(6)(2)(1)(2)(3)(4)(12)(11)(2)(4)(9)(10)(9)(1)(3)(1)(5)(6)(7)(4)(4)(2)(7)(1)(5)(9)(4)(16)(8)(13)(3)(6)(5)(12)(7)(14)(23)(15)(20)(20)(13)(9)(5)(15)(2)(8)(9)(7)(2)(8)(11)(2)(8)(5)(3)(10)(18)(12)(3)(6)【Spark】Spark的Standalone模式安装部署 - 简书
【Spark】Spark的Standalone模式安装部署
Spark运行模式
Spark 有很多种模式,最简单就是单机本地模式,还有单机伪分布式模式,复杂的则运行在集群中,目前能很好的运行在 Yarn和 Mesos 中,当然 Spark 还有自带的 Standalone 模式,对于大多数情况 Standalone 模式就足够了,如果企业已经有 Yarn 或者 Mesos 环境,也是很方便部署的。
local(本地模式):常用于本地开发测试,本地还分为local单线程和local-cluster多线程;
standalone(集群模式):典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持ZooKeeper来实现 HA
on yarn(集群模式): 运行在 yarn 资源管理器框架之上,由 yarn 负责资源管理,Spark 负责任务调度和计算
on mesos(集群模式): 运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算
on cloud(集群模式):比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3;Spark 支持多种分布式存储系统:HDFS 和 S3
Spark Standalone集群部署
这里我下载的是Spark的编译版本,否则需要事先自行编译
Spark需要Hadoop的HDFS作为持久化层,所以在安装Spark之前需要安装Hadoop,这里Hadoop的安装就不介绍了,给出一个教程
实现创建hadoop用户,Hadoop、Spark等程序都在该用户下进行安装
ssh无密码登录,Spark集群中各节点的通信需要通过ssh协议进行,这需要事先进行配置。通过在hadoop用户的.ssh目录下将其他用户的id_rsa.pub公钥文件内容拷贝的本机的authorized_keys文件中,即可事先无登录通信的功能
Java环境的安装,同时将JAVA_HOME、CLASSPATH等环境变量放到主目录的.bashrc,执行source .bashrc使之生效
这里配置工作需要以下几个步骤:
解压Spark二进制压缩包
配置conf/spark-env.sh文件
配置conf/slave文件
下面具体说明一下:
配置Spark的运行环境,将spark-env.sh.template模板文件复制成spark-env.sh,然后填写相应需要的配置内容:
export SPARK_MASTER_IP=hadoop1
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORDER_INSTANCES=1
export SPARK_WORKER_MEMORY=3g
其他选项内容请参照下面的选项说明:
# Options for the daemons used in the standalone deploy mode:
# - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
conf/slave文件用户分布式节点的配置,这里只需要在slave文件中写入该节点的主机名即可
将以上内容都配置好了,将这个spark目录拷贝到各个节点scp -r spark hadoop@hadoop2:~
接下来就可以启动集群了,在Spark目录中执行sbin/start-all.sh,然后可以通过netstat -nat命令查看端口7077的进程,还可以通过浏览器访问hadoop1:8080了解集群的概况
Spark Client部署
Spark Client的作用是,事先搭建起Spark集群,然后再物理机上部署客户端,然后通过该客户端提交任务给Spark集群。由于上面介绍了Standalone分布式集群是如何搭建的,这里只需将集群上的spark文件夹拷贝过来。最简单的Spark客户端访问集群的方式就是通过Spark shell的方式:bin/spark-shell --master spark://hadoop1:7077这样就可以访问集群了。这样在浏览器的Spark集群界面上就可以看到Running Applications一栏中有Spark shell的应用在执行。
Spark Standalone伪分布式部署
伪分布式是在一台机器上进行部署来模拟分布式的集群,这里部署的过程和Standalone集群的部署是类似的,事前的工作都是一样的,这里只是在配置文件中做相应的修改就可以了。
这里还是配置这两个文件:
配置conf/spark-env.sh文件配置conf/slave文件
修改spark-env.sh文件,修改master的ip,这里主机名和用户ip分别在/etc/hostname和/etc/hosts文件中进行配置export SPARK_MASTER_IP=jason
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORDER_INSTANCES=1
export SPARK_WORKER_MEMORY=3g
slave文件中,填写自己的主机名,比如我的主机名jason
转载请注明作者Jason Ding及其出处百度搜索jasonding1354进入我的博客主页Spark&Standalone模式
安装Spark&Standalone集群
手动启动集群
集群创建脚本
提交应用到集群
创建Spark应用
资源调度及分配
监控与日志
与Hadoop共存
配置网络安全端口
基于Zookeeper的Master
本地系统的单节点恢复
除了运行在mesos或yarn集群管理器中,spark也提供了简单的standalone部署模式。你可以通过手动启动master和worker节点来创建集群,或者用官网提供的启动脚本。这些守护进程也可以只在一台机器上以便测试使用。
1.安装Spark&Standalone集群
安装Spark&Standalone集群,你只需要在每个节点上部署编译好的Spark即可。你可以在官网上得到已经预编译好的,也可以根据自己的需要进行编译。
2.手动启动集群
你可以启动Standalone模式的master服务,通过执行如下命令:
./sbin/start-master.sh
一旦启动,master节点将打印出Spark://HOST:PORT&URL,你可以用这个URL来连接worker节点或者把它赋值给&master&参数传递给SparkContext。你也可以在master的WEB&UI找到这个URL,默认的是http://localhost:8080,最好是http://master所在的ip地址:8080,这样和master在同一个局域网内的机器都可以访问。
同样地,你可以启动一个或多个worker节点并把它注册到master节点上,执行如下命令:
./sbin/start-slave.sh&&master-spark-URL&
一旦你启动了worker节点,通过master的WEB&UI,你可以看到注册到它上面的worker的信息,比如CPU核数、内存等。
最后,下面的配置选项可以传递给master和worker节点。
-h&HOST,&--host&HOST
Hostname&to&listen&on
-i&HOST,&--ip&HOST
Hostname&to&listen&on&(deprecated,&use&-h&or&--host)
-p&PORT,&--port&PORT
Port&for&service&to&listen&on&(default:&7077&for&master,&random&for&worker)
--webui-port&PORT
Port&for&web&UI&(default:&8080&for&master,&8081&for&worker)
-c&CORES,&--cores&CORES
Total&CPU&cores&to&allow&Spark&applications&to&use&on&the&machine&(default:&all&available);&only&on&worker
-m&MEM,&--memory&MEM
Total&amount&of&memory&to&allow&Spark&applications&to&use&on&the&machine,&in&a&format&like&1000M&or&2G&(default:&your&machine's&total&RAM&minus&1&GB);&only&on&worker
-d&DIR,&--work-dir&DIR
Directory&to&use&for&scratch&space&and&job&output&logs&(default:&SPARK_HOME/work);&only&on&worker
--properties-file&FILE
Path&to&a&custom&Spark&properties&file&to&load&(default:&conf/spark-defaults.conf)
3.集群创建脚本
如果用脚本启动集群的话,你应该在你的Spark_HOME下创建一个conf/slaves,这个slaves文件必须包含worker的主机名,每行一个。如果conf/slaves不存在的话,创建脚本默认值启动本机单个节点,这对于测试很有用。注意,master通过ssh来和worker进行通信。
一旦你设置了这个文件,你可以通过下面的Shell脚本来启动或停止集群,类似于Hadoop的部署脚本,这些脚本在SPARK_HOME/sbin下找到。
sbin/start-master.sh&-&启动脚本所在机器上的master节点
sbin/start-slaves.sh&-&启动conf/slaves文件中指定的slave所有节点
sbin/start-slave.sh&-&启动脚本所在的机器上的slave节点
sbin/start-all.sh&-&启动脚本所在的slave节点及与其相关的slave节点
sbin/stop-master.sh&-&停止脚本所在机器上的master节点
sbin/stop-slaves.sh&-&启动conf/slaves文件中指定的slave所有节点&
sbin/stop-all.sh&-&停止脚本所在机器上的master节点
注意这些脚本必须在你想要运行Spark&master节点上,而不是你本地机器
你可以在conf/spark-env.sh中选择性地配置下面的选项,这个文件集群中的每台机器都必须有。
Environment&Variable
SPARK_MASTER_IP
Bind&the&master&to&a&specific&IP&address,&for&example&a&public&one.
SPARK_MASTER_PORT
Start&the&master&on&a&different&port&(default:&7077).
SPARK_MASTER_WEBUI_PORT
Port&for&the&master&web&UI&(default:&8080).
SPARK_MASTER_OPTS
Configuration&properties&that&apply&only&to&the&master&in&the&form&"-Dx=y"&(default:&none).&See&below&for&a&list&of&possible&options.
SPARK_LOCAL_DIRS
Directory&to&use&for&"scratch"&space&in&Spark,&including&map&output&files&and&RDDs&that&get&stored&on&disk.&This&should&be&on&a&fast,&local&disk&in&your&system.&It&can&also&be&a&comma-separated&list&of&multiple&directories&on&different&disks.&
SPARK_WORKER_CORES
Total&number&of&cores&to&allow&Spark&applications&to&use&on&the&machine&(default:&all&available&cores).
SPARK_WORKER_MEMORY
Total&amount&of&memory&to&allow&Spark&applications&to&use&on&the&machine,&e.g.&1000m,&2g&(default:&total&memory&minus&1&GB);&note&that&each&application's&individual&memory&is&configured&using&its&spark.executor.memory&property.
SPARK_WORKER_PORT
Start&the&Spark&worker&on&a&specific&port&(default:&random).
SPARK_WORKER_WEBUI_PORT
Port&for&the&worker&web&UI&(default:&8081).
SPARK_WORKER_INSTANCES
Number&of&worker&instances&to&run&on&each&machine&(default:&1).&You&can&make&this&more&than&1&if&you&have&have&very&large&machines&and&would&like&multiple&Spark&worker&processes.&If&you&do&set&this,&make&sure&to&also&set&SPARK_WORKER_CORES&explicitly&to&limit&the&cores&per&worker,&or&else&each&worker&will&try&to&use&all&the&cores.&
SPARK_WORKER_DIR
Directory&to&run&applications&in,&which&will&include&both&logs&and&scratch&space&(default:&SPARK_HOME/work).
SPARK_WORKER_OPTS
Configuration&properties&that&apply&only&to&the&worker&in&the&form&"-Dx=y"&(default:&none).&See&below&for&a&list&of&possible&options.
SPARK_DAEMON_MEMORY
Memory&to&allocate&to&the&Spark&master&and&worker&daemons&themselves&(default:&1g).
SPARK_DAEMON_JAVA_OPTS
JVM&options&for&the&Spark&master&and&worker&daemons&themselves&in&the&form&"-Dx=y"&(default:&none).
SPARK_PUBLIC_DNS
The&public&DNS&name&of&the&Spark&master&and&workers&(default:&none).
SPARK_MASTER_OPTS可以配置下面的系统属性:
Property&Name
spark.deploy.retainedApplications
The&maximum&number&of&completed&applications&to&display.&Older&applications&will&be&dropped&from&the&UI&to&maintain&this&limit.
spark.deploy.retainedDrivers
The&maximum&number&of&completed&drivers&to&display.&Older&drivers&will&be&dropped&from&the&UI&to&maintain&this&limit.
spark.deploy.spreadOut
Whether&the&standalone&cluster&manager&should&spread&applications&out&across&nodes&or&try&to&consolidate&them&onto&as&few&nodes&as&possible.&Spreading&out&is&usually&better&for&data&locality&in&HDFS,&but&consolidating&is&more&efficient&for&compute-intensive&workloads.&
spark.deploy.defaultCores
(infinite)
Default&number&of&cores&to&give&to&applications&in&Spark's&standalone&mode&if&they&don't&set&spark.cores.max.&If&not&set,&applications&always&get&all&available&cores&unless&they&configure&spark.cores.max&themselves.&Set&this&lower&on&a&shared&cluster&to&prevent&users&from&grabbing&the&whole&cluster&by&default.&
spark.worker.timeout
Number&of&seconds&after&which&the&standalone&deploy&master&considers&a&worker&lost&if&it&receives&no&heartbeats.&
SPARK_WORKER_OPTS可以配置下面的系统属性:
Property&Name
spark.worker.cleanup.enabled
Enable&periodic&cleanup&of&worker&/&application&directories.&Note&that&this&only&affects&standalone&mode,&as&YARN&works&differently.&Only&the&directories&of&stopped&applications&are&cleaned&up.&
spark.worker.cleanup.interval
1800&(30&minutes)
Controls&the&interval,&in&seconds,&at&which&the&worker&cleans&up&old&application&work&dirs&on&the&local&machine.&
spark.worker.cleanup.appDataTtl
7&*&24&*&3600&(7&days)
The&number&of&seconds&to&retain&application&work&directories&on&each&worker.&This&is&a&Time&To&Live&and&should&depend&on&the&amount&of&available&disk&space&you&have.&Application&logs&and&jars&are&downloaded&to&each&application&work&dir.&Over&time,&the&work&dirs&can&quickly&fill&up&disk&space,&especially&if&you&run&jobs&very&frequently.&
4.提交应用到集群
在Spark集群中运行一个Spark应用程序,需要把master节点的Spark://IP:PORT&URL传递给SparkContext&的构造函数中。
在交互式Shell中Spark应用程序,需运行下面的命令:
./bin/spark-shell&--master&spark://IP:PORT
你也可以传递选项--total-executor-cores&&numCores&来控制Spark&Shell使用的机器的核数。
5.创建Spark应用
spark-submit脚本提供了提供应用到集群最直接的方式。对于Standalone模式而言,Spark目前支持两种部署模式。在Client模式中,Driver程序在提交命令的机器上。在Cluster模式中,Driver从集群中的worker节点中任取一个运行驱动程序。
如果你的应用通过Spark&submit提交,这个应用jar自动分发到集群中的所有worker节点上。对于你的应用依赖的额外的jars,你应该通过--jars&参数来指定,多个之间用逗号分隔(如果:--jars&jar1,jar2)
另外,standalone&cluster模式也自动重启你的应用程序。为了使用这个特性,你可以在spark-submit启动你的应用程序时传递--supervise参数。
./bin/spark-class&org.apache.spark.deploy.Client&kill&&master&url&&&driver&ID&
6.资源调度及分配
Standalone&cluster模式目前仅支持应用调度的FIFO模式。为了运行多个用户,你可以控制每个应用使用的最大资源。默认,它会使用集群中所有机器的核数,这只对于集群中只有一个应用有效。你可以通过&spark.cores.max&参数来控制核数,如下所示:
val&conf&=&new&SparkConf()
&&&&&&&&&&&&&.setMaster(...)
&&&&&&&&&&&&&.setAppName(...)
&&&&&&&&&&&&&.set("spark.cores.max",&"10")val&sc&=&new&SparkContext(conf)
另外,你可以在集群的master中配置&spark.deploy.defaultCores参数来改变默认值。如下所示:
export&SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=&value&"
7.监控与日志
Spark&Standalone模式提供了一个web接口来监控集群。master和每个worker有他们自己的WEB&UI。默认你可以通过8080端口访问master的WEB&UI。这个端口可以在配置文件中修改或在命令行中选项修改。
另外,每个job的详细日志默认写入到每个slave节点的工作目录(默认SPARK_HOME/work)。在目录下,对于每个job,你会看到两个文件分别是stdout和stderr。
8.与Hadoop共存
你可以基于你现有的Hadoop集群运行Spark,只需要在同样的机器上启动单独的服务即可。在Spark中访问Hadoop中的数据,只需要使用hdfs://&URL&(典型hdfs://&namenode&:9000/path)路径即可。另外,你可以为Spark创建一个独立的集群,通过网络仍然可以访问HDFS,这可能比本次磁盘慢。
9.配置网络安全端口
Spark大量使用网络,一些环境有严格的防火墙要求。想要了解配置的端口,请看安全模块。
10.高可用性
默认,standalone集群调度对于worker节点的失效是有弹性的。然而,集群调度器通过master做决策,默认只有单个节点。如果master宕机了,将不会再创建新的应用。为了避免单点故障,我们提供两种高可用性模式,详情如下。
10.1基于Zookeeper的Master
使用Zookeeper来提供leader选举和一些转态存储,你可以在基于Zookeeper的集群中启动多个master。一旦一个master被选中为&leader&,其他的将处于standby转态。如果当前的leader宕机了,Zookeeper将会重新选举出另外一个master,从前一个master的转态中继续任务调度。整个的恢复过程耗时在1-2分钟。注意,这种延迟仅仅影响调用新的应用程序而不影响正在运行的应用。
为了支持这种恢复模式,你可以在spark-env.sh中设置SPARK_DAEMON_JAVA_OPTS配置如下选项:
System&property
spark.deploy.recoveryMode
Set&to&ZOOKEEPER&to&enable&standby&Master&recovery&mode&(default:&NONE).
spark.deploy.zookeeper.url
The&ZooKeeper&cluster&url&(e.g.,&192.168.1.100:.1.101:2181).
spark.deploy.zookeeper.dir
The&directory&in&ZooKeeper&to&store&recovery&state&(default:&/spark).
如果你集群中已经安装好了Zookeeper,允许HA是很简单的。只需要在不同的节点上启动读个master进程即可,master可以随时增删。
为了调度新的应用或集群中添加worker,他们需要知道当期啊leader&的ip地址。这仅需要传递一个list即可。例如,你通过spark://host1:port1,host2:port2来启动应用程序时,如果host1宕机了,集群仍让正常,因为集群已经重新找到了一个新的leader,即host2
10.2本地系统的单节点恢复
Zookeeper是最好的HA方式,但如果你想要master如果宕了重启的话,文件系统模式支持。当应用程序和worker注册到master后,他们有足够的转态写入到了特定目录中,这些转态可以在master进程重启时恢复。
为了支持这种恢复模式,你可以在spark-env.sh中设置SPARK_DAEMON_JAVA_OPTS配置如下选项:
System&property
spark.deploy.recoveryMode
Set&to&FILESYSTEM&to&enable&single-node&recovery&mode&(default:&NONE).
spark.deploy.recoveryDirectory
The&directory&in&which&Spark&will&store&recovery&state,&accessible&from&the&Master's&perspective.
这种解决方案被用在monit这样的系统中。
尽管这种文件恢复模式看起来很好,但效果不太好。特别,通过sotp-master.sh来杀死一个master不能清除它的恢复状态,所以无论你何时启动一个新的master,它将进行恢复模式。这可能导致启动时间的增加。
尽管这种方式官网不推荐,你可以挂载一个NFS目录作为一个恢复目录,如果原来的master宕了,你可以在一个新的节点上启动一个master,它能正确地恢复之前注册的应用程序和workers。
阅读(...) 评论()

我要回帖

更多关于 如何编写程序 的文章

 

随机推荐