Spark学习笔记 (二)Spark2.3 HA集群的分布式安装图文详解

来源:脚本之家  责任编辑:小易  

应该可以直接指定吧

本文实例讲述了Spark2.3 HA集群的分布式安装。分享给大家供大家参考,具体如下:

一、下载Spark安装包

1、从官网下载

SparkR是AMPLab发布的一个R开发包,为Apache  Spark提供了轻量的前端。Spar

http://spark.apache.org/downloads.html

要手动指定--total-num-executors

2、从微软的镜像站下载

分布式是一个概念,一个理论。任何需要大数据处理的领域都可以应用分布式,而Hadoop、spark等是

http://mirrors.hust.edu.cn/apache/

3、从清华的镜像站下载

spark on yarn 是客户端client提交任务,(我以spark on yarn 的 ya

https://mirrors.tuna.tsinghua.edu.cn/apache/

二、安装基础

早出晚归只要保证每天都能回家就没问题,猫咪不像狗狗,需要每天出去遛了才开心。建议您如果要把喵带回家,可以选择周五晚上,这样周末就有两天时间可以让猫咪在你的陪伴下熟悉一下生活环境,你也可以更好的观察猫咪的健康状况~喂食的话,幼猫时期一天三顿到四顿,如果中午不能回家,可以选择定时喂食器,成年之后一天两顿就可以啦~同时每天保证清水的供应。祝您的猫猫健康快乐,养猫愉快~

1、Java8安装成功

魅族的千元机阵营其实已经完全交给魅蓝事业部了,从当时的魅蓝Note当现在的魅蓝Note6,不乏有很多经典的机型。其中比较好的机型也有很多,我觉得还是需要一一列举出来。1.魅蓝E2第一个要推荐的当然是魅蓝E2,这个5.5寸的魅蓝E2采用的是联发科P20处理器,16nm的省电机制,采用流水灯设计,在用4颗闪光灯的配置下,不论是通知和闪光效果都十分的漂亮。金属的一体性机身,3+32GB的价格为1299,而4+64GB的版本是1599.整体价格还是比较公道的。魅蓝E2还是魅蓝一直在制作定制版的手机,这次也不例外,魅蓝E2是找了当时的大IP,变形金刚制作定制版,外观更加漂亮。喜欢定制版的小伙伴还是赶紧行

2、zookeeper安装成功

这个问题我可以回答你原因,因为我曾经是某品牌4S店汽车销售,你想如果你把这一切都办了,销售顾问吃啥,他们都有一堆KPI考核。你这样他不卖以下几点是主要原因,参考谈判,可以让你买到物美价廉的车。你相当于买走了一台裸车,这样公司对销售各项考核都不达标了,你的一台车拉低了他整个的考核指标。挣不到钱还要扣钱。车的价格可能你也压到了一定程度,也无差价应该,销售顾问没有任何发挥余地,自己也是挣不到钱,忙前忙后,不划算。既然你要这样,销售没有利润,可是他又要为这台裸车承担满意度等等,弄不好也要扣钱,这一点大部分客户也不理解。卖你一台裸车,他要用很多时间,但是却没有收益,不如他把时间用在开发新客户上。综上,你

3、hadoop2.7.5 HA安装成功

“你说,修地铁的时候,原来的那些土都到哪去了?”从天安门西站刚坐上地铁还没到西单,刚刚还一脸兴奋的李老三突然满面愁容地问我。真够操心的。北京地铁里的土离老家玉米地里的土隔着好几百里地呢。伺候好玉米地里的土就已经够累的了,哪还有心思和力气管首都人民的一亩三分地。“运走了呗。还能咋?”我懒得回答。李老三瞥了我一眼,显然是对我的答案不满意。也难怪,虽然我在北京每天要有两个多小时因为坐地铁上下班而不见天日,但在李老三眼里,这并不妨碍我仍然是我们村里最见过世面的人。“这么多土,咋运?我看,肯定是在地铁下面重新挖了坑,把土埋里边了。”把土挖坑埋起来?!亏他想得出来……我真不知道是要晕倒还是要跪倒。“那新挖

4、Scala安装成功(不安装进程也可以启动)

 

三、Spark安装过程

 1、上传并解压缩

[hadoop@hadoop1 ~]$ ls apps data exam inithive.conf movie spark-2.3.0-bin-hadoop2.7.tgz udf.jar cookies data.txt executions json.txt projects student zookeeper.out course emp hive.sql log sougou temp [hadoop@hadoop1 ~]$ tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -C apps/

2、为安装包创建一个软连接

[hadoop@hadoop1 ~]$ cd apps/ [hadoop@hadoop1 apps]$ ls hadoop-2.7.5 hbase-1.2.6 spark-2.3.0-bin-hadoop2.7 zookeeper-3.4.10 zookeeper.out [hadoop@hadoop1 apps]$ ln -s spark-2.3.0-bin-hadoop2.7/ spark [hadoop@hadoop1 apps]$ ll 总用量 36 drwxr-xr-x. 10 hadoop hadoop 4096 3月 23 20:29 hadoop-2.7.5 drwxrwxr-x. 7 hadoop hadoop 4096 3月 29 13:15 hbase-1.2.6 lrwxrwxrwx. 1 hadoop hadoop 26 4月 20 13:48 spark -> spark-2.3.0-bin-hadoop2.7/ drwxr-xr-x. 13 hadoop hadoop 4096 2月 23 03:42 spark-2.3.0-bin-hadoop2.7 drwxr-xr-x. 10 hadoop hadoop 4096 3月 23 2017 zookeeper-3.4.10 -rw-rw-r--. 1 hadoop hadoop 17559 3月 29 13:37 zookeeper.out [hadoop@hadoop1 apps]$

3、进入spark/conf修改配置文件

(1)进入配置文件所在目录

[hadoop@hadoop1 ~]$ cd apps/spark/conf/ [hadoop@hadoop1 conf]$ ll 总用量 36 -rw-r--r--. 1 hadoop hadoop 996 2月 23 03:42 docker.properties.template -rw-r--r--. 1 hadoop hadoop 1105 2月 23 03:42 fairscheduler.xml.template -rw-r--r--. 1 hadoop hadoop 2025 2月 23 03:42 log4j.properties.template -rw-r--r--. 1 hadoop hadoop 7801 2月 23 03:42 metrics.properties.template -rw-r--r--. 1 hadoop hadoop 865 2月 23 03:42 slaves.template -rw-r--r--. 1 hadoop hadoop 1292 2月 23 03:42 spark-defaults.conf.template -rwxr-xr-x. 1 hadoop hadoop 4221 2月 23 03:42 spark-env.sh.template [hadoop@hadoop1 conf]$

(2)复制spark-env.sh.template并重命名为spark-env.sh,并在文件最后添加配置内容

[hadoop@hadoop1 conf]$ cp spark-env.sh.template spark-env.sh [hadoop@hadoop1 conf]$ vi spark-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_73 #export SCALA_HOME=/usr/share/scala export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.5 export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-2.7.5/etc/hadoop export SPARK_WORKER_MEMORY=500m export SPARK_WORKER_CORES=1 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181 -Dspark.deploy.zookeeper.dir=/spark"

注:

#export SPARK_MASTER_IP=hadoop1  这个配置要注释掉。 

集群搭建时配置的spark参数可能和现在的不一样,主要是考虑个人电脑配置问题,如果memory配置太大,机器运行很慢。 

说明: 

-Dspark.deploy.recoveryMode=ZOOKEEPER    #说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复也是通过zookeeper来维护的。就是说用zookeeper做了spark的HA配置,Master(Active)挂掉的话,Master(standby)要想变成Master(Active)的话,Master(Standby)就要像zookeeper读取整个集群状态信息,然后进行恢复所有Worker和Driver的状态信息,和所有的Application状态信息; 

-Dspark.deploy.zookeeper.url=hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181#将所有配置了zookeeper,并且在这台机器上有可能做master(Active)的机器都配置进来;(我用了4台,就配置了4台) 

-Dspark.deploy.zookeeper.dir=/spark 

这里的dir和zookeeper配置文件zoo.cfg中的dataDir的区别??? 

-Dspark.deploy.zookeeper.dir是保存spark的元数据,保存了spark的作业运行状态; 

zookeeper会保存spark集群的所有的状态信息,包括所有的Workers信息,所有的Applactions信息,所有的Driver信息,如果集群 

(3)复制slaves.template成slaves

[hadoop@hadoop1 conf]$ cp slaves.template slaves [hadoop@hadoop1 conf]$ vi slaves

添加如下内容

hadoop1 hadoop2 hadoop3 hadoop4

(4)将安装包分发给其他节点

[hadoop@hadoop1 ~]$ cd apps/ [hadoop@hadoop1 apps]$ scp -r spark-2.3.0-bin-hadoop2.7/ hadoop2:$PWD [hadoop@hadoop1 apps]$ scp -r spark-2.3.0-bin-hadoop2.7/ hadoop3:$PWD [hadoop@hadoop1 apps]$ scp -r spark-2.3.0-bin-hadoop2.7/ hadoop4:$PWD

创建软连接

[hadoop@hadoop2 ~]$ cd apps/ [hadoop@hadoop2 apps]$ ls hadoop-2.7.5 hbase-1.2.6 spark-2.3.0-bin-hadoop2.7 zookeeper-3.4.10 [hadoop@hadoop2 apps]$ ln -s spark-2.3.0-bin-hadoop2.7/ spark [hadoop@hadoop2 apps]$ ll 总用量 16 drwxr-xr-x 10 hadoop hadoop 4096 3月 23 20:29 hadoop-2.7.5 drwxrwxr-x 7 hadoop hadoop 4096 3月 29 13:15 hbase-1.2.6 lrwxrwxrwx 1 hadoop hadoop 26 4月 20 19:26 spark -> spark-2.3.0-bin-hadoop2.7/ drwxr-xr-x 13 hadoop hadoop 4096 4月 20 19:24 spark-2.3.0-bin-hadoop2.7 drwxr-xr-x 10 hadoop hadoop 4096 3月 21 19:31 zookeeper-3.4.10 [hadoop@hadoop2 apps]$

4、配置环境变量

所有节点均要配置

[hadoop@hadoop1 spark]$ vi ~/.bashrc

#Spark export SPARK_HOME=/home/hadoop/apps/spark export PATH=$PATH:$SPARK_HOME/bin

保存并使其立即生效

[hadoop@hadoop1 spark]$ source ~/.bashrc

四、启动

1、先启动zookeeper集群

所有节点均要执行

[hadoop@hadoop1 ~]$ zkServer.sh start ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [hadoop@hadoop1 ~]$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Mode: follower [hadoop@hadoop1 ~]$

2、在启动HDFS集群

任意一个节点执行即可

[hadoop@hadoop1 ~]$ start-dfs.sh

3、在启动Spark集群

在一个节点上执行

[hadoop@hadoop1 ~]$ cd apps/spark/sbin/ [hadoop@hadoop1 sbin]$ start-all.sh

4、查看进程

5、问题

查看进程发现spark集群只有hadoop1成功启动了Master进程,其他3个节点均没有启动成功,需要手动启动,进入到/home/hadoop/apps/spark/sbin目录下执行以下命令,3个节点都要执行

[hadoop@hadoop2 ~]$ cd ~/apps/spark/sbin/ [hadoop@hadoop2 sbin]$ start-master.sh

6、执行之后再次查看进程

Master进程和Worker进程都以启动成功

五、验证

1、查看Web界面Master状态

hadoop1是ALIVE状态,hadoop2、hadoop3和hadoop4均是STANDBY状态

hadoop1节点

hadoop2节点

hadoop3

hadoop4

2、验证HA的高可用

手动干掉hadoop1上面的Master进程,观察是否会自动进行切换

干掉hadoop1上的Master进程之后,再次查看web界面

hadoo1节点,由于Master进程被干掉,所以界面无法访问

hadoop2节点,Master被干掉之后,hadoop2节点上的Master成功篡位成功,成为ALIVE状态

hadoop3节点

hadoop4节点

六、执行Spark程序on standalone

1、执行第一个Spark程序

[hadoop@hadoop3 ~]$ /home/hadoop/apps/spark/bin/spark-submit \ > --class org.apache.spark.examples.SparkPi \ > --master spark://hadoop1:7077 \ > --executor-memory 500m \ > --total-executor-cores 1 \ > /home/hadoop/apps/spark/examples/jars/spark-examples_2.11-2.3.0.jar \ > 100

其中的spark://hadoop1:7077是下图中的地址

运行结果

2、启动spark shell

[hadoop@hadoop1 ~]$ /home/hadoop/apps/spark/bin/spark-shell \ > --master spark://hadoop1:7077 \ > --executor-memory 500m \ > --total-executor-cores 1

参数说明:

--master spark://hadoop1:7077 指定Master的地址

--executor-memory 500m:指定每个worker可用内存为500m

--total-executor-cores 1: 指定整个集群使用的cup核数为1个

注意:

如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。

Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可

Spark Shell中已经默认将SparkSQl类初始化为对象spark。用户代码如果需要用到,则直接应用spark即可

3、 在spark shell中编写WordCount程序

(1)编写一个hello.txt文件并上传到HDFS上的spark目录下

[hadoop@hadoop1 ~]$ vi hello.txt [hadoop@hadoop1 ~]$ hadoop fs -mkdir -p /spark [hadoop@hadoop1 ~]$ hadoop fs -put hello.txt /spark

hello.txt的内容如下

you,jump i,jump you,jump i,jump jump

(2)在spark shell中用scala语言编写spark程序

scala> sc.textFile("/spark/hello.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/spark/out")

说明:

sc是SparkContext对象,该对象是提交spark程序的入口

textFile("/spark/hello.txt")是hdfs中读取数据

flatMap(_.split(" "))先map再压平

map((_,1))将单词和1构成元组

reduceByKey(_+_)按照key进行reduce,并将value累加

saveAsTextFile("/spark/out")将结果写入到hdfs中

(3)使用hdfs命令查看结果

[hadoop@hadoop2 ~]$ hadoop fs -cat /spark/out/p* (jump,5) (you,2) (i,2) [hadoop@hadoop2 ~]$

七、 执行Spark程序on YARN

1、前提

成功启动zookeeper集群、HDFS集群、YARN集群

2、启动Spark on YARN

[hadoop@hadoop1 bin]$ spark-shell --master yarn --deploy-mode client

报错如下:

报错原因:内存资源给的过小,yarn直接kill掉进程,则报rpc连接失败、ClosedChannelException等错误。

解决方法:

先停止YARN服务,然后修改yarn-site.xml,增加如下内容

<property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> <description>Whether virtual memory limits will be enforced for containers</description> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>4</value> <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description> </property>

将新的yarn-site.xml文件分发到其他Hadoop节点对应的目录下,最后在重新启动YARN。 

重新执行以下命令启动spark on yarn

[hadoop@hadoop1 hadoop]$ spark-shell --master yarn --deploy-mode client

启动成功

3、打开YARN的web界面

打开YARN WEB页面:http://hadoop4:8088

可以看到Spark shell应用程序正在运行

 单击ID号链接,可以看到该应用程序的详细信息

单击“ApplicationMaster”链接

4、运行程序

scala> val array = Array(1,2,3,4,5) array: Array[Int] = Array(1, 2, 3, 4, 5) scala> val rdd = sc.makeRDD(array) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at makeRDD at <console>:26 scala> rdd.count res0: Long = 5 scala>

再次查看YARN的web界面

 查看executors

5、执行Spark自带的示例程序PI

[hadoop@hadoop1 ~]$ spark-submit --class org.apache.spark.examples.SparkPi \ > --master yarn \ > --deploy-mode cluster \ > --driver-memory 500m \ > --executor-memory 500m \ > --executor-cores 1 \ > /home/hadoop/apps/spark/examples/jars/spark-examples_2.11-2.3.0.jar \ > 10

执行过程

[hadoop@hadoop1 ~]$ spark-submit --class org.apache.spark.examples.SparkPi \ > --master yarn \ > --deploy-mode cluster \ > --driver-memory 500m \ > --executor-memory 500m \ > --executor-cores 1 \ > /home/hadoop/apps/spark/examples/jars/spark-examples_2.11-2.3.0.jar \ > 10 2018-04-21 17:57:32 WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 2018-04-21 17:57:34 INFO ConfiguredRMFailoverProxyProvider:100 - Failing over to rm2 2018-04-21 17:57:34 INFO Client:54 - Requesting a new application from cluster with 4 NodeManagers 2018-04-21 17:57:34 INFO Client:54 - Verifying our application has not requested more than the maximum memory capability of the cluster (8192 MB per container) 2018-04-21 17:57:34 INFO Client:54 - Will allocate AM container, with 884 MB memory including 384 MB overhead 2018-04-21 17:57:34 INFO Client:54 - Setting up container launch context for our AM 2018-04-21 17:57:34 INFO Client:54 - Setting up the launch environment for our AM container 2018-04-21 17:57:34 INFO Client:54 - Preparing resources for our AM container 2018-04-21 17:57:36 WARN Client:66 - Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME. 2018-04-21 17:57:39 INFO Client:54 - Uploading resource file:/tmp/spark-93bd68c9-85de-482e-bbd7-cd2cee60e720/__spark_libs__8262081479435245591.zip -> hdfs://myha01/user/hadoop/.sparkStaging/application_1524303370510_0005/__spark_libs__8262081479435245591.zip 2018-04-21 17:57:44 INFO Client:54 - Uploading resource file:/home/hadoop/apps/spark/examples/jars/spark-examples_2.11-2.3.0.jar -> hdfs://myha01/user/hadoop/.sparkStaging/application_1524303370510_0005/spark-examples_2.11-2.3.0.jar 2018-04-21 17:57:44 INFO Client:54 - Uploading resource file:/tmp/spark-93bd68c9-85de-482e-bbd7-cd2cee60e720/__spark_conf__2498510663663992254.zip -> hdfs://myha01/user/hadoop/.sparkStaging/application_1524303370510_0005/__spark_conf__.zip 2018-04-21 17:57:44 INFO SecurityManager:54 - Changing view acls to: hadoop 2018-04-21 17:57:44 INFO SecurityManager:54 - Changing modify acls to: hadoop 2018-04-21 17:57:44 INFO SecurityManager:54 - Changing view acls groups to: 2018-04-21 17:57:44 INFO SecurityManager:54 - Changing modify acls groups to: 2018-04-21 17:57:44 INFO SecurityManager:54 - SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hadoop); groups with view permissions: Set(); users with modify permissions: Set(hadoop); groups with modify permissions: Set() 2018-04-21 17:57:44 INFO Client:54 - Submitting application application_1524303370510_0005 to ResourceManager 2018-04-21 17:57:44 INFO YarnClientImpl:273 - Submitted application application_1524303370510_0005 2018-04-21 17:57:45 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:45 INFO Client:54 - client token: N/A diagnostics: N/A ApplicationMaster host: N/A ApplicationMaster RPC port: -1 queue: default start time: 1524304664749 final status: UNDEFINED tracking URL: http://hadoop4:8088/proxy/application_1524303370510_0005/ user: hadoop 2018-04-21 17:57:46 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:47 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:48 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:49 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:50 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:51 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:52 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:53 INFO Client:54 - Application report for application_1524303370510_0005 (state: ACCEPTED) 2018-04-21 17:57:54 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:57:54 INFO Client:54 - client token: N/A diagnostics: N/A ApplicationMaster host: 192.168.123.104 ApplicationMaster RPC port: 0 queue: default start time: 1524304664749 final status: UNDEFINED tracking URL: http://hadoop4:8088/proxy/application_1524303370510_0005/ user: hadoop 2018-04-21 17:57:55 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:57:56 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:57:57 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:57:58 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:57:59 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:00 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:01 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:02 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:03 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:04 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:05 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:06 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:07 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:08 INFO Client:54 - Application report for application_1524303370510_0005 (state: RUNNING) 2018-04-21 17:58:09 INFO Client:54 - Application report for application_1524303370510_0005 (state: FINISHED) 2018-04-21 17:58:09 INFO Client:54 - client token: N/A diagnostics: N/A ApplicationMaster host: 192.168.123.104 ApplicationMaster RPC port: 0 queue: default start time: 1524304664749 final status: SUCCEEDED tracking URL: http://hadoop4:8088/proxy/application_1524303370510_0005/ user: hadoop 2018-04-21 17:58:09 INFO Client:54 - Deleted staging directory hdfs://myha01/user/hadoop/.sparkStaging/application_1524303370510_0005 2018-04-21 17:58:09 INFO ShutdownHookManager:54 - Shutdown hook called 2018-04-21 17:58:09 INFO ShutdownHookManager:54 - Deleting directory /tmp/spark-93bd68c9-85de-482e-bbd7-cd2cee60e720 2018-04-21 17:58:09 INFO ShutdownHookManager:54 - Deleting directory /tmp/spark-06de6905-8067-4f1e-a0a0-bc8a51daf535 [hadoop@hadoop1 ~]$

希望本文所述对大家spark程序设计有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

下面哪个不是spark的集群部署模式

spark有三种集群部署方式:

1、独立部署模式standalone,spark自身有一套完整的资源管理方式

2、架构于hadoop之上的spark集群

3、架构于mesos之上的spark集群

尝试了下搭建第一种独立部署模式集群,将安装方式记录如下:

环境ubuntu 12.04 (两台),部署方式是和hadoop类似,先在一台机器上部署成功后直接将文件打包拷贝到其他机器上,这里假设现在A机器上部署,并且A为master,最后B为slave

A和B均上创建用户spark

sudo useradd spark

以后spark的目录在集群所有机器的/home/spark/spark下(第一个spark是用户名,第二个spark是spark文件目录名)

保证A能无密码登陆到B上的spark用户,在ssh里面设置

这部分是现在master机器(A)上配置

0 首先保证A能无密码方式ssh至localhost和B ,具体方式参见: 点击打开链接

0.1 在A机器上执行

ssh-keygen -t rsa

cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

ssh localhost

那么A可以实现无密码登陆localhost

0.2 在B机器上执行

spark支持的分布式部署方式中哪个是错误的

目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos和

spark on YARN,其中,第一种类似于MapReduce

1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配)。本文将介绍这三种部署方式,并比较其优缺点。

为什么安装spark要在hadoop集群的基础上安装

Spark与Hadoop一样,是一种开源的集群计算环境,但在特定工作负载情况下比Hadoop更高效。Spark采用基于内存的分布式数据集,优化了迭代式的工作负载以及交互式查询。Spark采用Scala语言实现,使用Scala作为应用框架。与Hadoop不同的是,Spark和Scala紧密集成,Scala像管理本地collective对象那样管理分布式数据集。Spark支持分布式数据集上的迭代式任务,实际上它可以在Hadoop文件系统上与Hadoop一起运行,这是由第三方集群框架Mesos实现的。Spark由加州大学伯克利分校开发,用于构建大规模、低延时的数据分析应用。Spark集群计算架构Spark是一种类似于Hadoop的新型集群计算框架。不同的是,Spark用于特定工作负载类型的集群计算,这种计算在多个并行操作之间重用工作数据集(如机器学习算法)。为了优化这种类型的计算,Spark引入基于内存的集群计算,即将数据集缓存在内存中,减少访问延迟。Spark还引入了一个抽象概念,即弹性分布式数据集RDD(resilientdistributeddatasets)。RDD是一个分布在一组节点之间的只读的对象集合。这些集合是弹性的,即能够在部分数据集丢失的情况下重建。重建部分数据集的过程需要一种维护血统(lineage,即重建部分数据集所需的信息,说明数据是根据什么过程产生的)的容错机制支持。一个RDD可以是:(1)一个从文件创建的Scala对象,或(2)一个并行切片(分布在各个节点之间),或(3)从其他RDD转换得来,或(4)改变已有RDD的持久性,如请求将已有RDD缓存在内存中。Spark应用称为driver,实现单个节点或一组节点上的操作。与Hadoop一样,Spark支持单节点和多节点集群。对于多节点操作,Spark依附于Mesos集群管理器。Mesos为分布式应用提供了有效的资源共享和隔离的平台(见图1)。这种配置允许Spark与Hadoop共用一个节点共享池。图1Spark依赖于Mesos集群管理器实现资源共享和隔离Spark编程模型Driver在数据集上执行两种操作:行为(action)和转换(transformation)。action,即在数据集上执行计算,并向driver返回一个值;transformation,即从已有数据集创建新的数据集。例如,执行Reduce操作(使用某个函数)、遍历数据集(即在每个元素上执行一个函数,类似Map操作),属于action;Map操作、Cache操作(即请求新的数据集缓存在内存中),属于transformation。下面我们将简单介绍一下这两种操作的实例。不过首先熟悉一下Scala语言。Scala简介很多著名网站都使用Scala,像Twitter,LinkedIn,及Foursquare(其web应用框架叫Lift)。此外,有证据表明金融机构也对Scala的性能感兴趣(例如使用EDFTrading进行衍生工具定价)。Scala是一种多范式的编程语言,支持命令式、函数式和面向对象的编程范式。从面向对象的角度来看,Scala中的每个值都是一个对象。同理,从函数式编程的角度来看,每个函数也都是一个值。Scala还是一种静态类型语言,其类型系统表达能力强且安全。此外,Scala还是一种虚拟机语言,Scala编译器生成字节码,使用JRE2直接在Java虚拟机(JVM)上运行。这样,Scala可以在几乎任何支持JVM的地方运行(需要增加Scala运行时库),并使用已有的Java库和Java代码。最后,Scala是可扩展的,可以以库的形式轻易无缝地集成到其他语言中去。Scala实例现在我们来看看Scala的几个实例。Scala有自己的解释器,可以交互式地使用它。本文不对Scala语言进行具体论述,可以参考这里。清单1使用解释器快速了解一下Scala语言。启动Scala之后,出现命令提示符,你就可以在交互模式下评估表达式和程序。创建变量有两种方式,一是使用val创建不可变变量(称为单一赋值的变量),二是使用var创建可变变量。如果试图对val变量进行更改,将提示错误。清单1Scala中的变量$scalaWelcometoScalaversion2.8.1.final(OpenJDKClientVM,Java1.6.0_20).Typeinexpressionstohavethemevaluated.Type:helpformoreinformation.scala>vala=1a:Int=1scala>varb=2b:Int=2scala>b=b+ab:Int=3scala>a=26:error:reassignmenttovala=2^接下来,定义一个简单的函数,计算一个Int类型的平方并返回这个值。使用def定义函数,后面紧跟函数名和参数列表。不需要指定返回值,函数本身可以推断出返回值。注意,这与变量赋值操作类似。这里我演示了在3这个对象上执行这个函数,返回一个名为res0的结果变量(该变量是Scala解释器自动创建的)。见清单2。清单2Scala中的函数scala>defsquare(x:Int)=x*xsquare:(x:Int)Intscala>square(3)res0:Int=9scala>square(res0)res1:Int=81接着,我们看看如何在Scala中创建简单的类(见清单3)。定义一个简单的类Dog,接受String类型的参数(相当于构造器)。注意这里类直接接受参数,而不需要在类主体中定义这个类参数。类中只有一个打印该字符串的函数。创建一个类的实例,然后调用这个函数。注意解释器会插入一些竖线,它们不是代码的一部分。清单3Scala中的类scala>classDog(name:String){|defbark()=println(name+"barked")|}definedclassDogscala>valstubby=newDog("Stubby")stubby:Dog=Dog@1dd5a3dscala>stubby.barkStubbybarkedscala>完成工作以后,只需要敲入:quit就可以退出Scala解释器。安装Scala和Spark首先下载和配置Scala。清单4给出了Scala的下载命令,并准备安装。根据Spark文档,这里使用2.8版本。清单4Scala安装$wgetetoScalaversion2.8.1.final(OpenJDKClientVM,Java1.6.0_20).Typeinexpressionstohavethemevaluated.Type:helpformoreinformation.scala>println("Scalaisinstalled!")Scalaisinstalled!scala>:quit$现在可以看到Scala命令提示符了,输入:quit退出。注意Scala在JVM上下文中执行,所以还需要JVM。我用的是Ubuntu,默认自带了OpenJDK。接下来,根据清单6获取最新的Spark框架。清单6下载和安装Spark框架$wgetpile注意这一步需要连接到互联网。完成以后,按照清单7测试一下Spark。这个测试例子运行SparkPi计算pi的估计值(在单位正方形中随机取点)。命令格式是示例程序(spark.examples.SparkPi),加上主机参数(即定义Mesosmaster)。本例实在localhost上运行,因为这是一个单节点集群。注意清单7执行了两个任务,但是它们是顺序执行的(任务0结束后任务1才开始)。本回答被提问者采纳

如何在 aws emr 上 安装 spark 集群

如何在 Amazon EMR Cluster上安装Apache Spark

Amazon EMRSparkAWS

摘要:Amazon EMR高级产品经理Jonathan Fritz详细介绍了如何在 Amazon EMR Cluster上安装Apache Spark。

在过去的五年之中,Amazon Elastic MapReduce (Amazon EMR)已经开始逐渐转变成一个超出Hadoop范畴之外的一种运行许多分布式计算框架Container。在Amazon EMR簇中,用户可以选择运行各种引擎,包括HBase, Impala, Spark, or Presto,并且还能使用Amazon EMR的众多功能,比如Amazon Simple Storage Service (Amazon S3)的快速处理功能,同时还可以和其他AWS功能服务建立联系,并且减轻使用压力(集群的创造和控制)。

对于Apache Spark,我们更多的感到的是一种格外的惊喜。是一个位于Apache Hadoop生态系统之中的用来高速、高效地处理大数据的引擎。通过引导和使用内存中,容错弹性的分布式数据集(RDDS),非循环图(DAG)来定义数据转换,与HadoopMapReduce相比,Spark显示了显著的性能提升。

Amazon EMR对于Spark来说一点都不陌生,事实上,客户通过在Amazon EMR运行Spark来管理Hadoop集群很久了。为了能够让客户更加方便的在Amazon EMR集群上运行Spark,亚马逊AWS在2013年2月编写了如何运用Spark和Shark的文章。

Spark生态圈也发生了很多的变化:Spark已经逐渐完善到了1.x版本,这种完善版能保证所有1.x版本的API发布时有着极高的稳定性。由于Spark SQL的强劲功能,Shark已经逐渐退出了历史舞台,而且Spark可以再Yarn上运行(Hadoop2的资源管理器),我们已经修改了我们的引导动作,将Spark1.x安装在Hadoop2.x的AIM上,这样它同时也可以在Yarn顶端运行。这个引导动作同时也在Spark SQL,Spark Streaming,MLlib和GraphX上完成了安装于配置。

Spark的安装于引导程序在Amazon S3中的路径是:

s3://support.elasticmapreduce/spark/install-spark

或者你也可以在EMR Labs GitHub page上寻找更多的安装Spark引导脚本的信息。

利用这个安装引导动作,用户可以轻松的从控制器或AWS CLI向Amazon EMR配置器中进行安装(在这里展示具体的使用过程:但是你要用你的集群的开启SSH的密钥对来代替MyKeyPair)

awsemr create-cluster --name SparkCluster --ami-version 3.2.1 --

instance-type m3.xlarge --instance-count 3 --ec2-attributes

KeyName=MyKeyPair --applications Name=Hive --bootstrap-actions

Path=s3://support.elasticmapreduce/spark/install-spark

正确安装的话,那么这个引导动作就会被顺利安装。

· Spark 0.8.1 on Hadoop 1.0.3 (AMI 2.x)

· Spark 1.0.0 on Hadoop 2.2.0 (AMI 3.0.x)

· Spark 1.1.0 on Hadoop 2.4.0 (AMI 3.1.x and 3.2

同时,亚马逊AWS官方也上传了原始的在Amazon EMR上的Spark文章,用来作为Spark和Spark SQL 实例中全新的引导动作和语法的参照。

原文链接:http://blogs.aws.amazon.com/bigdata/post/Tx15AY5C50K70RV/Installing-Apache-Spark-on-an-Amazon-EMR-Cluster

如您需要了解AWS最新资讯或是技术文档可访问AWS中文技术社区;如您有更多的疑问请在AWS技术论坛提出,稍后会有专家进行答疑。

订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!

AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。

科普Spark,Spark是什么,如何使用Spark

科普Spark,Spark是什么,如何使用Spark

1.Spark基于什么算法的分布式计算(很简单)

2.Spark与MapReduce不同在什么地方

3.Spark为什么比Hadoop灵活

4.Spark局限是什么

5.什么情况下适合使用Spark

什么是Spark

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。其架构如下图所示:

Spark与Hadoop的对比

Spark的中间数据放到内存中,对于迭代运算效率更高。

Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。

Spark比Hadoop更通用

Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count, collect, reduce, lookup, save等多种actions操作。

这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。用户可以命名,物化,控制中间结果的存储、分区等。可以说编程模型比Hadoop更灵活。

不过由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。

容错性

在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用哪种方式来实现容错。

可用性

Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性。

Spark与Hadoop的结合

Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。

Spark的适用场景

Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小(大数据库架构中这是是否考虑使用Spark的重要因素)

由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。总的来说Spark的适用面比较广泛且比较通用。

运行模式

本地模式

Standalone模式

Mesoes模式

yarn模式

Spark生态系统

Shark ( Hive on Spark): Shark基本上就是在Spark的框架基础上提供和Hive一样的H iveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和 Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapReduce。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。

Spark streaming: 构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片断(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面相比基于Record的其它处理框架(如Storm),RDD数据集更容易做高效的容错处理。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。

Bagel: Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法。

End.


  • 本文相关:
  • linux环境不使用hadoop安装单机版spark的方法
  • 浅谈七种常见的hadoop和spark项目案例
  • python搭建spark分布式集群环境
  • 使用docker快速搭建spark集群的方法教程
  • centos7下spark安装配置教程详解
  • spark学习笔记(一)spark初识【特性、组成、应用】
  • 初识spark入门
  • 详解java编写并运行spark应用程序的方法
  • spark整合mongodb的方法
  • java 中spark中将对象序列化存储到hdfs
  • springboot集成schedule实现定时任务
  • java获得指定区间数的方法
  • mybatis properties及别名定义实例详解
  • 实例讲解java的spring框架中的控制反转和依赖注入
  • java基于正则表达式实现xml文件的解析功能详解
  • java经典问题:连个字符串互为回环变位
  • 全面了解java_basedao数据处理类
  • java数据结构(线性表)详解
  • java读写txt文件时防止中文乱码问题出现的方法介绍
  • spring-mvc/springboot使用mockmvc对controller进行测试
  • 下面哪个不是spark的集群部署模式
  • spark支持的分布式部署方式中哪个是错误的
  • 为什么安装spark要在hadoop集群的基础上安装
  • 如何在 aws emr 上 安装 spark 集群
  • 科普Spark,Spark是什么,如何使用Spark
  • 集群上同时又spark1和spark2.0怎么指定
  • Hortonworks2.3.4如何启动sparkR,还是说需要升级版本才支持?
  • 利用spark 的standlone启动三个节点集群,为什么只有一个节点在跑任务?
  • 安装spark需要安装scala吗
  • spark on yarn是运行在spark集群还是yarn集群
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved