Spark菜鸟笔记(一)

Apache Spark™是用于大规模数据处理的快速和通用引擎。(Apache Spark™ is a fast and general engine for large-scale data processing. )

Spark自带服务的端口

端口号

描述

8080

master的webUI,sparkwebUI的端口

7077

提交任务的端口

8081

worker的webUI的端口

18080

historyServer的webUI的端口

4040

application的webUI的端口

Spark生态圈(组件)

  1. Spark Core:Spark的核心组件,其操作的数据对象是RDD(弹性分布式数据集),类似MapReduce,进行离线计算。
  2. Spark SQL:Spark处理结构化数据的引擎,类似Hive,支持SQL。(是基于Catalyst引擎的交互式大数据SQL技术,使用SchemaRDD来操作SQL,比Shark支持更过的查询表达式。)
  3. Spark Streaming:Spark Streaming通过将流数据按指定时间片累积为RDD,然后将每个RDD进行批处理,进而实现大规模的流数据处理。类似Storm,进行流式计算,处理的是实时数据(流式数据)
  4. Spark MLlib(Machine Learning Library):一个可扩展的Spark机器学习库,MLlib目前支持4种常见的机器学习问题:二元分类、回归、聚类以及协同过滤,还包括一个底层的梯度下降优化基础算法。
  5. Spark Graphx:Spark生态系统中的图计算和并行图计算。

Spark的优点

  1. 运算快:Spark基于内存计算,Spark 比 Hadoop 快100倍。
  2. 通用性:Spark 提供了大量的库,包括SQL、DataFrames、MLlib、GraphX、Spark Streaming。
  3. 易用性:Spark 提供了80多个高级运算符。
  4. Spark是MapReduce的替代方案。
  5. 兼容HDFS、Hive。
  6. 可融入Hadoop的生态系统,以弥补MapReduce的不足。

Spark与 Hadoop的区别

  1. Spark基于内存计算,计算速度远超Hadoop。
  2. Spark只有计算,没有存储。
  3. Spark基于Scala语言、Hadoop用Java语言。

如何执行Spark任务

  1. Spark submit 提交Spark任务
bin/spark-submit --master <master-url>     --class [CLASS_NAME]      <application-jar>    [application-arguments]

参数名

格式

参数说明

-master

MASTER_URL

如spark://host:port, mesos://host:port, yarn, yarn-cluster,yarn-client, local

–class

CLASS_NAME

应用程序的主类

application-jar

path/to/examples.jar

jar所在位置

[application-arguments]

数字

资源参数的调优,没有一个固定的值,需要根据自己的实际情况

–deploy-mode

DEPLOY_MODE

Client或者master,默认是client

–conf

PROP=VALUE

固定的spark配置属性,默认是conf/spark-defaults.conf

  1. Spark shell:交互式的命令行
    —Spark Shell 工具:交互式命令行工具、作为一个Application运行。
    (1)本地模式 :bin/spark-shell (不连接到集群,在本地执行任务,类似Storm的本地模式)
Spark context available as 'sc' (master = local[*], app id = local-1482744865947).

(2)集群模式:bin/spark-shell --master spark://bigdata11:7077

Spark context available as 'sc' (master = spark://bigdata11:7077, app id = app-20180209210815-0002).

(3)Idea中开发Spark的任务

Spark对象

Spark context available as 'sc'  

Spark session available as 'spark' 
//在Spark 2.0后新提供一个统一的访问接口:Spark Core、Spark SQL、Spark Streaming

操作

描述

.textFile(“hdfs://bigdata11:9000/input/data.txt”)

通过sc对象读取HDFS的文件

.flatMap(_.split(" "))

分词操作、压平

.map((_,1))

每个单词记一次数

.saveAsTextFile()

将文件存做本地Text文件

.reduceByKey(key, value)

对相同key的数据进行处理,将value进行累加,最终每个key只保留一条记录。

.reduceByKey((a,b) => a+b)

只保留求和之后的数据作为value

Spark推荐模型的分类

目前最为流行的两种方法是基于内容的过滤和协同过滤

基于内容的过滤

(*)利用物品的内容或是属性信息以及某种相似度定义,来求出与该物品类似的物品。这些属性值通常都是文本内容,比如标题、名称、标签及该物品的其他元数据。

协同过滤

)协同过滤仅依靠以往的行为,比如已有的评级或交易。其内在思想是相似度定义。
)其基本思路是用户会对物品进行显示或隐式的评级。过去表现出相似偏好的用户在未来的偏好也会类似。

数据驱动的机器学习系统的组成

  1. 数据获取与存储,
    机器学习流程的第一步 是获取训练模型所需的数据。获取数据后通常需将其存储起来。要存储的数据包括:原始数据、经过中间处理的数据,以及可用于生产系统的最终建模结果。
  2. 数据清理与转换
    大部分机器学习模型所处理的都是特征(feature)。特征通常是输入型变量所对应的可用于模型的数值表示。
  3. 模型训练与测试循环
    当数据已转换为可用于模型的形式,便可开始模型的训练和测试。在这阶段, 我们主要关注模型选择问题。这可以归结为对特定任务最优建模方法的选择,或是对特定模型最佳参数的选择问题。在训练数据集上运行模型并在测试数据集(即为评估模型而预留的数据,在训练阶段模型没接触过该数据)上测试其效果,这个过程般相对直接, 被称作交叉验证
  4. 模型测试
    经训练-测试循环找出最佳模型后,要让它得到可付诸实践的预测,还需将其部署到生产系统中。
  5. 预测

spark 迭代器(Iterator)

迭代器不是静止不动的,它是随着next()方法而移动的

  1. next()
    调用next()返回下一个元素
  2. hasNext()
    调用hasNext()用于检测是否还有下一个元素