1、
sparkstreaming和strom的区别:
他们的区别是SparkStreaming的吞吐量非常高,秒级准实时处理,Storm是容错性非常高,毫秒级实时处理
解释:sparkStreaming是一次处理某个间隔的数据,比如5秒内的数据,批量处理,所以吞吐量高。
Storm是来一条处理一条,所以速度快,不存在丢失数据
应用场景:对于数据非常重要不能丢失数据的,不能有延迟的,比如股票,金融之类场景的使用Storm
对于没那么高精度,但是要处理大量的数据,可以用sparkSremaing
2、
1、scala只有触发spark特定的语法,才会把代码提交到集群中。
2、spark可以不依赖hdfs,可以依赖别的文件系统(本地文件系统也可以)。
3、
hadoop-strom-spark结合,根据订单详细信息,汇总出总销售量,各个省份销售排行,以及后期的SQL分析,数据分析,数据挖掘
第一阶段(storm实时报表)
(1)用户订单入kafka队列,(2)经过storm,实时计算出总销售量,和各个省份的销售量,(3)将计算结果保存到hbase数据库中。
第二阶段(离线报表)
(1)用户订单入oracle数据库;(2)通过sqoop把数据导入hadoop上;(3)使用mr和rdd对hadoop上的原始订单做etl清洗;(4)建立hive表和sparkSQL内存表。为后期分析做基础。(5)使用HQL实现业务指标分析,和用户画像分析,将结果存在mysql中,供web前台使用。
第三阶段(大规模订单即席查询和多维度查询)
(1)用户订单入oracle数据库;(2)通过sqoop把数据导入hadoop上。(3)写mr把hadoop的数据加载到hbase上;(4)使用hbase Java api实现订单即席查询;(5)solr绑定hbase,做多维度的条件查询。
第四阶段(数据挖掘和图计算)
(1)用户订单入oracle数据库;(2)通过sqoop把数据导入hadoop上。(3)使用mr和rdd对hadoop上的原始订单做etl清洗。
4、
数据探索从数据质量分析和数据特征分析两个角度来对数据进行探索。
数据质量分析主要检查原始数据中是否存在脏数据。
脏数据一般指:缺失值、异常值、不一致的值、重复数据以及含有特殊符号(如#、#、¥)的数据。
缺失值:使用简单的统计分析,可以得到含有缺失值的属性的个数以及每个属性的未缺失数、缺失数与缺失率。
异常值:1、简单统计量分析:在进行异常值分析时,可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的是使用最大值和最小值来判断这个变量的取值是否超出了合理范围。(例:客户年龄最大为199岁,则判断为存在异常值)
2、3σ原则:如果数据服从正态分布,在3σ原则下,数据与平均值的偏差超过3倍标准差的话,判定为异常值。(因为在正态分布下,距离平均值3σ之外的值出现的概率小于0.003)。
3、箱型图分析:异常值被定义为小于(下四分位数 - 1.5*(上四分位数 - 下四分位数)),或者大于(上四分位数 + 1.5*(上四分位数 - 下四分位数))。
5、
出处:https://www.cnblogs.com/yjd_hycf_space/p/7772722.html
ETL讲解
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。
详见博文
6、
MapReduce计算框架-执行流程
见:https://blog.csdn.net/qq_37249672/article/details/107049075
7、
线性回归中的损失函数是这么推导出来的:
首先假设预测值和真实值的误差e是服从高斯分布的。把每个样本的误差e(用样本特征值和权重表示)带入到高斯函数中,可以得到每个样本误差对应的概率密度值。所有样本的概率密度值进行累乘,可以得到样本的似然函数。当似然函数的值越大,越符合实际的规律。所以我们要通过似然函数最大时的值来求解每个样本的权重值。最后化简,可以得到最小二乘法。
理解最大似然函数:比如说扔硬币,正面的概率使x,反面的概率使1-x。扔了两次,一次是正面,一次是反面。则似然函数是x*(1-x)。当我们使似然函数最大时,可以得到x=1/2。这就是最大似然函数求解。
8、
https://blog.csdn.net/qq_34555905/article/details/89150352
RDD工作原理详解
每个spark应用都由一个驱动器程序(driver)来发起集群上的各种并行操作。驱动器包含应用的main函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作。
驱动器程序通过一个SparkContext对象来访问spark。这个对象代表对计算集群的一个连接。shell启动时已经自动创建了一个SparkContext对象,是一个叫做sc的变量。驱动器程序一般要管理多个执行器(executor)节点。
RDD上定义的函数分两种:转化函数和行动函数。
转化(transformation)函数:返回一个新的 RDD,比如 map() 和 filter()
执行(action)函数:把结果输出,不返回RDD。比如 saveAsTextFile、count() 和 first()。
跟MapReduce一样,Spark也是对大数据进行分片计算,Spark分布式计算的数据分片、任务调度都是以RDD为单位展开的。
RDD上的转换操作又分为两种,一种转换操作产生的RDD不会出现新的分片,比如map、filter等,
也就是说一个RDD数据分片,经过map转换操作后,结果还在当前分片中。就像你用map函数对每
个数据加1,得到的还是这样一组数据,只是值不同。实际上,Spark并不是按照代码写的操作
顺序去生成RDD,比如map并不会在物理上生成一个新的数据集。物理上,Spark只有在产生新的
RDD分片时候,才会真的生成一个数据集,Spark的这种特性也被称为惰性计算。
另一种转换操作产生的RDD则会产生新的分片,比如reduceByKey,来自不同分片的相同Key
必须聚合在一起进行操作,这样就会产生新的RDD分片。
总之,Spark应用程序代码中的RDD和Spark执行过程中生成的物理RDD不是一一对应的。
9、
因为Hbase是基于列式存储的,类似于key-value,想要取哪一个信息(字段),可以直接取到。如果是hive中,这种结构化的数据的话,想取某一个字段的信息,需要遍历所有的数据,进行取数。
这样HBase就方便了其他服务端进行数据的查询。
10、
K-means聚类方法总结
优点:
1、解决聚类问题的经典算法,简单、快速
2、当处理大数据集时,该算法保持可伸缩性和高效率
3、当簇近似为高斯分布时,它的效果较好
缺点:
1、在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用
2、必须实现给出k(要生成簇的数目),而且对初值敏感,即对于不同的初值,可能会导致不同结果
3、不适合非凸形状的簇或者大小差别很大的簇
4、对噪声和孤立点敏感
Kmeans如何确定聚类K数:
手肘法、轮廓系数