大数据
文章平均质量分 64
大数据入门
简单随风
这个作者很懒,什么都没留下…
展开
-
大数据基准测试工具梳理
大数据基准测试的主要目的是对各种大数据产品进行测试,评估它们在不同硬件平台、不同数据量和不同计算任务下的性能表现。原创 2023-01-11 18:26:40 · 961 阅读 · 0 评论 -
基于物品的协同过滤实现demo
基于物品(item-based)的协同过滤的算法步骤:计算用户-物品打分矩阵计算物品相似度矩阵用户-物品打分矩阵 * 物品相似度矩阵 = 推荐列表例如我们有一个基于用户(userId)对物品(itemId)进行打分(vote)的数据源想获取针对用户A(User_A)的物品推荐列表object Test { case class UserItemVote(userId:String,itemId:String,vote:Float) def main(args: Array[原创 2021-11-09 16:46:06 · 794 阅读 · 0 评论 -
基于用户的协同过滤实现demo
例如我们有一个基于用户(userId)对物品(itemId)进行打分(vote)的数据源然后我们想根据用户的协同过滤算法计算某用户的TopN相似用户import org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.catalyst.ScalaReflectionimport org.apache.spark.sql.types.StructTypeimport org.apache.spark.sql.functions._原创 2021-11-08 18:34:42 · 1863 阅读 · 0 评论 -
推荐系统常见问题
推荐系统常见问题主要集中在以下4个维度:冷启动数据稀疏不断变化的用户喜好不可预知的事项冷启动1.用户冷启动:给新用户做个性化推荐解决方案:根据用户注册信息对用户进行分类推荐热门的排行榜基于深度学习的语义理解模型引导用户把自己的属性表达出来利用用户在社交媒体的信息2.物品冷启动:把新的物品推荐给特定的用户解决方案:文本分析主题模型给物品打标签推荐排行榜单3.系统冷启动:新系统让用户感受到个性化推荐数据稀疏解决方案:奇异值分解:降低矩阵维数能降低数据稀疏原创 2021-11-08 16:14:49 · 1006 阅读 · 0 评论 -
Spark:DataFrame使用
Spark SQLSpark SQL是Spark中的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象,就是 DataFrame。DataFrame=RDD+Schema它其实和关系型数据库中的表非常类似,RDD可以认为是表中的数据,Schema是表结构信息。 DataFrame可以通过很多来源进行构建,包括:结构化的数据文件,Hive中的表,外部的关系型数据 库,以及RDDSpark1.3出现的 DataFrame ,Spark1.6出现了 DataSet ,在Spark2.0中两者原创 2021-09-13 09:24:13 · 1740 阅读 · 0 评论 -
Spark程序性能优化
性能优化分析一个计算任务的执行主要依赖于CPU、内存、带宽Spark是一个基于内存的计算引擎,所以对它来说,影响最大的可能就是内存,一般我们的任务遇到了性能瓶颈大概率都是内存的问题,当然了CPU和带宽也可能会影响程序的性能,这个情况也不是没有的,只是比较少。Spark性能优化,其实主要就是在于对内存的使用进行调优。通常情况下,如果你的Spark程序计算的数据量比较小,并且你的内存足够使用,那么只要网络不至于卡死,一般是不会有大的性能问题的。但是Spark程序的性能问题往往出现在针对大数据量进行计算(比原创 2021-09-07 21:04:09 · 1119 阅读 · 1 评论 -
Spark:checkpoint介绍
checkpoint,是Spark提供的一个比较高级的功能。有时候我们的Spark任务,比较复杂,从初始化RDD开始,到最后整个任务完成,有比较多的步骤,比如超过10个transformation算子。而且整个任务运行的时间也特别长,比如通常要运行1~2个小时。在这种情况下,就比较适合使用checkpoint功能了。因为对于特别复杂的Spark任务,有很高的风险会出现某个要反复使用的RDD因为节点的故障导致丢失,虽然之前持久化过,但是还是导致数据丢失了。那么也就是说,出现失败的时候,没有容错机制,所以原创 2021-09-05 11:31:15 · 2946 阅读 · 0 评论 -
Spark:shuffle机制分析
在Spark中,什么情况下,会发生shuffle?reduceByKey、groupByKey、sortByKey、countByKey、join等操作都会产生shuffle。那下面我们来详细分析一下Spark中的shuffle过程。Spark的shuffle历经了几个过程Spark 0.8及以前 使用Hash Based ShuffleSpark 0.8.1 为Hash Based Shuffle引入File Consolidation机制Spark1.6之后使用Sort-Base Shuf原创 2021-09-05 09:32:05 · 536 阅读 · 0 评论 -
Spark:Job的三种提交模式
第一种,standalone模式,基于Spark自己的standalone集群。指定–master spark://bigdata01:7077第二种,是基于YARN的client模式。指定–master yarn --deploy-mode client这种方式主要用于测试,查看日志方便一些,部分日志会直接打印到控制台上面,因为driver进程运行在本地客户端,就是提交Spark任务的那个客户端机器,driver负责调度job,会与yarn集群产生大量的通信,一般情况下Spark客户端机器和Ha.原创 2021-09-03 09:12:57 · 462 阅读 · 0 评论 -
Spark:Stage介绍
spark job是根据action算子触发的,遇到action算子就会起一个jobstage的划分依据就是看是否产生了shuflle(即宽依赖),遇到一个shuffle操作就划分为前后两 个stagestage是由一组并行的task组成,stage会将一批task用TaskSet来封装,提交给TaskScheduler进行分配,最后发送到Executor执行下面来看一张图来具体分析一下为什么是从后往前呢?因为RDD之间是有血缘关系的,后面的RDD依赖前面的RDD,也就是说后面的RDD要等前原创 2021-09-03 09:00:26 · 3182 阅读 · 0 评论 -
Spark:宽依赖与窄依赖
窄依赖(Narrow Dependency):指父RDD的每个分区只被子RDD的一个分区所使用,例如map、filter等这些算子 一个RDD,对它的父RDD只有简单的一对一的关系,RDD的每个partition仅仅依赖于父RDD 中的一个partition,父RDD和子RDD的partition之间的对应关系,是一对一的。宽依赖(Shuffle Dependency):父RDD的每个分区都可能被子RDD的多个分区使用,例如groupByKey、 reduceByKey,sortBykey等算子,这些算.原创 2021-09-02 09:17:35 · 5591 阅读 · 0 评论 -
Flink核心API
Flink中提供了4种不同层次的API,每种API在简洁和易表达之间有自己的权衡,适用于不同的场景。目前前3个会用得比较多。SQL:Flink的SQL底层是基于Apache Calcite,Apache Calcite实现了标准的SQL,使用起来比其他API更加灵活,因为可以直接使用SQL语句。Table API和SQL可以很容易地结合在一块使用,因为它们都返回Table对象。Table API:一般与DataSet或者DataStream紧密关联,可以通过一个DataSet或DataStream创.原创 2021-09-02 08:41:05 · 410 阅读 · 0 评论 -
Flink:Streaming+Batch 完成WordCount
我们通过socket实时产生一些单词,使用flink实时接收数据,对指定时间窗口内(例如:2秒)的数据进行聚合 统计,并且把时间窗口内计算的结果打印出来Scala版本import org.apache.flink.streaming.api.scala.StreamExecutionEnvironmentimport org.apache.flink.streaming.api.windowing.time.Timeobject SocketWindowWordCountScala { d原创 2021-08-30 15:29:05 · 372 阅读 · 0 评论 -
Spark共享变量
默认情况下,如果在一个算子函数中使用到了某个外部的变量,那么这个变量的值会被拷贝到每个task中。此时每个task只能操作自己的那份变量副本。如果多个task想要共享某个变量,那么这种方式是做不到的。Spark为此提供了两种共享变量:一种是Broadcast Variable(广播变量)另一种是Accumulator(累加变量)Broadcast VariableBroadcast Variable会将使用到的变量,仅仅为每个节点拷贝一份,而不会为每个task都拷贝一份副本,因此其最大的作用,原创 2021-08-22 12:55:22 · 366 阅读 · 0 评论 -
RDD持久化
RDD持久化原理Spark中有一个非常重要的功能就是可以对RDD进行持久化。当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition数据持久化到内存中,并且在之后对该RDD的反复使用中,直接使用内存中缓存的partition数据。这样的话,针对一个RDD反复执行多个操作的场景,就只需要对RDD计算一次即可,后面直接使用该RDD,而不需要反复计算多次该RDD。因为正常情况下这个RDD的数据使用过后内存中是不会一直保存的。例如这样的操作:针对mapRDD需要多次使用的val原创 2021-08-21 12:10:20 · 924 阅读 · 0 评论 -
RDD操作:Transformation与Action
Spark对RDD的操作可以整体分为两类: Transformation和Action这里的Transformation可以翻译为转换,表示是针对RDD中数据的转换操作,主要会针对已有的RDD创建一个新的RDD: 常见的有map、flatMap、filter等等Action可以翻译为执行,表示是触发任务执行的操作,主要对RDD进行最后的操作,比如遍历、 reduce、保存到文件等,并且还可以把结果返回给Driver程序不管是Transformation里面的操作还是Action里面的操作,我们一般会把原创 2021-08-21 11:45:27 · 498 阅读 · 0 评论 -
RDD的三种创建方式
Spark提供三种创建RDD方式: 集合、本地文件、HDFS文件使用程序中的集合创建RDD,主要用于进行测试,可以在实际部署到集群运行之前,自己使用集合构造一些测试数据,来测试后面的spark应用程序的流程。使用本地文件创建RDD,主要用于临时性地处理一些存储了大量数据的文件使用HDFS文件创建RDD,是最常用的生产环境的处理方式,主要可以针对HDFS上存储的数据,进 行离线批处理操作集合如果要通过集合来创建RDD,需要针对程序中的集合,调用SparkContext的parallelize()原创 2021-08-19 08:59:09 · 8024 阅读 · 0 评论 -
使用Spark完成WordCount程序(Java、Scala双语言)
我们分别使用scala和java两门语言完成项目先创建一个maven项目,添加java和scala的sdkScala版本pom文件安装依赖<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-code_2.11</artifactId> <version>2.4.3</version></dependency>i原创 2021-08-17 09:08:49 · 573 阅读 · 0 评论 -
Java操作Hive
使用JDBC操作Hive也需要先启动hiveserver2服务引入依赖<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version></dependency>创建连接import java.sql.Connection;i.原创 2021-07-29 08:47:12 · 1667 阅读 · 0 评论 -
命令行操作Hive
针对命令行这种方式,其实还有两种使用第一个是使用bin目录下的hive命令,这个是从hive一开始就支持的使用方式。后来又出现一个beeline命令,它是通过HiveServer2服务连接hive,它是一个轻量级的客户端工具,所以 后来官方开始推荐使用这个。1:先看第一种,这种直接就可以连进去[root@test apache-hive-3.1.2-bin]# bin/hiveHive-on-MR is deprecated in Hive 2 and may not be available in原创 2021-07-28 22:03:11 · 2742 阅读 · 0 评论 -
Flume采集文件内容上传至HDFS
需求:采集目录中已有的文件内容,存储到HDFS 分析:source是要基于目录的,channel建议使用file,可以保证不丢数据,sink使用hdfs下面要做的就是配置Agent了,可以把example.conf拿过来修改一下,新的文件名为file-to-hdfs.conf# Name the components on this agenta1.sources = r1a1.sinks = k1a1.channels = c1先配置一下source# Describe/configure原创 2021-07-20 23:06:17 · 2980 阅读 · 1 评论 -
Flume安装部署
想要使用Flume采集数据,那肯定要先安装Flume在这里我们准备一台Linux机器,关闭防火墙,安装jdk并配置环境变量,因为Flume是java开发,所以需要依赖jdk环境这些工作已经提前做好了,继续往下面分析想要安装Flume,首先需要下载Flume,进入Flume的官网,找到Download链接安装包下载好以后上传到linux机器的/data/soft目录下,并且解压[root@bigdata soft]# lltotal 255844-rw-r--r--. 1 root root原创 2021-07-20 09:11:16 · 301 阅读 · 0 评论 -
Flume的三大核心组件
Flume的三大核心组件:Source:数据源Channel:临时存储数据的管道Sink:目的地接下来具体看一下这三大核心组件都是干什么的SourceSource: 数据源:通过source组件可以指定让Flume读取哪里的数据,然后将数据传递给后面的 channelFlume内置支持读取很多种数据源,基于文件、基于目录、基于TCP\UDP端口、基于HTTP、Kafka的 等等、当然了,如果这里面没有你喜欢的,他也是支持自定义的在这我们挑几个常用的看一下:Exec Source:原创 2021-07-20 09:07:20 · 7384 阅读 · 0 评论 -
YARN中的调度器
大家可以想象一个场景,我们集群的资源是有限的,在实际工作中会有很多人向集群中提交任务,那这时候资源如何分配呢?如果你提交了一个很占资源的任务,这一个任务就把集群中90%的资源都占用了,后面别人再提交任务, 剩下的资源就不够用了,这个时候怎么办?让他们等你的任务执行完了再执行?还是说你把你的资源匀出来一些分给他,你少占用一些,让他也能慢慢的开始具体如何去做这个是由YARN中的调度器负责的YARN中支持三种调度器:1:FIFO Scheduler:先进先出(first in, first out)调原创 2021-07-19 09:21:28 · 305 阅读 · 1 评论 -
MapReduce性能优化--数据倾斜问题
我们来分析一个场景:假设我们有一个文件,有1000W条数据,这里面的值主要都是数字,1,2,3,4,5,6,7,8,9,10,我们希望统计出来每个数字出现的次数其实在私底下我们是知道这份数据的大致情况的,这里面这1000w条数据,值为5的数据有910w条左右,剩下的9个数字一共只有90w条,那也就意味着这份数据中,值为5的数据比较集中,或者说值为5的数据属于倾斜数据,在这一整份数据中,它占得比重比其他的数据多得多。假设这1000W条数据的文件有3个block,会产生3个InputSplt,最终会产生3原创 2021-07-18 11:01:06 · 280 阅读 · 1 评论 -
MapReduce性能优化--小文件问题
针对MapReduce而言,每一个小文件都是一个Block,都会产生一个InputSplit,最终每一个小文件都会 产生一个map任务,这样会导致同时启动太多的Map任务,Map任务的启动是非常消耗性能的,但是启动了以后执行了很短时间就停止了,因为小文件的数据量太小了,这样就会造成任务执行消耗的时间还没有启动任务消耗的时间多,这样也会影响MapReduce执行的效率。针对这个问题,解决办法通常是选择一个容器,将这些小文件组织起来统一存储,HDFS提供了两种类型的容器,分别是SequenceFile和Map原创 2021-07-18 10:03:57 · 377 阅读 · 0 评论 -
MapReduce原理剖析
MapReduce是一种分布式计算模型,是Google提出来的,主要用于搜索领域,解决海量数据的计算问 题.MapReduce是分布式运行的,由两个阶段组成:Map和Reduce, Map阶段是一个独立的程序,在很多个节点同时运行,每个节点处理一部分数据。 Reduce阶段也是一个独立的程序,可以在一个或者多个节点同时运行,每个节点处理一部分数据在这我们先把reduce理解为一个单独的聚合程序即可。在这map就是对数据进行局部汇总,reduce就是对局部数据进行最终汇总。 结合到我们前面分析的统计黑桃的转载 2021-07-16 22:18:04 · 4725 阅读 · 0 评论 -
HDFS的高可用
下面我们首先来看一下HDFS的高可用,也可以称之为HA(High Available)HDFS的HA,指的是在一个集群中存在多个NameNode,分别运行在独立的物理节点上。在任何时间 点,只有一个NameNode是处于Active状态,其它的是处于Standby状态。 Active NameNode(简写为 Active NN)负责所有的客户端的操作,而Standby NameNode(简写为Standby NN)用来同步Active NameNode的状态信息,以提供快速的故障恢复能力。为了保证A原创 2021-07-16 09:26:13 · 2717 阅读 · 2 评论 -
定时上传数据至HDFS
需求分析我们有一个web项目每天都会产生日志文件,日 志文件的格式为access_2020_01_01.log这种格式的,每天产生一个,我们需要每天凌晨将昨天生 成的日志文件上传至HDFS上,按天分目录存储,HDFS上的目录格式为20200101针对这个需求,我们需要开发一个shell脚本,方便定时调度执行第一步:我们需要获取到昨天日志文件的名称第二步:在HDFS上面使用昨天的日期创建目录第三步:将昨天的日志文件上传到刚创建的HDFS目录中第四步:要考虑到脚本重跑,补数据的情况第五步:配置c原创 2021-07-15 09:17:21 · 477 阅读 · 0 评论 -
HDFS的回收站
HDFS会为每一个用户创建一个回收站目录:/user/用户名/.Trash/,每一个被用户在Shell命令行删除的 文件/目录,会进入到对应的回收站目录中,在回收站中的数据都有一个生存周期,也就是当回收站中的 文件/目录在一段时间之内没有被用户恢复的话,HDFS就会自动的把这个文件/目录彻底删除,之后,用 户就永远也找不回这个文件/目录了。默认情况下hdfs的回收站是没有开启的,需要通过一个配置来开启,在core-site.xml中添加如下配置, value的单位是分钟,1440分钟表示是一天的生存周期原创 2021-07-15 09:06:16 · 1018 阅读 · 0 评论 -
Java操作HDFS
我们使用maven作为依赖管理,首先添加依赖<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.2.0</version></dependency>上传文件package com.imooc.hdfs;import org.apac原创 2021-07-13 21:52:22 · 338 阅读 · 0 评论 -
HDFS的常见Shell操作
直接在命令行中输入hdfs dfs,可以查看dfs后面可以跟的所有参数 注意:这里面的[]表示是可选项,<>表示是必填项[root@bigdata01 hadoop-3.2.0]# hdfs dfsUsage: hadoop fs [generic options] [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-che原创 2021-07-13 21:34:13 · 314 阅读 · 1 评论