wangkun122

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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Spark 核心是整个项目的基础。它提供了分布式任务调度,调度和基本的 I/O 功能。Spark 使用一种称为RDD(弹性分布式数据集)一个专门的基础数据结构,是整个机器分区数据的逻辑集合。RDDS可以用两种方法来创建的;一个是在外部存储系统引用的数据集,第二个是通过应用转换(如map, filter, reducer, join)在现有RDDS。

RDD抽象通过语言集成API公开。这简化了编程的复杂性,因为应用程序的处理RDDS方式类似于操纵的本地集合数据。

Spark Shell

Spark提供了一个交互的shell − 一个强大的工具,以交互方式分析数据。 这是在 Scala或Python语言。Spark主要抽象称为弹性分布式数据集(RDD)项目的分布式采集。RDDS可以从Hadoop的输入格式来创建(如HDFS文件)或通过转化其他RDDS。

打开 Spark Shell

下面的命令用来打开Spark shell。
$ spark-shell

创建简单RDD

让我们从文本文件中创建一个简单的 RDD。使用下面的命令来创建一个简单的 RDD。
scala> val inputfile = sc.textFile(“input.txt”)
对上述命令的输出为:
inputfile: org.apache.spark.rdd.RDD[String] = input.txt MappedRDD[1] at textFile at <console>:12
 
 
RDD编程
让我们来看看几个RDD转换和操作RDD编程实现,用一个例子的协助说明。

示例

考虑一个单词计数的例子 − 它计算出现在文档中的每个单词。请看下面的文字为输入并保存在主目录中的 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

首先,我们必须使用 Spark-Scala API 读取输入文件,并创建一个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,那么可使用下面的命令。 它会告诉你关于当前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) 
下面的命令是用来查看输出的 Part-00001 文件。
[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

分类:

技术点:

相关文章: