spark快速入门

来源:互联网 发布:正交矩阵的性质证明 编辑:程序博客网 时间:2024/06/06 01:06

spark快速入门的helloworld

1.下载安装

spark安装很简单,开箱即用,所以只需要下载解压到指定位置就可以了,另外jdk必不可少。
http://spark.apache.org/downloads.html

2.服务

spark常见的服务方式有以下几种

  • spark-submit,提交自己的spark-jar给spark运行
  • spark-shell,在spark-submit的基础上直接实例了sparkcontext对象,可以写入代码和spark实时交互
  • spark-sql,在spark-submit的基础上,实例了sparkcontext和sqlcontext,使用sql和spark交互

这里使用spark-shell直接写入代码和spark进行交互

3.部署(运行方式)

官方叫做deploy(部署),我理解为spark的运行方式。

spark是分布式计算框架,所以要涉及到资源的管理,分布式的资源管理框架有yarn、mesos、kubernetes等,spark实现了这些分布式资源框架的接口,就可以在这些分布式资源框架上运行。

目前spark的deploy方式有以下几种,spark启动的时候由参数master指定。

  • local,本地启动,会在本地启动指定进程来运行,一般用于调试。
    • local,启动一个进程
    • local[k],启动k个进程
    • local[k,f],启动k个进程,单个任务的失败次数为f,失败次数默认为4
    • local[*],机器有多少个core,启动多少个进程
    • local[*,f]
  • spark://host:port,standalone模式,启动spark自己的资源管理系统,这个很少用。
  • mesos://host:port,mesos模式,mesos是随着天然支持docker火起来的,随着kubernetes的独占鳌头,mesos渐渐淡出人们的视野,mesos用的也非常少。
  • yarn,在hadoop的yarn中运行,生产中使用最多的。
  • kubernetes,新版的spark在支持测试中。

下面只测试两种最常用的模式,yarn和local,前者是生产中使用最多,后面多为测试调试使用,如果你现在初学spark且没有多个机器,就可以用这个模式来运行spark。

3.1local运行方式

bin/spark-shell --master local[10] \--driver-memory 2g --driver-cores 2 \--excutor-memory 2g

输入地址http://ip:4040/可以查看web页面

这里写图片描述

3.2yarn运行方式

bin/spark-shell --master yarn \--driver-memory 2g --driver-cores 2 \--executor-memory 16g --executor-cores 16 \--num-executors 3

这里写图片描述
这里写图片描述

spark-shell启动后,命令行变为下面的样子

这里写图片描述

图中有spark context avaliable as “sc”,spark session avaliable as “spark”
spark-shell中实例化了sparkcontext对象,sparkcontext对象是和spark进行交互的入口。

4.HelloWorld

准备一个文本文件,然后上传到hdfs上。如果你是用yarn模式运行的,可以准备一个很大的,顺便看下spark处理数据的能力。
这里我上传了一个2g大小,2亿行的文本数据。

下面在spark-shell中输入代码

#计算行数scala> val textfile=sc.textFile("hdfs://ht05:9000/zhaowei/pass.txt");textfile: org.apache.spark.rdd.RDD[String] = hdfs://ht05:9000/zhaowei/pass.txt MapPartitionsRDD[1] at textFile at <console>:24scala> textfile.count()res0: Long = 200284489 #countword#flatmap是将一个变为多个,map是一个对一个变形,reduceByKey只对key进行reducescala> val wordcount=textfile.flatMap(line=>line.split(" ").map(word=>(word,1))).reduceByKey(_+_)wordcount: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[3] at reduceByKey at <console>:26scala> wordcount.count()res1: Long = 195558136  ##dataframe,dataframe相当于一张表,按照结构化数据操作scala> val df=textfile.toDF("name");df: org.apache.spark.sql.DataFrame = [name: string]scala> df.count()res2: Long = 200284489                                                          scala> df.filter(col("name").like("%zhaowei%")).count()res3: Long = 10354                                                              scala> df.filter(col("name").like("%zhaowei%")).show(10)+-----------------+|             name|+-----------------+|     0396zhaowei ||       123zhaowei||      123zhaowei ||    123zhaoweijie||  1988217zhaowei || 19891127zhaowei ||  2993456zhaowei ||       321zhaowei|| 665401671zhaowei||  6691325zhaowei |+-----------------+only showing top 10 rows##机器学习,利用逻辑回归算法跑模型##下面的代码,可以跑下看看结果,查下逻辑回归的资料,这个算法在统计学中经常用到。val df=textfile.map(word=>(word.length)).toDF("f1");import org.apache.spark.ml.feature.VectorAssemblerval df2= new VectorAssembler().setInputCols(Array("f1")).setOutputCol("features").transform(df)val df3= df2.withColumn("label", $"f1")import org.apache.spark.ml.classification.LogisticRegression val lr = new LogisticRegression().setMaxIter(10)val model = lr.fit(df3)val weights = model.weights#用训练的模型预测原始数据model.transform(df3).show()

5.参考

http://spark.apache.org/examples.html
http://spark.apache.org/docs/latest/cluster-overview.html
http://spark.apache.org/docs/latest/running-on-yarn.html

原创粉丝点击