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生态圈(组件)
- Spark Core:Spark的核心组件,其操作的数据对象是RDD(弹性分布式数据集),类似MapReduce,进行离线计算。
- Spark SQL:Spark处理结构化数据的引擎,类似Hive,支持SQL。(是基于Catalyst引擎的交互式大数据SQL技术,使用SchemaRDD来操作SQL,比Shark支持更过的查询表达式。)
- Spark Streaming:Spark Streaming通过将流数据按指定时间片累积为RDD,然后将每个RDD进行批处理,进而实现大规模的流数据处理。类似Storm,进行流式计算,处理的是实时数据(流式数据)
- Spark MLlib(Machine Learning Library):一个可扩展的Spark机器学习库,MLlib目前支持4种常见的机器学习问题:二元分类、回归、聚类以及协同过滤,还包括一个底层的梯度下降优化基础算法。
- Spark Graphx:Spark生态系统中的图计算和并行图计算。
Spark的优点
- 运算快:Spark基于内存计算,Spark 比 Hadoop 快100倍。
- 通用性:Spark 提供了大量的库,包括SQL、DataFrames、MLlib、GraphX、Spark Streaming。
- 易用性:Spark 提供了80多个高级运算符。
- Spark是MapReduce的替代方案。
- 兼容HDFS、Hive。
- 可融入Hadoop的生态系统,以弥补MapReduce的不足。
Spark与 Hadoop的区别
- Spark基于内存计算,计算速度远超Hadoop。
- Spark只有计算,没有存储。
- Spark基于Scala语言、Hadoop用Java语言。
如何执行Spark任务
- 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 |
- 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推荐模型的分类
目前最为流行的两种方法是基于内容的过滤和协同过滤
基于内容的过滤
(*)利用物品的内容或是属性信息以及某种相似度定义,来求出与该物品类似的物品。这些属性值通常都是文本内容,比如标题、名称、标签及该物品的其他元数据。
协同过滤
()协同过滤仅依靠以往的行为,比如已有的评级或交易。其内在思想是相似度定义。
()其基本思路是用户会对物品进行显示或隐式的评级。过去表现出相似偏好的用户在未来的偏好也会类似。
数据驱动的机器学习系统的组成
- 数据获取与存储,
机器学习流程的第一步 是获取训练模型所需的数据。获取数据后通常需将其存储起来。要存储的数据包括:原始数据、经过中间处理的数据,以及可用于生产系统的最终建模结果。 - 数据清理与转换
大部分机器学习模型所处理的都是特征(feature)。特征通常是输入型变量所对应的可用于模型的数值表示。 - 模型训练与测试循环
当数据已转换为可用于模型的形式,便可开始模型的训练和测试。在这阶段, 我们主要关注模型选择问题。这可以归结为对特定任务最优建模方法的选择,或是对特定模型最佳参数的选择问题。在训练数据集上运行模型并在测试数据集(即为评估模型而预留的数据,在训练阶段模型没接触过该数据)上测试其效果,这个过程般相对直接, 被称作交叉验证 - 模型测试
经训练-测试循环找出最佳模型后,要让它得到可付诸实践的预测,还需将其部署到生产系统中。 - 预测
spark 迭代器(Iterator)
迭代器不是静止不动的,它是随着next()方法而移动的
- next()
调用next()返回下一个元素 - hasNext()
调用hasNext()用于检测是否还有下一个元素