spark快速入门

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页面

spark快速入门_第1张图片

3.2yarn运行方式

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

spark快速入门_第2张图片
spark快速入门_第3张图片

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

spark快速入门_第4张图片

图中有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 :24

scala> textfile.count()
res0: Long = 200284489 

#countword
#flatmap是将一个变为多个,map是一个对一个变形,reduceByKey只对key进行reduce
scala> 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 :26

scala> 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.VectorAssembler
val 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

你可能感兴趣的:(spark2.x学习心得,spark,spark编程入门,sparkshell,spark快速入门)