怎么看出 spark集群 是单机模式还是集群

本文将介绍Apache Spark 1.6.0在单机的部署,与在集群中部署的步骤基本一致,只是少了一些master和slave文件的配置。直接安装scala与Spark就可以在单机使用,但如果用到hdfs系统的话hadoop和jdk也要配置,建议全部安装配置好。我的博客原文地址链接:
Spark官网的文档&&里是这样说的:
Spark runs on Java 7+, Python 2.6+ and R 3.1+. For the Scala API, Spark 1.6.0 uses Scala 2.10. You will need to use a compatible Scala version (2.10.x).
我的电脑环境是Ubuntu 14.04.4 LTS,还需要安装:
解压jdk安装包到任意目录:
cd /home/tom
$ tar -xzvf jdk-8u73-linux-x64.tar.gz
$ sudo vim /etc/profile
编辑/etc/profile文件,在最后加上java环境变量:
export JAVA_HOME=/home/tom/jdk1.8.0_73/
export JRE_HOME=/home/tom/jdk1.8.0_73/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
保存并更新/etc/profile:
$&source&/etc/profil
查看是否成功:
$&java -version
确保安装好ssh:
$ sudo apt-get update
$ sudo apt-get install openssh-server
$ sudo /etc/init.d/ssh start
生成并添加密钥:
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub && ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
如果已经生成过密钥,只需执行后两行命令。测试ssh localhost
全选复制放进笔记
$ ssh localhost
解压hadoop2.6.0到任意目录:
$ cd /home/tom
$ wget http://apache.claz.org/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
$ tar -xzvf hadoop-2.6.0.tar.gz
编辑/etc/profile文件,在最后加上java环境变量:
export HADOOP_HOME=/home/tom/hadoop-2.6.0
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
编辑$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件
$&vim&$HADOOP_HOME/etc/hadoop/hadoop-env.sh
在最后加上:
export&JAVA_HOME=/home/mi/jdk1.8.0_73/
修改Configuration文件:
$&cd&$HADOOP_HOME/etc/hadoop
修改core-site.xml:
修改hdfs-site.xml:
第一个是dfs的备份数目,单机用1份就行,后面两个是namenode和datanode的目录。
修改mapred-site.xml:
修改yarn-site.xml:
初始化hadoop:
$&hdfs namenode -format
$ $HADOOP_HOME/sbin/start-all.sh
$ $HADOOP_HOME/sbin/stop-all.sh
检查WebUI,浏览器打开端口::8088
port 8088: cluster and all applications
port 50070: Hadoop NameNode
port 50090: Secondary NameNode
port 50075: DataNode
hadoop运行后可使用jps命令查看,得到结果:
9611 ResourceManager
9451 SecondaryNameNode
9260 DataNode
9102 NameNode
9743 NodeManager
解压scala安装包到任意目录:
$ cd /home/tom
$ tar -xzvf scala-2.10.6.tgz
$ sudo vim /etc/profile
在/etc/profile文件的末尾添加环境变量:
export SCALA_HOME=/home/tom//scala-2.10.6
export PATH=$SCALA_HOME/bin:$PATH
保存并更新/etc/profile:
$&source&/etc/profil
查看是否成功:
$&scala -version
解压spark安装包到任意目录:
$ cd /home/tom
$ tar -xzvf spark-1.6.0-bin-hadoop2.6.tgz
$ mv spark-1.6.0-bin-hadoop2.6 spark-1.6.0
$ sudo vim /etc/profile
在/etc/profile文件的末尾添加环境变量:
export SPARK_HOME=/home/tom/spark-1.6.0
export PATH=$SPARK_HOME/bin:$PATH
保存并更新/etc/profile:
$&source&/etc/profil
在conf目录下复制并重命名spark-env.sh.template为spark-env.sh:
$ cp spark-env.sh.template spark-env.sh
$ vim spark-env.sh
在spark-env.sh中添加:
export JAVA_HOME=/home/tom/jdk1.8.0_73/
export SCALA_HOME=/home/tom//scala-2.10.6
export SPARK_MASTER_IP=localhost
export SPARK_WORKER_MEMORY=4G
$ $SPARK_HOME/sbin/start-all.sh
$ $SPARK_HOME/sbin/stop-all.sh
测试Spark是否安装成功:
$&$SPARK_HOME/bin/run-example&SparkPi
得到结果:
Pi&is&roughly&3.14716
检查WebUI,浏览器打开端口::8080
原文链接:/a/8993
阅读(...) 评论()为什么使用Spark?
- 解道Jdon
& & & &&& & &
  Apache Spark是一个集群计算引擎,它抽象了底层分布式存储和集群管理,,使它可以插入plugin大量的专门的存储和集群管理工具。Spark支持HDFS, Cassandra, local storage, S3, 甚至传统的关系数据库作为存储层,也可以和集群管理工具YARN, Mesos一起工作,相对集群模式它还有单机模型,Spark已经打破了由Hadoop创造的排序记录,本文介绍Spark的优点以及和MarReduce相比具有的性能优势。
下面看看Spark细节:
它取代现有生态系统中的什么?
实际上Spark不能代替任何传统的Hadoop生态系统。因为Hadoop 2,它只是另一个运行在的应用程序。因此它非常适合在Hadoop生态系统。它提供可测试 可阅读 可维护等方式编程,解放了我们编写大量MapReduce工作的痛苦,而且。
&大数据&性质
大数据本质上是不变的,这意味着它一次生成以后不应该再更新。
数据本身主要是结构化或半结构化的。
因为巨大规模的数据分布在分布式集群机器,而分布式特性使得编程变得复杂。
不变性和MapReduce模型
Map Reduce模型缺乏利用数据的不可变的天然性质。一个不普通的MapReduce(MR)工作包含一系列MR段,为了容错的名义,中间结果被保存到磁盘造成很多IO操作,引起了严重的性能下降。
MapReduce模型的痛点
MR代码需要大量的样板。
程序员不仅需要考虑Map和Reduce的基本操作概念,而且还需要知道MR的每个问题,这是很不平凡,常见的操作,比如加入两个数据集需要大量的工作。
MR模型不适合迭代处理。
程序员对于分布式特性数据是不透明的,需要经常考虑优化,如Map边的reduce,Map边的join操作。
虽然有很多工具来解决上述的问题,提供基于MR编程更高层次的抽象,如Cascading Scalding Hive等等,但是它们并没有提高性能,还是绑定在底层MR工作上。
Hadoop的本意是为批处理操作而诞生。
让我们看看Spark编程模型是如何解决上述问题:
Spark编程模型看起来像什么?
Spark中主要的计算抽象是。由于其简化的编程接口,它统一了分散在其他传统Hadoop堆栈上的计算方式。
如。通过SparkSQL等提供了SQL接口,来自Spark Streaming的流处理。类似机器学习的迭代处理,可能通过MLib graphX的图形处理。火花还提供编程接口的语言包括Scala、Java、Python。RDD的抽象,由于其属性也是一个原因更引发性能的本质提高。让我们看看如何提高的。
RDD是什么?
RDD代表弹性分布式数据集。它形成Spark编程模型的基本抽象。
RDD是不可变的。
这是一个非常重要一点,因为即使HDFS在存储上是编写一次,多次读/追加,,这让它是不变的,但是MapReduce模式使得它不可能利用这一情况以提升性能。
RDD是懒赋值
RDD并不会真正动作,,除非一个动作(终端操作)真正调用它。这意味着当一个终端操作被调用时,Spark会注意到它对数据进行转换的DAG,使它在失败情况下可重复操作,这样容错方面就变得很平常了,。它还允许有一些优化计算步骤。
它可以被认为是分布式的集合。编程接口几乎使底层数据透明的分布式特性。
它可以通过并行一个值集合被创建,通过应用新的转换函数转换一个存在的RDD,能从HDFS中读出持久性存储数据。
操作RDD与传统MapReduce有什么区别吗?
RDD抽象使我们远离传统的Map-reduce模型,给了我们的集合(分布)接口,,因此在MR中需要的很多样板操作现在变成了集合操作,例如groupBy、join、count, distinct max, min等等。它还允许我们很容易通过共享RDD之间的操作进行迭代处理。
RDD也可以选择性缓存,从而给予相当大的性能提升。
和MapReduce计算模型相比如何?
MR模型由以下阶段组成:
Map - &可选combine结合(Map边reduce)- &洗牌和排序- &Reduce
它还允许我们利用分区数据的性质自定义分割者。
欢迎来到Spark模型,Spark的优点是,它并没有限制我们进行传统的Map和reduce操作。它允许我们应用像操作集合一样操作RDD,因为只是一个RDD,它可以通过SQL接口查询,应用机器学习算法,还有很多花哨的东西。让我们看看一个字数统计的例子:
val input = sparkContext.textFile(&path/to/input/file&)
val words = input.flatMap(line =& line.split(& &))
val wordsMappedToOne = words.map(word =& (word, 1))
val wordOccrCount = wordsMappedToOne.reduceByKey((a, b) =& a + b)
wordOccrCount.saveAsTextFile(&path/to/output/file&)
更多案例见.。
  我们可以使用Scala作为Spark界面。代码看起来很容易读懂。请注意 sparkContext是你指定Spark配置的方式,规定如何连接到集群。剩下的代码只是包含集合操作。这里很重要的一点需要注意的是,由于RDD是懒赋值,直到我们实际上向Spark要求结果之前是没有代码是在集群上执行的。它会在这种情况下将输出结果保存到目的地的路径中。RDD允许有两种类型的操作:第一个是转换集合,这些操作不赋值,而是产生新的RDD,,转换会应用到这里。Spark创建可以创建转换的代数DAG,这些转换是map flatmap reduceByKey groupByKey join等等。第二个是一个动作,这些都是终端操作,将触发DAG上的实际计算,比如count collect max等才真正被执行。
对于一个普通程序员意味着什么呢?
代码是充分可读的,直至可质疑。
代码是可测试的,它只是正常的scala代码,一个Spark集群可以在本地模式下运行测试。这是非常重要的,而传统MR代码很难测试。
Spark还支持Python,java。
代码可以在需要时由领域模型组成
Spark计算模型还提供了显著的性能提升,比传统MR模型降低了延迟。
Spark统一了处理数据不同的方法。SparkSQL是一个可以通过SQL查询所需的数据的接口,可以使用正常的集合操作。
Map边reduce或捆绑再也不需要,因为reduce操作在默认情况下在每个map边有一个本地聚合。
代码是可测试的,这对于二次维护很重要
统一各种计算需求合并在一起变得轻松,不需要在不同持久存储之间分享数据或做一些特殊处理。
Spark提供一个shell,这对于编写工作任务之前勘探数据很有用。
我们在我们的代码中可以使用很多现有库包,像Algebird,做一些花哨的东西。
接下来我们将讨论Spark的调试工作。
什么不使用Cascading Scalding?
这种比较是不公平的,Cascading Scalding是库包,而Spark是框架。这些库包实际上是基于MR模型推出更新、丰富的抽象模型。他们不提供任何性能优势。
Spark成为一个完整的计算引擎,它并不使用MR框架,但是有自己基于RDD的计算模型,而且提供了性能优势。
它还允许我们可选择在内存中处理RDD,这样能提供令人难以置信的速度。除此之外,正如我们之前所讨论的,它与存储无关,这意味着它可以用来计算任何数据源:本地文件,S3存储,HDFS,JDBC数据源,Cassandra等等。
正常的开发流程是怎样的?
Spark-shell通常是方便在这里。
从持久存储加载数据。
使用正常的函数遍历数据,也可以探索取样数据理解数据结构,了解数据的方差等
对RDD建模各种对取样数据的操作流程。
理解可能的分区方案,比如数据是日期分区,因此数据洗牌操作可以减少所需的网络IO的需要,一个恰当的分区能解决这一问题。
在各种操作中可共享的数据集应该被缓存,当然如果需要的话。
测试输出的正确性,测试业务逻辑
在恰当的数据上运行程序,以确保它足够性能。
无论什么时候尽可能使用本地聚合(正如MR中所做)尽可能(即。避免使用groupBy,替代是使用reduceByKey。
Spark是内存计算?
通常,,人们疑惑Spark是内存计算引擎吗?Spark不仅in-memeory,它还提供基于内存可选的存储,主要用于提高性能。引用官方文档,当数据超过内存时Spark会执行额外操作。更为普遍的是,Spark操作是符合MapReduce规范,可以指定TORAGE_LEVELs为memory-only, memory-and-disk和disk-only等,从内存到磁盘都可以。
Spark是如何比Hadoop MR提供更好性能?
MR的中间结果总是要持久保存,这是为了容错,但是会有很高IO操作代价,而Spark不会将这些结果持久化,除非用户明确指定,激活操作的管道化会大大提升速度。
通常繁重网络IO变成分布式系统的瓶颈。Spark采取code-parallel模型,将代码带给数据,比如关闭序列化,,减少了网络操作,当地聚合结果有助于减少网络IO的操作。
Spark也允许在内存中保存RDD和在不同操作中分享RDD,这是一个巨大的性能提升,前提是数据没有填满内存情况下,数据超过内存泄漏到磁盘,这完全是对程序员是透明的。在这种情况下,性能与传统处理差不多。
Map Reduce
复杂 需要样本
几乎没有样本
通过库包,但很麻烦
非微不足道
数据探索性
Spark shell允许快速和简单的数据探索
建立在SparkSQL
每个阶段的处理结果存盘保障容错
利用RDD的不变性激活容错
很多工具,但并不完全无缝集成,需要很多的努力使他们的无缝集成
统一的接口和SQL一样,流处理等单一抽象的RDD
在内存中计算
| 网站地图 | 设为首页Spark 入门: 如何搭建一个最简单的Spark集群_数据分析精选_传送门
你是真实用户吗(Are you a robot)?
我们怀疑你不是真实用户,已对你的访问做了限制。如果您是真实用户,非常抱歉我们的误判对您造成的影响,您可以通过QQ()或电子邮件()反馈给我们,并在邮件和QQ请求信息里注明您的IP地址:220.177.198.53,我们会尽快恢复您的正常访问权限。另外,如果您不是在访问的当前页面,我们建议您移步
或者 在浏览器中输入以下地址:http://chuansong.me/n/ 访问,您所访问的网站是从抓取的数据,请直接访问,会有更好的体验和更及时的更新。We suspect you are a robot.We are really sorry if you are not,and you can email us () with your current IP address: 220.177.198.53 to get full access to .If you are not accessing
for the current page,you'd better visit
for better performance,as the current website you are accessing is just spam.
觉得不错,分享给更多人看到
数据分析精选 微信二维码
分享这篇文章
9月4日 0:28
数据分析精选 最新头条文章
数据分析精选 热门头条文章

我要回帖

更多关于 spark java集群模式 的文章

 

随机推荐