大数据
此专栏为博主关于大数据的一些理解与理解,包括大数据环境的搭建、理论理解、实践应用,以及异常分析处理方法等。
ChanKamShing
这个作者很懒,什么都没留下…
展开
-
Hive执行流程原理
hive执行流程原理原创 2022-07-17 18:06:35 · 2974 阅读 · 0 评论 -
Hive中的各种存储格式的区别
hive包含的文件存储格式有:textFile、SequenceFile、RCfile、ORCFile,parquet。textFile: 默认的文件格式,行存储。 优点:最简单的数据格式,便于和其它工具(pig,grep,awk)共享数据,便于查看和编辑;加载快; 缺点:存储空间占用较大,I/O性能低;不可对数据进行切割、...原创 2019-11-16 14:23:41 · 1483 阅读 · 0 评论 -
CF中User-Based与Item-Based的区别
先来了解以下两者的实现思路:User-Based算法基本思路:找到与目标用户购买过相(同)类似商品的用户,作为相似用户; 得到相似用户评价很高的,并且目标用户没有评分过(购买过)的Item,并推荐给目标用户;Item-Based算法基本思路:计算目标用户评分过(购买过)的Item与其他Item的相似度; 根据目标用户的历史行为和物品的相似度,为目标用户生成推荐列表; ...原创 2019-11-05 14:05:11 · 1304 阅读 · 0 评论 -
在线实验——ABTest
ABTest是为了确认两种方案中哪一种方案更适合。原理,让一部分用户使用A方案,另一部分用户使用B方案,记录下两部分用户的反馈情况,然后根据相应的指标确认A,还是B更适合。 在推荐系统中,为了对比不同的算法、不同数据集对最终结果的影响,通过一定的规则将用户随机分成几组,并对不同组才去不同的召回或推荐算法,最终通过不同组的用户的各种评估指标来对比分析。基本流程:...原创 2019-11-05 12:47:04 · 867 阅读 · 0 评论 -
HDFS的读写过程
一、HDFS的写过程 Client节点,调用create方法创建DistributedFileSystem对象,然后向NameNode发送写请求,NameNode允许之后,返回DataNode节点信息给Client节点,接着Client调用write方法,创建FSDataOutputStream对象,根据NameNode返回的DataNode节点信息,开始向指定的DataNo...原创 2019-10-28 12:41:29 · 377 阅读 · 0 评论 -
Spark的Yarn CLuster与Yarn Client区别
一、Yarn Cluster模式二、Yarn Client模式 对比两种模式的架构图,可以看出,两者的本质区别:AM进程的区别。 Cluster模式下,driver运行在AM中,负责向Yarn(RM)申请资源,并监督Application的运行情况,当Client(这里的Client指的是Master节点)提交作业后,就会关掉Client,作业会继续...原创 2019-10-24 14:52:33 · 198 阅读 · 0 评论 -
HBase的容错机制
一、HBase系统架构图 先来认识以下HBase是如何操作数据的。 读数据:Client首先向ZK发送读取数据的请求,ZK返回metaData表所在的HRegionServer的元数据信息给Client,Client到metaData表所在的HRegionServer请求数据的元数据信息,包括数据HRgion所在的HRegionServer位置信息,数据的r...原创 2019-10-18 18:16:48 · 688 阅读 · 0 评论 -
SparkStreaming与SparkSql整合使用
SparkStreaming的数据是DStream的形式,本质上是RDD类型数据,而SparkSql则是DataFrame的数据类型,所以要使用DataFrame,就需要创建SparkSession会话。SparkStreaming和SparkSession的创建都会用到SparkConf,为了一致性,所以两者需要公用一个SparkConf。一、创建一个SparkSession...原创 2019-10-13 11:21:58 · 1284 阅读 · 0 评论 -
SparkStreaming黑名单过滤
一、思路1、获取黑名单数据,处理成RDD形式 一般情况,黑名单数据存储在数据库里面,获取之后将每个黑名单数据处理成(blackName,true)的Tuple形式;2、接收数据,处理成(k,v)形式 从数据源接收到数据之后,取出name作为key,整条数据作为value,譬如:输入数据为"20190929zhangsan 18",那么处理后为(zhan...原创 2019-10-13 09:06:04 · 551 阅读 · 0 评论 -
Spark Streaming到Mysql
package com.cjsimport java.sql.DriverManagerimport org.apache.log4j.{Level, Logger}import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}import org.apac...原创 2019-10-12 19:30:41 · 191 阅读 · 0 评论 -
User协同过滤(基于Spark实现)
项目地址:https://github.com/ChanKamShing/UserCF_Spark.git推荐系统的作业流程:召回/match(推荐引擎)-> 物品候选集 -> 过滤 -> 排序 -> 策略(保证结果多样性) -> 推荐list协同过滤CF属于第一阶段,我们常常称之为“推荐引擎”。“推荐引擎”可以有多个基准,包括:基于相似用户、基于相似物品...原创 2019-08-25 12:22:55 · 997 阅读 · 0 评论 -
User协同过滤(基于Python实现)
项目地址:https://github.com/ChanKamShing/UserCF_python.git推荐系统的作业流程:召回/match(推荐引擎)-> 物品候选集 -> 过滤 -> 排序 -> 策略(保证结果多样性) -> 推荐list协同过滤CF属于第一阶段,我们常常称之为“推荐引擎”。“推荐引擎”可以有多个基准,包括:基于相似用户、基于相似物...原创 2019-08-24 18:08:02 · 610 阅读 · 0 评论 -
Spark存储原理——数据写入过程
Spark数据的写入过程的入口点位doPutIterator方法。下面是一些方法的调用关系图: 在该方法中,根据数据是否缓存到内存中处理。如果不缓存到内存中,则调用BlockManager的putIterator方法直接存储到磁盘中;如果缓存到内存中,则先判断数据存储级别是否对数据进行了反序列化操作:如果设置了反序列化操作,则调用putIteratorAsVa...原创 2019-08-19 09:41:55 · 504 阅读 · 0 评论 -
Spark的TaskSetManager(任务管理器)的排序算法
Spark作业执行中,有一个步骤是给任务进行资源分配,实际上这些任务由一些任务管理器TaskSetManager负责管理,资源分配过程中,会先根据某种排序算法排好序,然后根据就近原则给任务进行资源分配。那么关于TaskSetManager的排序是根据哪个算法呢?现在就来介绍。 排序算法由两种调度策略FIFOSchedulingAlorithm和FairSchedu...原创 2019-08-15 11:24:41 · 316 阅读 · 0 评论 -
SparkSql中,关于Hive表与Parquet文件的Schema转化兼容
从表Schema处理角度对比Hive和Parquet,两者主要的区别:Hive区分大小写,Parquet不区分大小写; Hive允许所有的列为空,而Parquet不允许所有列为空;基于上述两点区别,在进行Hive metastore Parquet转换为SpqrkSql Parquet时,需要将两者的结构进行一致化,其一致化规则:两者同名字段必须具有相同的数据类型,一致化后的字段必须为...原创 2019-08-10 17:52:41 · 940 阅读 · 0 评论 -
SparkSQL自定义强类型聚合函数
自定义强类型聚合函数跟自定义无类型聚合函数的操作类似,相对的,实现自定义强类型聚合函数则要继承org.apache.spark.sql.expressions.Aggregator。强类型的优点在于:其内部与特定数据集紧密结合,增强了紧密型、安全性,但由于其紧凑的特性,降低了适用性。准备employ.txt文件:Michael,3000Andy,4500Justin,...原创 2019-08-08 22:24:33 · 209 阅读 · 0 评论 -
SparkSQL自定义无类型聚合函数
准备数据文件:Michael,3000Andy,4500Justin,3500Betral,4000一、定义自定义无类型聚合函数 想要自定义无类型聚合函数,那必须得继承org.spark.sql.expressions.UserDefinedAggregateFunction,然后重写父类得抽象变量和成员方法。package com.cjsimport ...原创 2019-08-08 22:17:16 · 189 阅读 · 0 评论 -
RDD转DataFrame常用的两种方式
随着Spark1.4.x的更新,Spark提供更高阶的对象DataFrame,提供了比RDD更丰富的API操作,同时也支持RDD转DataFrame(下面简称“DF”),但是要注意,不是任意类型对象组成的RDD都可以转换成DF,,只有当组成RDD[T]的每一个T对象内部具有鲜明的字段结构时,才能隐式或者显示地创建DF所需要的Schema(结构信息),从而进行RDD->DF转换...原创 2019-08-07 22:47:07 · 674 阅读 · 0 评论 -
Flink的WaterMark,及demo实例
实际生产中,由于各种原因,导致事件创建时间与处理时间不一致,收集的规定对实时推荐有较大的影响。所以一般情况时选取创建时间,然后事先创建flink的时间窗口。但是问题来了,如何保证这个窗口的时间内所有事件都到齐了?这个时候就可以设置水位线(waterMark)。概念:支持基于时间窗口操作,由于事件的时间来源于源头系统,很多时候由于网络延迟、分布式处理,以及源头系统等各种原因导致源...原创 2019-08-18 20:02:52 · 474 阅读 · 0 评论 -
Spark作业执行原理(六)——获取执行结果
对于Executor的计算结果,会根据结果的大小使用不同的处理策略:计算结果在(0,128MB-200KB)区间内:通过Netty直接发送给Driver终端; 计算结果在[128MB, 1GB]区间内:将结果以taskId为编号存入到BlockManager中,然后通过Netty把编号发送给Driver终端;阈值可通过Netty框架传输参数设置spark.akka.fra...原创 2019-08-05 15:03:27 · 758 阅读 · 0 评论 -
Spark作业执行原理(五)——执行任务
在Spark消息通信原理(三)(https://blog.csdn.net/weixin_39400271/article/details/97136007)中第(6)点提到过,Executor是任务执行的容器,executor接收到LaunchTask消息之后(其实是GoraseGrainedExecutorBackend接收到来自DriverEndpoint的LaunchTas...原创 2019-08-05 11:32:39 · 149 阅读 · 0 评论 -
Spark作业执行原理(四)——提交任务
首先熟悉一下该阶段的一些重要方法的调用关系图: 在上一篇提交调度阶段中,提到:当该阶段不存在父调度阶段时,就会调用DAGScheduler的submitMissingTasks方法。这个方法就是触发任务的提交。在方法中,会根据调度阶段Partition个数拆分对应的个数的任务,一个partition对应一个task,每一个stage里的所有task组成一个TaskSet,将会...原创 2019-08-03 15:23:12 · 210 阅读 · 0 评论 -
Spark作业执行原理(三)——提交调度阶段
在上一篇划分调度阶段中的handleJobSubmitted方法中,提到finalStage的生成,在生成finalStage的同时,建立起所有Stage的依赖关系,然后通过finalStage生成一个作业实例,在该作业实例中按照顺序提交调度阶段进行执行,在执行过程中监听总线获取作业、阶段执行的情况。回顾handleJobSubmitted方法中部分源码://根据最后一个...原创 2019-08-01 18:09:28 · 176 阅读 · 0 评论 -
Spark作业执行原理(二)——划分调度阶段
Spark调度阶段的划分是由DAGScheduler实现,DAGScheduler会从最后一个RDD出发,根据RDD的lineage使用广度优先算法遍历整个依赖树(总共使用了两次,一次是遍历区分ResultStage范围;另一次则是遍历获取ShuffleMapStage划分依据,用来划分每个ShuffleMapStage范围),从而划分调度阶段,调度阶段的划分依据是以是否进行shu...原创 2019-08-01 11:43:10 · 332 阅读 · 0 评论 -
Spark消息通信原理(三)——Spark运行时消息通信
一、Spark的应用程序执行过程: 在Spark中,每一个“作业”称为一个应用程序(Application),每一个Application都必须有一个SparkContext,相当于application的入口,或者理解为环境。当用户(Client)提交应用程序(Application)时,该application的SparkContext就会向Master发送应用注册消息,ma...原创 2019-07-26 17:54:11 · 316 阅读 · 0 评论 -
浅谈数据仓库的ETL
一、基本概念 ETL,它是Extract、Transform、Load三个单词的首写字母。ETL是建立数据仓库最重要的处理过程,也是工作量最大的环节,一般会占到整个数据仓库建立的一半工作量。抽取:从操作型数据源获取数据; 转换:转换数据,使之转变为适用于查询和分析的形式和结构; 装载:将转换后的数据导入到最终的目标数据仓库; 建立一个数据仓库,就是要把来自...原创 2019-07-23 20:20:18 · 272 阅读 · 0 评论 -
Spark消息通信原理(二)——Spark启动消息通信
Spark启动过程中,主要是进行Master和Worker之间的通信。 首先,由Worker节点向Master发送注册信息,然后,Master处理完毕,返回注册成功或者失败消息,如果注册成功,Worker会定时发送心跳给Master。具体过程如下: 当master节点启动后,随之启动各worker节点,worker启动时会创建RpcEnv...原创 2019-07-24 09:00:27 · 214 阅读 · 0 评论 -
Spark消息通信原理(一)——Spark消息通信架构
在Spark中定义了通信框架的接口,这些接口中调用了Netty的具体方法(在spark2.x前,使用的是Akka)。各接口和实现类的关系如下图所示。 通信架构使用了工厂模式实现(关于工厂模式,可以参考:https://blog.csdn.net/weixin_39400271/article/details/86578215)。首先定义了RpcEnvFac...原创 2019-07-23 14:29:49 · 314 阅读 · 0 评论 -
Spark——传递函数与闭包
在Scala中,你可以在任何作用于内定义函数,在函数体内,可以访问相应作用域内的任何变量;还不止,你的函数还可以在变量不再处于作用于内的时候被调用,这就是闭包的最基本的理解。一、transform、action算子的函数参数 在spark集群中,spark应用由负责运行用户编写的main函数,以及在集群上运行的各种并行操作的驱动器程序(Driver)和并行运行...原创 2019-07-22 22:22:19 · 209 阅读 · 0 评论 -
深入浅出Kafka——可靠性存储
一、kafka体系架构 由上图可知,有三台机器搭建的kafka集群,kafka作为一种消息队列,producer以push模式将数据发送到kafka的机器上(每一台kafka机器可以认为是一个kafkabroker),同时订阅了kafkabroker的consumer,以pull模式对消息进行消费。请注意到一个问题,上图与zookeeper集群有联系的只有kafka集群和...原创 2019-06-24 17:29:26 · 271 阅读 · 0 评论 -
CentOS7环境搭建Kafka2.11+(flume测试、多producer——单topic——多consumer)
写在最前,本次环境搭建是在Hadoop2.6.1,Zookeeper3.4.11,三节点的基础上完成的。(关于搭建Hadoop环境,可参考:https://blog.csdn.net/weixin_39400271/article/details/89057884关于搭建zookeeper环境,可参考:https://blog.csdn.net/weixin_39400271/articl...原创 2019-06-08 00:06:00 · 563 阅读 · 0 评论 -
CentOS7搭建Flume1.6环境
写在最前,后面测试会用到HDFS2,所以本次环境搭建是在Hadoop2.6.1,三节点的基础上完成的。(关于搭建Hadoop环境,可参考:https://blog.csdn.net/weixin_39400271/article/details/89057884)说明:集群环境:Master 192.168.112.10Slave1 192.168.112.11Slave2...原创 2019-06-03 23:45:26 · 296 阅读 · 0 评论 -
CentOS7安装Zookeeper3.4.11+HBase1.3.3
写在最前,本次环境搭建是在Hadoop2.6.1,三节点的基础上完成的。(关于搭建Hadoop环境,可参考:https://blog.csdn.net/weixin_39400271/article/details/89057884)说明:#master,表示在master节点上操作;#master,#slave1,#slave2,表示在三个节点上都要操作;还有一点需要注...原创 2019-05-25 23:26:31 · 604 阅读 · 0 评论 -
Hadoop1.x的单点问题与Hadoop2.x HA原理
一、HDFS1.x架构图 对于HDFS1.x来讲,它的架构图由三个组件组成:NameNode、SecondaryNameNode和DataNode。 稍微了解过hadoop1.x的同学,就会知道hadoop1.x集群里面的资源管理和作业调度及监控都是有NameNode负责,一个集群,只有一台机器(Master)有NameNode进程,这就出现一个问题,当这个...原创 2019-05-18 12:06:53 · 430 阅读 · 0 评论 -
Hadoop2.x——Yarn原理
Hadoop2.x较Hadoop1.x来说,变化非常大,主要主要体现在Hadoop2.x引入了“Yarn”这个核心部件。 hadoop1.x有两大部件,HDFS和MadpReduce,其中HDFS(Hadoop Distributed Files System)用于分布式存储文件,便于集群中各机器从上面读取和写入文件(数据),MadpReduce则是Hadoo...原创 2019-05-11 11:22:28 · 759 阅读 · 0 评论 -
CentOS7搭建Hive1.2.2+mysql5.7
写在最前,本次环境搭建是在Hadoop2.6.1,三节点的基础上完成的。(关于搭建Hadoop环境,可参考:https://blog.csdn.net/weixin_39400271/article/details/89057884)说明:#master,表示在master节点上操作;#master,#slave1,#slave2,表示在三个节点上都要操作;一、安装Hive1....原创 2019-04-21 22:01:08 · 342 阅读 · 0 评论 -
Spark Streaming消费Kafka消息的两种方式
一、Receiver方式 Receiver方式,消息的offset存储在zookeeper。由Receiver维护,Receiver所扮演的角色是数据接收器。数据从Kafka传到Receiver中,Receiver将数据存储在内存或者磁盘,然后记录在容错日志文件系统中,同时将消息的offset更新到zookeeper中,元数据信息传给Driver。其使用的是Kafka高阶AP...原创 2019-10-10 17:20:34 · 1806 阅读 · 2 评论 -
Shuffle的两种写操作
一、简介 在Hadoop的MapReduce框架中,Shuffle是连接Map和Reduce之间的桥梁,Map的输出要被使用到Reduce中必须经过Shuffle这个环节。由于Shuffle阶段涉及磁盘的读写和网络传输,因此Shuffle的性能高低直接影响到整个程序的性能和吞吐量。在MapReduce过程中,需要各个节点上的同一类数据汇集到某个节点进行计算,把这些分布在不同节点的...原创 2019-10-09 14:14:10 · 668 阅读 · 0 评论 -
Item协同过滤(基于Python实现)
在众多召回策略里面,基于Item与基于User(可参考:https://blog.csdn.net/weixin_39400271/article/details/100052023)在实现上非常相似。所以这里使用了跟基于User协同过滤的数据u.data。u.data数据格式(user_id, item_id, rating, timestamp)实现原理: ...原创 2019-09-05 09:37:15 · 348 阅读 · 0 评论 -
Spark实现TF-IDF——文本相似度计算
在Spark1.2之后,Spark自带实现TF-IDF接口,只要直接调用就可以,但实际上,Spark自带的词典大小设置较于古板,如果设置小了,则导致无法计算,如果设置大了,Driver端回收数据的时候,容易发生OOM,所以更多时候都是自己根据实际情况手动实现TF-IDF。不过,在本篇文章中,两种方式都会介绍。数据准备: val df = ss.sql("se...原创 2019-09-01 00:11:53 · 1622 阅读 · 2 评论