技术研究-Spark-1.0.0(集群版)
- 格式:doc
- 大小:317.50 KB
- 文档页数:13
Spark大数据技术的发展历程与应用探析随着互联网的飞速发展和信息技术的不断创新,大数据已经成为一个热门的话题,并且在企业、科研机构和政府等领域中得到了广泛的应用。
作为一个快速、通用、易于使用的大数据处理框架,Apache Spark在大数据技术的发展历程中扮演着重要的角色。
本文将探讨Spark大数据技术的发展历程,并分析其在不同领域的应用。
Spark大数据技术是由Matei Zaharia于2009年在加州大学伯克利分校所发起的一个开源项目。
最初,Spark是作为布局计算模型来处理大规模集群的机器学习任务的。
然而,随着时间的推移,Spark逐渐发展成为一个更加全面的大数据处理框架。
其核心的设计理念是将数据存储在内存中,以加快数据处理速度。
相比于传统的MapReduce框架,Spark能够实现迭代计算和交互式查询等更复杂的任务,同时也能够有效地处理数据密集型应用。
在Spark大数据技术的发展历程中,最重要的里程碑之一是2010年Spark的首次发布。
这一版本实现了基本的API和数据的分布式读取,为后续版本的开发奠定了基础。
几年后,Spark迅速获得了广泛的关注和应用,并在2014年推出了Spark 1.0版本。
该版本引入了DataFrame这一抽象数据结构,使得数据处理更加灵活和高效。
除此之外,Spark还提供了机器学习库MLlib、图计算库GraphX和流处理库Spark Streaming等组件,使得用户可以应对各种不同类型的大数据处理需求。
Spark大数据技术的应用领域非常广泛。
首先是商业领域,Spark被广泛应用于商业智能和数据分析。
通过使用Spark的SQL和DataFrame API,企业可以轻松地在大规模数据集上进行数据挖掘和分析,以获得有价值的商业洞见。
其次,Spark 还广泛应用于机器学习和人工智能领域。
MLlib作为Spark的机器学习库,提供了丰富的机器学习算法和工具,使得用户可以方便地进行模型训练和预测。
面向大数据处理的Spark集群架构与性能优化在大数据时代,面向大数据处理的Spark集群架构和性能优化是一个重要的课题。
Spark作为一种快速、通用、可扩展的大数据处理框架,已经成为了许多公司和组织数据处理和分析的首选。
本文将深入探讨Spark集群架构的设计原则,以及如何通过性能优化来提高Spark的处理能力。
首先,我们来了解一下Spark集群架构的设计原则。
Spark集群通常包括一个主节点(Master)和多个工作节点(Worker)。
主节点负责整个集群的管理和调度工作,而工作节点则是实际执行任务的计算节点。
在正式使用Spark之前,我们需要在每个工作节点上安装和配置Spark,并确保它们可以与主节点进行通信。
Spark集群架构的设计原则是可伸缩性和容错性。
伸缩性使得Spark可以轻松地处理大规模数据集,而容错性则确保在节点故障的情况下能够提供可靠的数据处理。
为了实现这些原则,我们可以采取以下策略:1. 增加工作节点的数量:通过增加工作节点的数量,可以提高Spark集群的处理能力。
当负载增加时,可以动态地添加新的工作节点来分担负载,从而实现伸缩性。
同时,多个工作节点之间的数据可以并行处理,进一步提高处理效率。
2. 合理分配资源:在设计Spark集群架构时,需要根据任务的需求来合理分配资源。
可以通过调整每个工作节点的内存和CPU核数来优化性能。
对于内存密集型的任务,可以增加每个工作节点的内存大小;对于计算密集型的任务,可以增加每个工作节点的CPU核数。
此外,还可以通过动态分配资源的方式,根据当前任务的需求来动态调整分配的资源。
3. 数据本地性调度:在Spark中,数据本地性调度是一种重要的优化技术。
它可以将计算任务调度到存储有所需数据的工作节点上,从而避免数据传输的开销。
Spark提供了多种数据本地性调度策略,包括PROCESS_LOCAL、NODE_LOCAL、RACK_LOCAL等。
通过合理选择数据本地性调度策略,可以减少数据传输的开销,提高计算效率。
spark工作原理Spark是一种快速、通用的集群计算系统,它提供了高级API,用于在分布式数据集上执行并行计算。
Spark的工作原理可以分为以下几个方面来进行解释和说明。
首先,Spark的工作原理主要基于其核心概念,弹性分布式数据集(Resilient Distributed Dataset,简称RDD)。
RDD是Spark中最基本的抽象,它代表一个被分区的只读数据集,可以在集群中进行并行操作。
RDD具有容错性,即使在计算过程中发生错误,也可以通过血缘关系来恢复丢失的数据。
这种容错性是通过RDD的转换操作和行动操作来实现的。
转换操作会创建一个新的RDD,而行动操作会返回一个结果给驱动程序。
其次,Spark的工作原理还涉及到其执行模型。
Spark的执行模型是基于DAG(有向无环图)的,即将整个计算过程表示为一个有向无环图,图中的每个节点表示一个RDD,每条边表示一个转换操作。
当用户提交一个Spark应用程序时,Spark会将应用程序转换成DAG图,并将其划分成一系列的阶段(stage),每个阶段包含一组可以并行执行的任务。
这种执行模型可以有效地利用集群资源,实现高效的并行计算。
另外,Spark的工作原理还涉及到其内部的优化机制。
Spark提供了许多优化技术,包括内存计算、数据分区、数据本地性等。
其中,内存计算是Spark的一大特点,它通过将中间结果存储在内存中,避免了频繁的磁盘读写,从而提高了计算性能。
数据分区和数据本地性则可以减少数据的传输和网络通信开销,提高了计算的效率。
最后,Spark的工作原理还涉及到其支持的各种数据处理和分析功能。
Spark提供了丰富的API,包括Spark SQL、Spark Streaming、MLlib和GraphX等,用于支持结构化数据处理、流式数据处理、机器学习和图计算等多种数据处理和分析功能。
这些API可以灵活地组合和调用,满足不同应用场景下的数据处理需求。
Spark大数据技术的架构与原理解析Spark是一种快速、通用的大数据处理引擎,具有高度的可扩展性和容错性。
它支持各种数据处理场景,包括批处理、实时流式处理、交互式查询和机器学习等。
本文将深入解析Spark大数据技术的架构与原理,包括Spark的核心组件、运行原理和数据处理流程。
1. Spark的核心组件Spark包含以下几个核心组件:- Spark Core:Spark的基础模块,提供分布式任务调度、内存管理、容错和存储等功能。
它定义了任务执行的基本机制和数据抽象模型。
- Spark SQL:提供了基于结构化数据的集成查询引擎,支持SQL和Hive查询,可将结构化数据与Spark的强大处理能力相结合。
- Spark Streaming:支持实时数据流处理,将实时的数据流分成小批量进行处理,并可以与批处理任务无缝结合。
- Spark MLlib:提供了丰富的机器学习算法和工具库,可用于构建和部署大规模的机器学习模型。
- Spark GraphX:用于图计算的模块,提供了对图数据的高效处理和分析。
2. Spark的运行原理Spark运行时采用分布式计算模型,并使用弹性分布式数据集(RDD)作为其核心数据抽象。
- RDD:RDD是Spark中的核心概念,它由一系列可分片和可并行计算的数据项组成,可以在集群中的多个节点上进行处理。
RDD可以从外部数据源(如HDFS、HBase)中创建,也可以通过Spark的转换操作从已有的RDD中生成。
RDD提供了数据的抽象视图,可以对其进行转换和行动操作。
- 转换操作:Spark提供了一系列转换操作,用于对RDD进行变换。
例如,map、filter、reduce等操作可以对RDD进行映射、过滤和聚合等操作。
这些转换操作是惰性执行的,只有在行动操作触发时才会真正执行。
- 行动操作:Spark提供了多种行动操作,用于触发RDD的计算。
例如,count、collect、save等操作用于对RDD的数据进行计数、收集和保存等操作。
利⽤SparkLauncher在代码中调⽤Spark作业背景项⽬需要处理很多⽂件,⽽⼀些⽂件很⼤有⼏⼗GB,因此考虑对于这种⽂件,专门编写Spark程序处理,为了程序的统⼀处理,需要在代码中调⽤Spark作业来处理⼤⽂件。
实现⽅案经过调研,发现可以使⽤Spark提供的SparkLauncher类进⾏Spark作业的提交,这个类的使⽤有很多参数需要注意,经过项⽬验证后,本⽂给出相对完整的使⽤⽅式以及说明⾸先项⽬中要添加pom依赖,注意加上⾃⼰的版本<dependency><groupId>org.apache.spark</groupId><artifactId>spark-launcher_2.11</artifactId></dependency>其次,可以把Spark作业本⾝的⼀些参数放在配置⽂件⾥,灵活修改,我这⾥是配置kerberos安全认证的CDH集群,Spark作业提交时使⽤的模式为yarn-client,主要使⽤到了⼀下配置,配置中的路径这⾥是作为例⼦随便填的,实际按照⾃⼰环境填写,另外,整个应⽤是在CDH客户端节点执⾏的。
每个配置项都有说明:#spark application use#driver的⽇志输出driverLogDir=/root/test/logs/#kerberos认证keytab⽂件keytab=/root/test/dw_hbkal.keytab# keyberos认证主体principal=dw_hbkal# yarn集群上运⾏spark作业master=yarn# yarn-client模式deployMode=client# spark-executor个数和内存配置minExecutors=16maxExecutors=16executorMemory=1g# driver内存配置driverMemory=256M# spark-executor使⽤的core数量配置executorCores=2# spark作业的主类mainClass=pare.cp.spark.nonprikey.FileCompare# spark作业的jar包jarPath=/root/test/my-spark-job-1.0-SNAPSHOT.jar# spark作业依赖的第三⽅jarextjars=/root/test/mysql-connector-java-8.0.27.jar,/root/test/jedis-2.8.1.jar# CHD客户端上存放的集群配置⽂件,表明向哪个集群提交spark作业HADOOP_CONF_DIR=/root/CDH/bjc/CDH/etc/conf/hadoop-confJAVA_HOME=/usr/java/jdk1.8.0_141SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark# spark作业执⾏的yarn队列yarnQueue=mysparkqueue上述配置可以在代码中读取,并结合SparkLauncher⼀起使⽤,可以参看以下例⼦代码://负责发起spark作业public class SparkJobService{private static final Logger logger = LoggerFactory.getLogger(SparkJobService.class);static Config config;//spark任务参数static String keytabPath;static String principal ;static String master;static String deployMode;static String minExecutods;static String maxExecutors;static String executorMemory;static String driverMemory;static String executorCores;static String mainClass;static String jarPath;static String extjars;static String yarnQueue;static String HADOOP_CONF_DIR;static String JAVA_HOME;static String SPARK_HOME;static String driverLogDir;static {config = new Config("job.properties");keytabPath = config.getString("keytab");principal = config.getString("principal");master = config.getString("master");deployMode = config.getString("deployMode");minExecutods = config.getString("minExecutods");maxExecutors = config.getString("maxExecutors");executorMemory = config.getString("executorMemory");driverMemory = config.getString("driverMemory");executorCores = config.getString("executorCores");mainClass = config.getString("mainClass");jarPath = config.getString("jarPath");extjars = config.getString("extjars");yarnQueue = config.getString("yarnQueue");HADOOP_CONF_DIR=config.getString("HADOOP_CONF_DIR");JAVA_HOME = config.getString("JAVA_HOME");SPARK_HOME = config.getString("SPARK_HOME");driverLogDir = config.getString("driverLogDir");}public static void main(String[] args) {try{//spark任务设置//如果在系统环境变量中添加了,可以不加HashMap<String,String> env = new HashMap();env.put("HADOOP_CONF_DIR",HADOOP_CONF_DIR);env.put("JAVA_HOME",JAVA_HOME);env.put("SPARK_HOME",SPARK_HOME);String jobArgs1 = "test1";String jobArgs2 = "test2"//......SparkLauncher launcher = new SparkLauncher(env).addSparkArg("--keytab",keytabPath).addSparkArg("--principal",principal).setMaster(master).setDeployMode(deployMode).setConf("spark.dynamicAllocation.minExecutors",minExecutods).setConf("spark.dynamicAllocation.maxExecutors",maxExecutors).setConf("spark.driver.memory",driverMemory).setConf("spark.executor.memory",executorMemory .setConf("spark.yarn.queue",yarnQueue).setAppResource(jarPath).setMainClass(mainClass).addAppArgs(jobArgs1,jobArgs2);//spark job中依赖jar,如mysql-connector.jar...for(String jarName : extjars.split(",")){launcher.addJar(jarName);}launcher.setAppName("SparkJob");//spark本地driver⽇志launcher.redirectError(new File(driverLogDir + "spark_driver.log"));final String[] jobId = new String[]{""};//⽤来等待spark作业结束CountDownLatch latch = new CountDownLatch(1);SparkAppHandle sparkAppHandle = launcher.setVerbose(false).startApplication(new SparkAppHandle.Listener() {@Overridepublic void stateChanged(SparkAppHandle sparkAppHandle) {SparkAppHandle.State state = sparkAppHandle.getState();switch (state){case SUBMITTED:("提交spark作业成功");//yarn上spark作业的jobIdjobId[0] = sparkAppHandle.getAppId();break;case FINISHED:("spark job success");break;case FAILED:case KILLED:case LOST:("spark job failed");}if (state.isFinal())latch.countDown();}@Overridepublic void infoChanged(SparkAppHandle sparkAppHandle) {}});//等待Spark作业执⾏结束latch.await();}catch (Exception e){logger.error("error",e);}finally {//...}}}上述代码中,尤其注意spark作业参数是怎么配置的,不同的参数使⽤的是不同的⽅法调⽤,⼀些参数使⽤addSparkArg⽅法添加,⼀些使⽤setConf添加。
Spark大数据技术原理解析Spark是一种强大的分布式计算框架,已经成为大数据处理的首选工具之一。
本文将探讨Spark的工作原理、核心概念和关键特性,以帮助读者更好地了解和应用这一技术。
首先,我们来了解一下Spark的基本概念。
Spark是一个开源的分布式计算系统,它通过将任务分发到集群中的多个节点来实现高效并行计算。
Spark提供了一套丰富的API,支持多种编程语言,包括Scala、Java、Python和R等。
它的核心组件包括Spark Core、Spark SQL、Spark Streaming和MLlib。
Spark的核心是Spark Core,它提供了任务调度、内存管理和容错等功能。
Spark采用了弹性分布式数据集(Resilient Distributed Dataset,简称RDD)作为其主要的数据抽象,RDD是一个可并行操作的不可变分布式集合,可以在内存中高效地进行计算。
Spark通过将数据集划分成多个可并行计算的分区,将这些分区分布在集群中的多个节点上,并且将数据集保留在内存中,以实现更快速的数据处理。
Spark提供了丰富的操作和转换函数,可以对RDD进行各种复杂的计算操作,例如map、reduce和filter等。
这些操作可以通过编程语言中的lambda表达式或函数传递给Spark,以实现自定义的计算逻辑。
通过这些操作和转换函数的组合,可以构建复杂的数据处理流程,从而实现各种复杂的数据分析和处理任务。
除了Spark Core之外,Spark还提供了其他重要的模块,如Spark SQL和Spark Streaming。
Spark SQL提供了一种与传统的关系型数据库类似的结构化查询语言(SQL)的接口,可以通过SQL语句来查询和分析数据,以及将数据导入和导出关系型数据库中。
Spark Streaming是Spark的流处理模块,它可以实时处理流式数据,并支持类似于离线批处理的操作和转换函数。
Spark大数据技术架构及应用场景解析大数据技术已经成为各行各业的热门话题,并且在企业中发挥重要的作用。
Spark大数据技术作为当前最流行的一种技术框架,被广泛应用于大数据处理和分析的领域。
本文将对Spark大数据技术的架构和一些常见应用场景进行解析。
首先,我们来了解一下Spark的技术架构。
Spark是一个基于内存的大数据处理平台,它的核心概念是弹性分布式数据集(Resilient Distributed Datasets,简称RDD)。
RDD是一个可并行操作的元素集合,可以分布式地存储在内存中,并且具有容错机制。
这使得Spark能够在大规模数据处理和分析时提供快速的计算速度。
Spark的架构由几个主要组件组成,包括驱动器程序、集群管理器、集群节点和执行器。
驱动器程序负责解析用户的应用程序,并且将它们分解成任务,然后将任务分配给集群中的节点。
集群管理器负责监控和管理集群中的资源,以确保任务能够在集群节点上按计划执行。
集群节点是运行Spark任务的物理或虚拟计算机,它们负责执行任务并返回结果。
执行器是运行在集群节点上的进程,它们负责接收和执行任务。
Spark还提供了许多扩展库和工具,用于增强其功能和性能。
一些常见的扩展库包括Spark SQL、Spark Streaming、MLlib和GraphX。
Spark SQL是用于处理结构化数据的模块,它提供了用于查询和分析数据的高级API。
Spark Streaming是用于处理实时数据的模块,它可以实时接收和处理流式数据。
MLlib是Spark的机器学习库,提供了一系列常用的机器学习算法和工具。
GraphX是Spark的图计算库,用于处理大规模图数据和图计算任务。
接下来,我们将探讨一些Spark的应用场景。
由于Spark具有快速的计算速度和丰富的扩展库,它被广泛应用于大数据处理和分析领域。
首先,Spark在数据仓库中的应用越来越受欢迎。
传统的数据仓库通常使用关系型数据库进行存储和查询,但在处理大规模数据时,关系型数据库的性能会受到限制。
Spark各个版本新特性后续会添加spark⽣态系统中各个组件的兼容⽀持情况。
Spark2.0.0* 2016-07-27正式发布* 它是2.x版本线的上的第⼀个版本。
* 300位contributors的超过2500个patches* Programming APIs* DataFrame和Dataset统⼀(scala和Java中)* SparkSession将要替换旧的SQLContext和HiveContext,保留后者* Spark SQL* ⽀持SQL2003,Spark SQL现在可以运⾏所有的99 TPC-DS查询* Removals* ⽀持Hadoop 2.1及其之前版本* Behavior Changes* 编译时默认使⽤Scala 2.11⽽不是2.10Spark1.6新特性* 新增Dataset APISpark1.5新特性* 引⼊Project Tungsten(钨丝项⽬)* 该项⽬通过对⼏个底层框架构建的优化进⼀步Spark性能* 可⽤性和互操作性* 增加了在UI界⾯中查看SQL和DataFrame查询计划,能够根据不同的操作和运⾏时的内存使⽤显⽰不同的查询计划* Hive⽀持* ⽀持可以连接Hive 0.13, 0.14, 1.0/0.14.1, 1.1, 1.2的metastore。
Spark1.4新特性* 正式引⼊SparkR它是⼀个R API, SparkR是基于Spark的DataFrame抽象。
* Spark CoreSpark为应⽤提供了REST API来获取各种信息(jobs / stages / tasks / storage info)* Spark StreamingStreaming在这个版本中增加了新的UISpark1.3新特性* 新增DataFrame API* Spark SQL正式脱离alpha版本Spark1.0新特性* 引⼊Spark SQL组件(alpha项⽬)* 应⽤提交⼯具spark-submit。
spark工作原理Spark工作原理。
Spark是一种快速、通用的集群计算系统,它提供了高级的API,使得用户可以轻松地编写分布式程序。
Spark的工作原理是其能够在内存中进行计算,从而大大提高了计算速度。
在本文中,我们将深入探讨Spark的工作原理,包括其内部架构、任务调度、数据处理等方面的内容。
首先,让我们来了解一下Spark的内部架构。
Spark的核心是由两个重要的组件组成,驱动器程序和执行器。
驱动器程序负责将用户程序转化为任务,并将这些任务分配给执行器。
执行器则负责执行任务并将结果返回给驱动器程序。
这种分布式的架构使得Spark能够高效地处理大规模数据。
接下来,让我们来看一下Spark的任务调度机制。
Spark使用了一种称为弹性分布式数据集(RDD)的抽象数据类型来表示分布式数据集。
RDD可以分布在集群的多个节点上,并且能够自动进行容错处理。
Spark的任务调度器会将用户程序转化为一系列的作业,并将这些作业分成一系列的任务。
这些任务会被分配给集群中的执行器进行执行,从而实现了高效的任务调度。
除此之外,Spark还使用了一种称为DAG(有向无环图)的执行计划来优化任务的执行顺序。
在用户程序被提交到Spark之后,Spark会将其转化为一个DAG执行计划,并对其进行优化,以提高任务的执行效率。
这种优化技术使得Spark能够更好地利用集群资源,从而提高了计算速度。
此外,Spark还具有高效的数据处理能力。
Spark提供了丰富的API,使得用户能够方便地进行数据处理和分析。
Spark的内存计算能力使得数据可以被高效地加载到内存中,并且能够快速地进行计算。
这种高效的数据处理能力使得Spark成为了大数据处理领域的瑞士军刀。
综上所述,Spark作为一种快速、通用的集群计算系统,其工作原理主要包括内部架构、任务调度、数据处理等方面。
通过对Spark的工作原理进行深入的了解,我们能够更好地利用Spark进行大规模数据处理和分析,从而提高工作效率和计算速度。
技术研究Spark1.0.0SimpleCnst2014年06月26日文档版本历史表目录1.综合概述 (4)1.1.简述 (4)1.2.资源URL (4)17.部署安装 (5)17.1.系统环境 (5)25.2.S CALA安装 (6)25.3.S PARK安装 (7)25.4.启动S PARK (8)2.6S PARK命令使用 (13)2.7查看L OG (13)1. 综合概述1.1.简述Spark 是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在Scala语言中实现的,它将Scala 用作其应用程序框架。
与Hadoop 不同,Spark 和Scala 能够紧密集成,其中的Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop 的补充,可以在Hadoo 文件系统中并行运行。
通过名为Mesos 的第三方集群框架可以支持此行为。
Spark 由加州大学伯克利分校AMP 实验室(Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
1.2. 资源URL17. 部署安装17.1. 系统环境Spark安装在Linux。
17.1.1.部署拓扑结构17.1.2.服务器列表本文档介绍在Ubuntu(14.04 server 64bit)上安装Spark,Linux用户为bigdata。
17.1.3.安装JDK1.6scp -r jdk1.6.0_45/ root@172.31.20.91:/usr/java/mkdir /usr/java/chmod 774 jdk-6u34-linux-amd64.bin./ jdk-6u34-linux-amd64.binvim /etc/profilevim ~/.bashrc添加如下内容export JAVA_HOME=/usr/java/jdk1.6.0_34export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH然后source ~/.bashrc验证java -versionjava version "1.6.0_34"Java(TM) SE Runtime Environment (build 1.6.0_34-b04)Java HotSpot(TM) 64-Bit Server VM (build 20.9-b04, mixed mode)(每台服务器均要安装java)17.1.4.更新ubuntu更新Ubuntu源sudo apt-get update(每台服务器均要更新)17.1.5.配置hosts文件每台服务器均配置sudo vim /etc/hosts172.31.24.2 bigdata2172.31.24.3 bigdata3172.31.24.4 bigdata417.2. Scala安装在bigdata用户下安装,安装位置为/home/bigdata/spark/scala-2.9.1.final。
(每台电脑都安装)创建mkdir /home/bigdata/spark进入cd /home/bigdata/spark下载wget /files/archive/scala-2.9.1.final.tgz解压tar xzvf scala-2.9.1.final.tgz设置环境变量vim ~/.bashrcvim /etc/profile添加内容#set scalaexport SCALA_HOME=/home/bigdata/spark/scala-2.9.1.finalexport PATH=$SCALA_HOME/bin:$PATH然后source ~/.bashrc17.3.S park安装17.3.1.准备资源cd /home/bigdata/spark直接下载编译好的版本wget /spark-1.0.0-bin-hadoop2.tgz 解压tar xzvf spark-1.0.0-bin-hadoop2.tgzmv spark-1.0.0-bin-hadoop2.tgz spark-1.0.0cd spark-1.0.017.3.2.修改配置文件cd conf/spark-env.shvim spark-env.sh添加如下内容:export SPARK_MASTER_IP=bigdata4export SPARK_MASTER_PORT=7077export SPARK_WORKER_CORES=1export SPARK_WORKER_INSTANCES=1export SPARK_WORKER_MEMORY=1gexport MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}export SCALA_HOME=/home/bigdata/spark/scala-2.9.1.finalexport JAVA_HOME=/usr/java/jdk1.6.0_45export SPARK_HOME=/home/bigdata/spark/spark-1.0.0vim slaves添加内容bigdata4bigdata3bigdata2设置环境变量vim /etc/profile添加如下内容#set sparkexport SPARK_HOME=/home/bigdata/spark/spark-1.0.0export PATH=$SPARK_HOME/bin:$PATHsource /etc/profile17.4. 启动Spark2.4.1启动${SPARK_HOME}/bin/start-all.sh验证是否启动成功Jps输出如下:(主节点下)22215 Worker22018 Master22327 Jps(从节点下)12094 Worker12202 Jps通过web查看http://172.31.24.4:8080/2.4.2停止${SPARK_HOME}/bin/stop-all.sh2.4.3启动spark-shell(默认scala程序)cd /home/bigdata/spark/spark-1.0.0MASTER=spark://bigdata4:7077 bin/spark-shell等待.... 按回车输入val logFile=file:///home/bigdata/spark/spark-1.0.0/README.md(该目录要与你电脑目录相匹配) val logData=sc.textFile(logFile,2).cache()val numAs = logData.filter(line => line.contains("a")).count()看到如下numAs: Long = 73代表你成功启动spark-shellspark-shell 是一个spark application,运行时需要向资源管理器申请资源,如standalone spark、YARN、Mesos。
本例向standalone spark申请资源,所以在运行spark-shell时需要指向申请资源的standalone spark集群信息,其参数为MASTER。
如果未在spark-env.sh中申明MASTER,则使用命令MASTER=spark://cdh1:7077 bin/spark-shell启动;如果已经在spark-env.sh中申明MASTER,则可以直接用bin/spark-shell启动。
由于spark-shell缺省的情况下,会申请所有的CPU资源,也就是8个Core,本实验先看看使用3个Core的情况。
至于spark-shell申请内存资源是通过Application中SparkContext中配置-->环境变量SPARK_MEM-->缺省值512M这样的优先次序来决定,本例中未做任何设置,故每个Executor使用的是512M。
通过web查看http://172.31.24.4:8080/2.4.4启动shell-submit (试试Java程序案例)../spark-1.0.0/bin/spark-submit --class "SparkTest" --master local[4] spark-test-1.0-SNAPSHOT.jar18.创建简单maven项目cmd 命令中创建(文件目录自己决定)输入以下命令:mvn archetype:create -DgroupId=com.ideal.spark.test -DartifactId=spark-test 这样会自动生成App.java的文件进入spark-test目录,执行mvn eclipse:eclipse导入项目这样就可以将项目导入eclipse打开pom.xml文件添加如下内容:<dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.10</artifactId><version>1.0.0</version></dependency>图片如下:在到com.ideal.spark.test中新建SparkTest类在main方法中添加代码开始//这个目录的文件必须是在spark所有的机器中都存在//data1.txt 这个文件必须自己创建然后scp放到spark 的其它机器上String logFile = "file:///home/bigdata/spark/test/data1.txt";SparkConf conf = new SparkConf().setAppName("Spark Application in Java"); JavaSparkContext sc = new JavaSparkContext(conf);JavaRDD<String> logData = sc.textFile(logFile).cache();long numAs = logData.filter(new Function<String, Boolean>() {public Boolean call(String s) {return s.contains("a");}}).count();long numBs = logData.filter(new Function<String, Boolean>() { public Boolean call(String s) {return s.contains("b");}}).count();//注意这是计算行数System.out.println("Lines with a: "+ numAs + ",lines with b: "+ numBs); 结束保存打开项目架构如下图:19.回到cmd命令打jar包回到刚才我们创建项目的位置是在spark-test目录下输入mvn clean package会在target 生成一个spark-test-1.0-SNAPSHOT.jar把这个jar丢到spark主节点上的/home/bigdata/spark/test/目录下20.执行命令(linux系统中)进入Cd /home/bigdata/spark/test/运行命令../spark-1.0.0/bin/spark-submit 这是你的spark安装目录bin/spark-submit一个文件--class "com.ideal.spark.test.SparkTest" 这是你刚才新建java类的路径必须的指定包路径加类名spark-test-1.0-SNAPSHOT.jar 指定你刚才所生产的jar../spark-1.0.0/bin/spark-submit --class "com.ideal.spark.test.SparkTest"--master local[4] spark-test-1.0-SNAPSHOT.jar输出如下:就代表你成功了Lines with a: 3,lines with b: 4恭喜你成功了2.6 Spark命令使用2.7 查看LogLog文件位置在/home/bigdata/spark/spark-1.0.0/logs。