Spark和spark Shell 初学
Spark学习
一、Spark简介
- 1.Hadoop中Map-Reduce计算框架的替代品
- 2.运行在HDFS上,可以与Yarn配合
- 3.将中间结果保存在内存而不是磁盘中
- 4.提供了比Map、Reduce更多的高阶函数
- 5.提供了Scala、Python、Java的API以及Scala和Python的shell
二、Spark内置库
- 1.Spark Streaming 流式数据
- 2.SparkSQL JDBC API
- 3.MLlib 机器学习
- 4.GraphX 图
三、RDD
- 弹性分布式数据集
- transform RDD集合 -> RDD集合 变换函数
- action RDD集合 -> 单个值 行动操作
四、使用Spark的方式
- 1.私人机器上安装
- (1) standalone
- (2) with Mesos
- (3) with Yarn
- 2.使用cloudera等公司的虚拟机镜像
- 3.DataBricks
- 4.使用官网提供的脚本在AWS的EC2上构建Spark环境
- *.这里可以下载python2.7,包含大多数常用的科学计算和数据分析库,330M
作者:一只小青鸟
链接:https://www.jianshu.com/p/b122a0898f9d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
RDD抽象通过语言集成API公开。这简化了编程的复杂性,因为应用程序的处理RDDS方式类似于操纵的本地集合数据。
Spark Shell
Spark提供了一个交互的shell − 一个强大的工具,以交互方式分析数据。 这是在 Scala或Python语言。Spark主要抽象称为弹性分布式数据集(RDD)项目的分布式采集。RDDS可以从Hadoop的输入格式来创建(如HDFS文件)或通过转化其他RDDS。
打开 Spark Shell
$ spark-shell
创建简单RDD
scala> val inputfile = sc.textFile(“input.txt”)
inputfile: org.apache.spark.rdd.RDD[String] = input.txt MappedRDD[1] at textFile at <console>:12
示例
考虑一个单词计数的例子 − 它计算出现在文档中的每个单词。请看下面的文字为输入并保存在主目录中的 input.txt 文件。
input.txt − 作为输入文件
people are not as beautiful as they look, as they walk or as they talk. they are only as beautiful as they love, as they care as they share.
打开Spark-Shell
下面的命令用来打开spark shell. 通常情况下,spark 使用Scala构建。因此,Spark 程序需要在 Scala 环境中运行。
$ spark-shell
如果Spark shell 成功打开,会发现下面的输出。看看输出“Spark 上下文可作为sc” 的最后一行表示Spark容器会自动创建Spark 上下文对象名为sc。启动程序的第一步骤之前,SparkContext 对象应该被创建。
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Using Spark\'s default log4j profile: org/apache/spark/log4j-defaults.properties
15/06/04 15:25:22 INFO SecurityManager: Changing view acls to: hadoop
15/06/04 15:25:22 INFO SecurityManager: Changing modify acls to: hadoop
15/06/04 15:25:22 INFO SecurityManager: SecurityManager: authentication disabled;
ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)
15/06/04 15:25:22 INFO HttpServer: Starting HTTP Server
15/06/04 15:25:23 INFO Utils: Successfully started service \'HTTP class server\' on port 43292.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ \'_/
/___/ .__/\_,_/_/ /_/\_\ version 1.4.0
/_/
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)
Type in expressions to have them evaluated.
Spark context available as sc
scala>
创建一个RDD
下面的命令被用于从给定位置读出的文件。这里,新的 RDD 使用输入文件名创建。这是在 textFile(“”)方法的参数字符串是用于输入文件名的绝对路径。然而,如果仅给出文件名,那么它输入文件则在当前位置。
scala> val inputfile = sc.textFile("input.txt")
我们的目标是计算一个文件中的字数。分裂每一行成词创建一个平面地图(flatMap(line ⇒ line.split(“ ”)).
接下来,读每个词作为一个键和值 ‘1’ (<key, value> = <word,1>) 使用映射函数 (map(word ⇒ (word, 1)).
最后,加入类似的键值降低这些键 (reduceByKey(_+_)).
下面的命令用于执行字数统计逻辑。执行此操作后,不会有任何输出,因为这不是一个动作,这是一个转换; 指向一个新的RDD或告诉spark,用给定的数据来做什么)。
scala> val counts = inputfile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_);
同时用RDD工作,如果想了解当前的RDD,那么可使用下面的命令。 它会告诉你关于当前RDD及其依赖调试的描述。
scala> counts.toDebugString
可以使用 persist() 或 cache() 方法标记一个RDD。在第一次计算的操作,这将被保存在存储器中的节点上。使用下面的命令来存储中间转换在内存中。
scala> counts.cache()
应用动作(操作),比如存储所有的转换结果到一个文本文件中。saveAsTextFile(“”)方法字符串参数是输出文件夹的绝对路径。试试下面的命令来保存输出文本文件。在下面的例子中, ‘output’ 的文件夹为当前位置。
scala> counts.saveAsTextFile("output")
打开另一个终端进入主目录(其中spark 在其他终端中执行)。下面的命令用于检查输出目录。
[hadoop@localhost ~]$ cd output/ [hadoop@localhost output]$ ls -1 part-00000 part-00001 _SUCCESS
下面的命令是用来查看输出的 Part-00001 文件。
[hadoop@localhost output]$ cat part-00000
输出
(people,1) (are,2) (not,1) (as,8) (beautiful,2) (they, 7) (look,1)
[hadoop@localhost output]$ cat part-00001
输出
(walk, 1) (or, 1) (talk, 1) (only, 1) (love, 1) (care, 1) (share, 1)原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/spark/apache_spark_core_programming.html