自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 Python task

实现wordcount:代码如下:运行结果:在for循环之前打上breakpoint用来开始debug可以看到字典刚开始是空的随着读到单词后如果字典中不存在该key,则添加到字典中当读到第二个it时,由于key已经存在于字典中则将其value改为2直接复制到这里了没有截图debug目的:理解代码中变量的运行轨迹,方便调试代码,快速定位代码中和预想逻辑不同的问题点作用:1.简化代码:将问题隔离,通过逐步删除或修改代码部分来缩小问题范围。使用简单的测试案例或程序版本来测试假设。2.

2024-07-23 19:17:50 216

原创 Linux 基础知识01

2024-07-22 20:21:05 58

原创 Flink的富函数(RichFunction)和简单滚动聚合算子

RichFunction一般情况下我们使用一个算子,如果自己写类继承接口的话,只用重写一个算子逻辑方法即可;但是有时我们需要进行一些初始化工作,或者获得上下文信息时,只用普通的算子非常的不方便;所以Flink提供了富函数这样的同算子一样的操作方法的算子;它的使用方法同原算子类似,但是可以多重写两个方法,这里以map举例map 的富函数为RichMapFunction,我们可以多重写两个方法,在使用富函数的时候,我们可以对函数的生命周期实现两个额外的方法:open():是富函数的初始方法。它在每

2021-04-12 21:22:03 1317

原创 Flink的source来源

主要用的由Kafka Source和自定义source首先是kafka source,直接上代码连接kafka需要的参数直接加在properties中即可,还可以加一些 properties.setProperty(“auto.offset.reset”, “latest”);这样的参数中间的SimpleStringSchema为反序列化对象;因为数据在传输进入kafka的是会序列化,所以我们读出来的时候就要反序列化。至于自定义函数public static void main(String[]

2021-04-12 20:18:51 235

原创 关于Flink的流批一体(牛逼一体)

与Spark不同的是,Flink不但能做真正的流式计算,还能完成批计算,达到了很厉害的流批一体。开启流批一体的方法为,在flink流环境中设置为批处理模式当我们执行wordcount案例时,会出现一个有趣的现象,就是开启批处理后,出现频率为1的单词,不会被统计。这是因为,批处理拿到一批数据时,sum算子底层调用的reduce方法如果执行则要求至少两个数据相加才行,那么出现频率为1的单词,由于没法sum计算,则不会被统计。...

2021-04-12 19:43:54 1378 1

原创 Flink的ExecutionGraph(执行图)和提交流程(区分三种模式)

执行图Flink 中的执行图可以分成四层:StreamGraph -> JobGraph -> ExecutionGraph -> Physical Graph。首先StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。这是在客户端刚开始提交任务时生成的,然后客户端还要对StreamGraph优化生成JobGraphJobGraph:是提交给 JobManager 的数据结构。主要的优化为: 将多个符合条件的节点 chai

2021-04-12 19:23:09 820

原创 Flink入门

首先Flink是一种事件驱动型流式处理框架,也就是说Flink是被动的接受数据的,因为有数据来才会触发后面的运行,对比spark,即使是spark streaming,也是一批一批的取数据,开启之后也能看到它在不断的打印时间戳,时间间隔为spark streaming的批次时间Flink可以分为无界流和有界流,区别只在于API读取数据的方法, 这里以java举例,有界流使用readTextFile方法,那么就决定了他总是有个界限的,但是无界流使用socketTextStream,不断的开启一个流,没有停.

2021-04-11 20:48:46 97

原创 azkaban使用细节

1.注意要在mysql中先创建数据库,并且注意给azkaban一个合适的用户2.更改MySQL包大小;防止Azkaban连接MySQL阻塞,默认工作流程序大小为1M[atguigu@hadoop102 software]$ sudo vim /etc/my.cnf重启MySQL[atguigu@hadoop102 software]$ sudo systemctl restart mysqld3.必须在阿兹卡班安装目录(exec)下启动,即使配置环境变量也不行,因为配置文件中写了很多相对路径启

2021-03-19 21:19:39 129

原创 数仓项目关于sqoop导出ads层数据到mysql

导出原因因为我们需要对ads得到的数据做数据可视化,一般是java来做的,如果是大数据自己做,那么直接用hive这边的数据就好了,可是如果是java来做,就需要把ads的数据传到mysql中。关于导出去重ads数据导出到MySQL中最重要的问题就是去重,因为我们是全量同步,那么假设我们刚开始只有14号数据,导入到mysql中,那么第二天我们导入过去的就是14号和15的数据,那么如果追加到mysql中,就会出现有14,14,15号的数据,所以,如何对mysql中的数据进行去重就是最关键的事情。关于去重

2021-03-19 19:43:45 938

原创 hive配置hiveserver2和metastore的作用

hiveserver2的作用很简单,它就是用来来连接jdbc的,jdbc想要和hive连接,就需要启动这个服务hiveserver2我们一般将元数据库配置到mysql中,那么我们肯定有一个节点(假设为a节点)是通过mysql账号密码的方法进入mysql中获取hive的元数据的。但是当我们换一个节点(假设为b节点),也想要连接hive元数据的时候,出去安全性考虑,我们不能把mysql的账号密码也给这个b节点;那么我们就需要在这个b节点上配置metastore的参数让b这个节点能找到可以通过mysql账号

2021-03-18 16:03:15 698

原创 数仓体系——最近七天内连续三天活跃用户数

方法1-通过连续日期排名首先我们筛选出最近七天的每日数据,属于每日设备行为,也就是说一条数据等于一次活跃这一步对每日设备行为去重(正常情况下不写也可以,因为每日设备 行为理论上来说是已经去过重的)然后再通过rank函数对每个日期后面都加一个数逻辑是我们按照日期排序,那么如果是连续日期那么减去后面的数应该得到的值相等即6.15 16.16 26.17 3这样每个日期减去自己的rank排名得到的都是6.14,再通过对这个减去得到的日期group by,如果count(*)为3,则三天连续

2021-03-17 21:22:41 3358

原创 项目一ODS层数据仓库建模

当我们的数据采集到hdfs层上之后,我们就开开始对数据进行建模以便后来分析,那么我们整体的架构先放在每个建模层级的最前面所以项目1的将行为数据和业务数据导入到hdfs中我们已经完成了,现在需要的是将hdfs的数据通过ODS层数据建模,初步的分析以及改变,那么我们首先介绍下ODS层的作用因为我们的数据刚落到hdfs上,他还只是单纯的数据,并没有能让我们直接操作。所以我们需要将这些数据放入到能够对数据进行操作的框架中,如我们这个项目采取了使用hive的方法。所以我们此次在ODS层需要做到的就是将hdfs

2021-03-11 22:06:38 1000

原创 Shell中单引号和双引号区别

在/home/atguigu/bin创建一个test.sh文件[atguigu@hadoop102 bin]$ vim test.sh在文件中添加如下内容#!/bin/bashdo_date=$1echo ‘dodate′echo"do_date'echo "dod​ate′echo"do_date"echo “'dodate′"echo′"do_date'"echo '"dod​ate′"echo′"do_date”’echo date2)查看执行结果[atguigu@hadoop1

2021-03-11 15:37:45 135

原创 hive中文乱码解决方法

关于hive中的中文注释乱码问题解决当我们创建hive表的时候,使用中文注释的话,通过desc查看表的信息时,会发现表的注释全是问号这是因为我们hive配置表的元数据放到mysql中存储,mysql中默认表被创建的时候用的是默认的字符集(latin1),所以会出现中文乱码解决方案:(1)在Hive元数据存储的Mysql数据库(MetaStore)中,执行以下SQL:#修改字段注释字符集alter table COLUMNS_V2 modify column COMMENT varchar(25

2021-03-11 11:02:26 4201 1

原创 项目一,数据采集的细节解析

1.当我们跑完数据采集,发现不可以跑通时,怎么确定问题出在哪里细节(1)首先我们要查看kafka,如果kafka中就没有数据,说明第一层有问题首先我们去,linux中看一看我们生成的数据文件一共有多少条今天数据测试是3.09日期格式的。通过wc -l 查看行数可以看见有1498条信息,再通过kafka的图形化工具来检查kafka中的数据信息数据从10952开始到12449结束,整好是1498条消息,说明我们的数据传入了kafka,并且etl拦截器并没有遇到不是json格式的数据细节(

2021-03-09 18:47:19 322

原创 spark 流程详解(任务切分,调度,通讯架构)

spark整个流程第6步详解解析:6.1的LauncherPool为线程池,它会启动一个线程类NMclient用来和NodeManager通信用,然后会启动NodeManager中的一个进程ExecutorBackend,然后启动两个通信模块(也就是RPC终端,用来通信)通信注册完后,第9步建立Executor计算对象(线程),也就是跑RDD的承担者注:7,8,9,10步在通讯架构中详解任务切分第十步:任务切分解析:如下图所以当Exeuctor启动完成后,就开始跑代码,直到遇到第一个行动算

2021-03-08 19:50:27 979 2

原创 HBase原理和基本架构和HBase优化(包括RowKey设计)

数据模型1)Name Space命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。HBase两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的命名空间。2)Table类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往HBase写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景。3)RowH

2021-03-05 20:18:26 299 1

原创 Spark之RDD理解(分区策略)

RDD理解首先在理解RDD之前,我们要知道Spark的运行流程,大致分为Standalone模式和跑在其它调度器上,如yarn和Mesos,而最常见的就是跑在yarn上,跑在yarn上还分为Client和Cluster两种模式。区别在于:Client模式的Driver跑在了当前本地机器上而不是集群上,当本地机器与集群机器所在地距离远时会受到网速影响较大,输出结果和运行日志直接输出到控制台上,开发中适合做调试用Cluster模式Driver跑在集群上,当本地机器与集群机器所在地距离远时会受到网速影响较

2021-02-20 23:49:50 656

原创 scala函数式编程二 (高阶函数编程)

我们知道当创建一个函数的时候,如果写了小括号,并且没有参数的时候,小括号写不写都可以,但是如果没写小括号,则调用的时候不能写小括号函数作为值我们知道当创建一个函数的时候,如果写了小括号,并且没有参数的时候,小括号写不写都可以,但是如果没写小括号,则调用的时候不能写小括号所以这里其实是将f3函数的结果赋值给了f,而不是将函数f3赋值给了f所以我们的写法应该为然后我们就可以直接调用变量f的函数形式但是如果我们在定义参数f的时候,就把f的格式写为函数格式并且和f3()一样,那么我们在赋值的时候就

2021-02-09 23:06:02 134

原创 scala函数式编程一(基础)

初试面向对象编程分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题函数式编程将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的功能按照指定的步骤,解决问题。函数和方法的区别方法 : 方法是特殊的函数. 定义到类中的函数就叫方法,方法支持重载函数 : 定义到其他地方(函数中,方法中)的叫函数。函数不支持方法的重载,函数可以嵌套使用函数定义1)无参,无返回值object ScalaFunction {def main(args: Array[St

2021-02-09 10:49:42 198

原创 scala快速上手

变量// var | val 变量名 : 变量类型 = 变量值//var username : String = “zhangsan”//val password : String = “123456”// 2. 类型推断,如果Scala能够自动推断出变量的类型,类型可以省略var username = "zhangsan" // Stringvar age = 20 //Intvar salary = 10000.1 //Double//3 .变量的初始化/* Jav

2021-02-03 16:07:51 199

原创 scala安装和初步认识(class和object区别)

scala安装和初尝试安装好scala后,配置环境变量,然后开启一个新的scala,并且添加Scala框架支持然后将scala的目录设置为源目录,这样才会自动编译代码解析

2021-02-02 15:06:13 144

原创 系统业务数据仓库

完成了数据从服务器到hdfs后,下一步是将本来存在mysql中的数据通过sqoop导入到hdfs中,步骤如图首先我们要卸载linux中自带安装的mysql,也叫mariadb(linux怕mysql收费)rpm -qa | grep -i -E mysql|mariadb | xargs -n1 sudo rpm -e --nodeps装好mysql之后用远程连接但是会发生这种情况是因为mysql的host问题,所以去mysql中修改然后刷新,flush privileges;.

2021-01-28 15:31:21 222

原创 项目1用户行为采集数仓架构之第二层flume

完成了数据写到kafka的步骤,剩下的就是还用flume 的方法将kafka的数据传到hdfs上,首先还是看flume 的配置文件#Nameda1.sources = r1 a1.channels = c1a1.sinks = k1#Source a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSourcea1.sources.r1.kafka.bootstrap.servers = hadoop102:9092,hadoop1

2021-01-24 21:54:03 334

原创 项目1用户行为采集数仓架构之第一层flume

这里解释下为什么不用taildir source 然后kafka channel 最后hdfs sink一步写入到hdfs中因为如果这样只用一个flume,这个flume要运行在生成日志文件的服务器上,然后source再传给kafka集群上,这两个集群不一定在统一服务器上,最后sink再往hdfs传的时候,有需要把数据读回生成日志文件的服务器上,再往hdfs所在集群写,IO太高,十分麻烦,不采用开始配置第一层flume的配置文件数据通道-第一层flume- logserver->kafka:.

2021-01-24 19:40:07 503

原创 Kafka常用命令及高效读写解析

Kafka常用命令1)查看Kafka Topic列表[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka --list2)创建Kafka Topic进入到/opt/module/kafka/目录下创建日志主题[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181,hadoop103:2181,hadoo

2021-01-22 19:49:59 278

原创 kafka配置文件参数解读(包含offset重置解读以计zookeeper中的kafka信息)

解压完kafka的tar包后,为了配置kafka的集群,我们需要更改kafka的配置文件,这里对配置文件的一些参数做一些解释打开kafka文件,ll我们先在这个目录中创建一个目录用来保存kafka的数据@hadoop102 kafka]$ mkdir datas 这个文件夹存储消息日志,也就是存传来的数据然后进入config目录,找到vi server.properties,进行配置文件首先是这个参数我们准备配三个集群的kafka,所以broker.id分别为0,1,2;这里是第一个bro

2021-01-22 19:21:05 325

原创 zookeeper内部原理

节点类型解读:我们每次创建节点可以分为两种,暂时型和永久型而每种节点创建时都会在节点后面增加序号排序,由leader节点维护。只不过这个序号我们可以通过创建时是否增加-s来决定是不是暴露出来,展示如下可见我们创建的没有编号的test3其实也排了序号,只不过没有展示出来罢了然后是临时节点,创建临时节点出来后,所有客户端都可以找到他,但是当创建临时节点的哪个客户端quit后,这个临时节点被删掉并且该临时节点也享受排序编号的效果,同普通节点一样结构体详解在客户端命令中,我们可以通过 stat

2021-01-21 17:14:45 72

原创 zookeeper介绍(结构特点及客户端命令)

首先看一下zookeeper的特点图解释(1)对于第一点,领导者是选举出来的,不像hadoop的NameNode是我们在配置文件中决定的(2)半数节点就可以存货,则选择奇数的节点更合适,比如四台节点的运行需要三台,五台节点的运行也只需要三台。(3)第三点和第五点的原因是zookeeper的数据传输采用事务的方法...

2021-01-21 15:39:07 90

原创 hadoop闲杂知识补充

1.关于使用hadoop命令本地和hdfs地址选择问题在使用hadoop的操作时,最后面跟的地址可以是本地,也可以是hdfs,取决于你写的地址路径如果我们都写绝对路径如下以wordcount为例这里我们的文件获取为本地模式,wordcount得到的结果文件放到了hdfs上这里我们的hadiio://hadoop102:8020其实可以不写,因为我们在配置文件中加了如下配置也就是我们的地址默认你如果写/wcinput,其实就是写成了 hadoop://hadoop102:8020/wcinput

2021-01-21 11:24:07 107

原创 Liunx闲杂知识补充(不断更新)

1. 关于环境变量的配置由于linux由shell掌管,而shell又分为登录式和非登陆式shell。而环境变量的配置又会影响到shell命令。我们的环境变量应该配置在/etc/profile.d目录下自己创建一个文件中,执行完之后在. /etc/profile一下即可原因是如果光配置在/etc/profile中,只有登录式shell可以使用环境变量,非登录式shell找的是.bashrc中的环境变量,此时就找不到/etc/profile。所以配置在/etc/profile.d目录的环境变量,会被/

2021-01-21 10:59:25 105

原创 kafka的生产者发送数据到topic partition的可靠性保证

为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。这个方案类似于flume的taildir source的断点续传能力,来解决数据丢失的问题对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,所以没必要等ISR中的follower全部接收成功。所

2021-01-18 15:25:23 543

原创 关于使用窗口函数的机会

因为窗口函数中的partition by,sort by和group by,order by 很相似,所以会误会该怎么使用,这里将举一例说明表数据类型介绍,视频名 视频所属类别(为string 数组,需要用lateral view explode行专列)视频观看数要求为:–统计每个类别视频观看数Top10第一瞬间的想法是1.炸开类别2.对类别分组此时因为group by的特性,无法筛选出分组后每组内的内容,所以想到了多加一个分组属性,于是selectcategory_name,views

2021-01-14 16:56:07 136

原创 flume流程与内部原理

flume流程flume的整体流程如下可为什么flume具有高可靠性的,原因是它在source传输给Channel和Channel传输给Sink两部中都采用了事务的方法,如果出现问题可以rollback重新读取数据以下为详细图解:读懂这张图首先要介绍一下flume流程中的传输单位:Eventn,也就是事件flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且结构为头信息(header)和消息体(body),这些Event由Agent外

2021-01-14 14:29:00 615

原创 再战flume关于实时监控多个目录下多个追加文件

我们上次练习的source用的是简单的netcat,除了它之外比较常见的还用:Exec source:适用于监控一个实时追加的文件,不能实现断点续传;Spooldir Source:适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步;以上两种source都有各种缺陷,所以这次我们将使用更强的大Taildir Source来实验Taildir Source适合用于监听多个实时追加的文件,并且能够实现断点续传。原理解释首先介绍下Taildir Source断点续传的原理:我们用flum

2021-01-13 21:32:37 605

原创 flume的入门和个人理解

Flume初步理解我们知道光是hadoop来说,是处理死数据的,也就是下载好的文件上传到hdfs中,但是它对大量小文件的上传并不友好,尤其是做不了流式数据上传,这就导致我们在要处理当天不断进入的数据时,十分不便。此时学习Flume,将流式数据文件不断导入hdfs中,猜测主要作用是与hive合用,将导入的数据直接导入hive中数据库的表所在目录。Flume基础架构可见,flume更像是一个服务端,java端拿到数据后作为客户端将数据通过flume不断的,流式的储存到了hdfs中可以将flume的架构

2021-01-13 20:09:33 241

原创 Hive中除了窗口函数外的常用函数:casewhen,行转列,列转行

一、关于使用函数的一些小方法显示系统自带所有函数show functions;描述指定函数的作用desc function 函数名;描述函数的详情信息(一般是都是有例子的)desc function extended 函数名;二、函数NVL,相当于mysql中的lfnull格式:NVL(列表名,用来替换null的值)三、case when格式:case 列表名 when 表中的一个值 then 替代他的值 else 另外一个值 end总体类似于三元运算符如一列性别的数据均为男

2021-01-11 20:51:13 1199

原创 建表语句和排序和窗口函数的容易混淆的语法以及执行顺序

一. 建表的时候1.partitioned by 表示你创建的表为分区表2.clustered by 表示你创建表为分桶表二. 查询语句里排序的四个byorder by 表示全局排序distribute by 以什么分区 sort by 区内排序字段cluster by 表示分区排序三.窗口函数的partitionpartition by 表示 更细窗口划分order by 窗口以什么排序distribute by sort by 相当于 partition by order by

2021-01-11 19:21:19 231

原创 窗口函数

关于使用窗口函数当你使用group by分区时,窗口函数的范围为group by分区的范围,即:select name, count(*)over(rows between UNBOUNDED PRECEDING and current row) from business where date_format(orderdate,'yyyy-MM')='2017-04' group by name它会对name的分区起作用count,而不是name分区内的数据count如果想要对name

2021-01-11 19:12:30 13235

原创 DDL数据库定义和DML数据操作语言

数据库DDL1.创建库的语法CREATE DATABASE [IF NOT EXISTS] database_name [IF NOT EXISTS] --增强代码的健壮性 [COMMENT database_comment] --这个库是干嘛的[LOCATION hdfs_path] --你当前的库存储的hdfs路径[WITH DB

2021-01-08 20:16:59 959

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除