【大数据实战】flume 数据采集

flume

在这里插入图片描述

快速开始

概述

Apache Flume 是一个分布式、可靠且可用的系统,用于有效地收集、聚合来自许多不同来源的大量日志数据并将其移动到集中式数据存储。

Apache Flume 的使用不仅限于日志数据聚合。由于数据源是可定制的,Flume 可用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和几乎任何可能的数据源。

通常将Web服务器收集日志文件,然后传递到HDFS进一步处理。

系统要求
  1. Java 运行时环境 - Java 1.8 或更高版本
数据流模型

在这里插入图片描述

Flume 的核心是把数据从数据源(source)收集过来,再将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume 在删除自己缓存的数据。

flume传输的数据的基本单位是 event

flume代理是agent,agent是一个java进程,运行在日志收集节点。

每一个 agent 相当于一个数据传递员,内部有三个组件:

  • Source:采集源,用于跟数据源对接,以获取数据;
  • Sink:目的地,采集数据的传送目的,用于往下一级 agent 传递数据或者往最终存储系统传递数据;
  • Channel:通道,agent 内部的数据传输通道,用于从 source 将数据传递到 sink;

Flume由一组分布式互相连接的代理构成,系统边缘(与web服务器共存一台)的代理负责收集日志,并把数据转发给负责汇总的代理。使用Flume主要工作就是把各个代理连接在一起。

安装
$ wget https://archive.apache.org/dist/flume/stable/apache-flume-1.9.0-bin.tar.gz
$ tar -zxvf apache-flume-1.9.0-bin.tar.gz
# 验证
$ bin/flume-ng version
Flume 1.9.0
一个简单的例子

接收telnet 终端消息到控制台。

我们给出一个示例配置文件,描述单节点 Flume 部署。此配置允许用户生成事件并随后将它们记录到控制台。

# example.conf:单节点 Flume 配置

# 命名此代理上的组件
a1.sources  =  r1 
a1.sinks  =  k1 
a1.channels  =  c1

# 描述配置源
a1.sources.r1.type  =  netcat 
a1.sources.r1.bind  =  localhost 
a1.sources.r1.port  =  44444

# 描述接收器
a1.sinks.k1.type  =  logger

# 使用在内存中缓冲事件的通道
a1.channels.c1.type  =  memory 
a1.channels.c1.capacity  =  1000 
a1.channels.c1.transactionCapacity  =  100

# 将source和sink绑定到channel 
a1.sources.r1.channels  =  c1 
a1.sinks.k1.channel  =  c1

此配置定义了一个名为 a1 的代理。a1 有一个在端口 44444 上侦听数据的源,一个在内存中缓冲事件数据的通道,以及一个将事件数据记录到控制台的接收器。配置文件命名各种组件,然后描述它们的类型和配置参数。一个给定的配置文件可能定义了几个命名代理;当启动给定的 Flume 进程时,会传递一个标志,告诉它要显示哪个命名代理。

有了这个配置文件,我们可以按如下方式启动 Flume:

$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

#后台启动
$ nohup  bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console &

请注意,在完整部署中,我们通常会多包含一个选项:--conf=<conf-dir>。< conf-dir>目录将包含一个 shell 脚本flume-env.sh和一个可能的 log4j 属性文件。在这个例子中,我们传递了一个 Java 选项来强制 Flume 登录到控制台,并且我们没有自定义环境脚本。

从一个单独的终端,我们可以 telnet 端口 44444 并向 Flume 发送一个事件:

#安装telnet
$ yum install -y telnet
$ telnet localhost 44444

然后输入一些字符串回车,最后原始 Flume 终端将在日志消息中输出事件。

采集源

目录源

此源允许您通过将要摄取的文件放入磁盘上的目录来摄取数据。此源将监视指定目录中的新文件,并在新文件出现时从新文件中解析事件。事件解析逻辑是可插拔的。给定文件完全读入通道后,默认情况下通过重命名文件来指示完成,或者可以将其删除,或者使用 trackerDir 跟踪处理过的文件。

Flume 尝试检测这些问题条件:

  1. 如果一个文件在放入 spooling 目录后被写入,Flume 将在其日志文件中打印一个错误并停止处理。
  2. 所监视的目录中重复出现相同文件名的文件,Flume 将在其日志文件中打印错误并停止处理。

为避免上述问题,在将文件名移动到监视目录时,将唯一标识符(例如时间戳)添加到日志文件名可能很有用。

a1.channels = c1
a1.sources = source1

a1.sources.source1.type = spooldir
a1.sources.source1.channels = c1
a1.sources.source1.spoolDir = /opt/logs
a1.sources.source1.fileHeader = true
#忽略所有以.tmp结尾的文件,不上传
a1.sources.source1.ignorePattern = ([^ ]*\.tmp)
执行源

Exec source 在启动时运行给定的 Unix 命令,并期望该进程在标准输出上连续生成数据。如果进程因任何原因退出,源也会退出并且不会产生更多数据。这意味着诸如cat [named pipe]tail -F [file]之类的配置将产生所需的结果。

a1.sources  =  r1 
a1.channels  =  c1 
a1.sources.r1.type  =  exec 
a1.sources.r1.command  =  tail -F /var/log/secure 
a1.sources.r1.channels  =  c1
Kafka源

Kafka Source 是一个 Apache Kafka 消费者,它从 Kafka 主题中读取消息。如果您有多个 Kafka 源在运行,您可以使用相同的 Consumer Group 配置它们,以便每个都读取一组唯一的主题分区。这目前支持 Kafka 服务器版本 0.10.1.0 或更高版本。测试一直到 2.0.1,这是发布时可用的最高版本。

以逗号分隔的主题列表订阅主题的示例。

tier1.sources.source1.type  =  org.apache.flume.source.kafka.KafkaSource 
tier1.sources.source1.channels  =  channel1 
tier1.sources.source1.batchSize  =  5000 
tier1.sources.source1.batchDurationMillis  =  2000 
tier1.sources.source1.kafka.bootstrap.servers  =  localhost:9092 
tier1.sources.source1.kafka.topics  =  test1, test2 
tier1.sources.source1.kafka.consumer.group.id  =  custom.g.id

通过正则表达式订阅主题的示例

tier1.sources.source1.type  =  org.apache.flume.source.kafka.KafkaSource 
tier1.sources.source1.channels  =  channel1 
tier1.sources.source1.kafka.bootstrap.servers  =  localhost:9092 
tier1.sources.source1.kafka .topics.regex  =  ^topic[0-9]$ 
# 默认使用 kafka.consumer.group.id=flume
NetCat TCP 源

一个类似 netcat 的源,它侦听给定端口并将每一行文本转换为一个事件。类似于nc -k -l [host] [port]。换句话说,它打开一个指定的端口并监听数据。期望提供的数据是换行符分隔的文本。每一行文本都会变成一个 Flume 事件并通过连接的通道发送。

a1.sources  =  r1 
a1.channels  =  c1 
a1.sources.r1.type  =  netcat 
a1.sources.r1.bind  =  0.0.0.0 
a1.sources.r1.port  =  6666 
a1.sources.r1.channels  =  c1
avro source

avro可以监听和收集指定端口的日志,使用avro的source需要说明被监听的主机ip和端口号

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141

接收器

logger sink

就是将收集到的日志写到flume的log中,是个十分简单但非常实用的sink
简单实用,但是在实际项目中没有太大用处。

agent1.sinks.sink1.type = logger
avro sink

avro可以将接受到的日志发送到指定端口,供级联agent的下一跳收集和接受日志,使用时需要指定目的ip和端口

a1.channels = c1
a1.sinks = k1

a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = 0.1.1.1
a1.sinks.k1.port = 4545
HDFS 接收器

此接收器将事件写入 Hadoop 分布式文件系统 (HDFS)。它目前支持创建文本和序列文件。它支持两种文件类型的压缩。可以根据经过的时间或数据大小或事件数定期滚动文件(关闭当前文件并创建新文件)。它还按时间戳或事件起源的机器等属性对数据进行存储/分区。HDFS 目录路径可能包含格式转义序列,这些转义序列将被 HDFS 接收器替换以生成目录/文件名来存储事件。使用此接收器需要安装 hadoop,以便 Flume 可以使用 Hadoop jar 与 HDFS 集群进行通信。

注意:使用前需提供hadoop的库,参考问题1

需修改 flume-env.sh 配置,增添 hdfs 依赖库:

FLUME_CLASSPATH=“/opt/hadoop/:/opt/hadoop/hadoop-hdfs/:/opt/hadoop/lib/*”

a1.channels = c1
a1.sinks = k1

a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1    
a1.sinks.k1.hdfs.path = hdfs://cluster-master:9000/flume/logs/%y-%m-%d/%H%M/%S
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
a1.sinks.k1.hdfs.round = true
#多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
#是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true

hdfs创建新文件的周期可以是时间,也可以是文件的大小,还可以是采集日志的条数。

filePrefix = log_%Y%m%d_%H hdfs 文件名前缀

fileSuffix = .lzo 文件名后缀

inUsePrefix 临时文件名前缀  
inUseSuffix  临时文件的文件名后缀 默认值:.tmp 

rollSize = 0 默认值:1024
当临时文件达到该大小(单位:bytes)时,滚动成目标文件;
如果设置成0,则表示不根据临时文件大小来滚动文件

rollInterval = 600 默认值:10
当events数据达到该数量时候,将临时文件滚动成目标文件;
如果设置成0,则表示不根据events数据来滚动文件;

batchSize = 100 默认值:100
每个批次刷新到HDFS上的events数量;

导入jar包

为了让我们的flume和hadoop交互,所以我们进入/hadoop/share/hadoop/common/hadoop/share/hadoop/hdfs两个文件夹找到下图的六个jar包导入到flume/lib/中即可。

问题:

1、Flume 报出异常org/apache/hadoop/io/SequenceFile$CompressionType

原理:缺少hadoop类库,其他报类库问题同理。

commons-configuration-*.jar
hadoop-auth-*.jar
hadoop-common-*.jar
hadoop-hdfs-*.jar
commons-io-*.jar
woodstox-core
stax2-api
guava-2.8.9.jar 删除flume老的
hadoop-shaded-guava-1.1.1.jar
hadoop-hdfs-client-3.3.2.jar
hadoop-shaded-protobuf_3_7-1.1.1.jar

$ cp ${HADOOP_HOME}/share/hadoop/common/hadoop-common-3.3.2.jar  /opt/apache-flume-1.9.0-bin/lib

2、Expected timestamp in the Flume event headers, but it was null

a1.sinks.k1.hdfs.useLocalTimeStamp = true

3、org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme “hdfs”

hadoop-hdfs-client-3.3.2.jar

4、java.lang.NoClassDefFoundError: org/apache/hadoop/thirdparty/protobuf/Message

hadoop-shaded-protobuf_3_7-1.1.1.jar

弹性搜索接收器

此接收器将数据写入弹性搜索集群。默认情况下,将写入事件以便Kibana图形界面可以显示它们 - 就像logstash编写它们一样。

您的环境所需的 elasticsearch 和 lucene-core jar 必须放在 Apache Flume 安装的 lib 目录中。Elasticsearch 要求客户端 JAR 的主要版本与服务器的主要版本匹配,并且两者都运行相同的 JVM 次要版本。如果这不正确,将会出现 SerializationExceptions。要选择所需的版本,首先确定elasticsearch的版本和目标集群正在运行的JVM版本。然后选择与主版本匹配的 elasticsearch 客户端库。0.19.x 客户端可以与 0.19.x 集群通信;0.20.x 可以与 0.20.x 对话,0.90.x 可以与 0.90.x 对话。一旦确定了 elasticsearch 版本,然后读取 pom.xml 文件以确定要使用的正确 lucene-core JAR 版本。

每天都会将事件写入新索引。该名称将为 -yyyy-MM-dd 其中 是 indexName 参数。接收器将在 UTC 午夜开始写入新索引。

a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = elasticsearch
a1.sinks.k1.hostNames = 127.0.0.1:9200,127.0.0.2:9300
a1.sinks.k1.indexName = foo_index
a1.sinks.k1.indexType = bar_type
a1.sinks.k1.clusterName = foobar_cluster
a1.sinks.k1.batchSize = 500
a1.sinks.k1.ttl = 5d
a1.sinks.k1.serializer = org.apache.flume.sink.elasticsearch.ElasticSearchDynamicSerializer
a1.sinks.k1.channel = c1

多层代理

在这里插入图片描述

当我们用Flume采集日志时,由于数据源的多样性,则往往需要配置多个Flume进行采集,如果只是使用单层Flume的话,那么往往会产生很多个文件夹,单个文件夹也只是来自同一个节点的数据组成的。因此,为了减少文件的数据,增加文件的大小(减少HDFS的压力,同时提高MapReduce的处理效率)。往往会将同一组多个节点的数据汇聚到同一个文件中,这样同时也较少了数据从生产到分析的时间。
第一层agent负责采集原始数据,第二层agent负责对第一层数据进行汇聚,并把数据写入HDFS中。如果source节点数据量庞大的时候,最好采用多层代理。

从tail命令获取数据发送到avro端口(mini1机器)
另一个节点可配置一个avro源来中继数据,发送外部存储

tail-avro.conf:

##################
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/log/test.log
a1.sources.r1.channels = c1

# Describe the sink
a1.sinks = k1
a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = mini02
a1.sinks.k1.port = 4141
a1.sinks.k1.batch-size = 2



# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

从avro端口接收数据,下沉到logger(mini02机器)

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

命令的执行

mini02上执行

bin/flume-ng agent --conf conf --conf-file conf/netcat-logger.conf --name a1 -Dflume.root.logger=INFO,console

mini01上执行

bin/flume-ng agent -c conf -f conf/tail-avro.conf -n a1

同时模拟mini01数据的写入:

i=1;
while(( $i<=500000 ));
do echo $i >> /home/hadoop/log/test.log;
sleep 0.5;
let ‘i++’;
done

实战

采集目录文件到HDFS

在这里插入图片描述

采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去

  • 数据源组件,即source ——监控文件目录 : spooldir

  • 下沉组件,即sink——HDFS文件系统

  • 通道组件,即channel——可用file channel 也可以用内存channel

配置文件

a1.channels = c1
a1.sources = source1
a1.sinks = k1

# 描述配置源
a1.sources.source1.type = spooldir
a1.sources.source1.channels = c1
a1.sources.source1.spoolDir = /opt/logs
a1.sources.source1.fileHeader = true
a1.sources.source1.ignorePattern = ([^ ]*\.tmp)

# 描述接收器
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = hdfs://cluster-master:9000/flume/logs/%y-%m-%d
a1.sinks.k1.hdfs.filePrefix=logs-%H-%M
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.useLocalTimeStamp = true
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = TEXT


# 使用在内存中缓冲事件的通道
a1.channels.c1.type  =  memory 
a1.channels.c1.capacity  =  1000 
a1.channels.c1.transactionCapacity  =  100

# 将source和sink绑定到channel 
a1.sources.source1.channels  =  c1 
a1.sinks.k1.channel  =  c1

启动

$ bin/flume-ng agent --conf conf --conf-file conf/example1.conf --name a1 -Dflume.root.logger=INFO,console
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
01_数仓项目介绍.avi4 b4 Q* Q8 Z0 Y) C6 O! w 02_数仓采集_用户行为采集课程介绍.avi8 \7 f3 O. c- {: v# W& V$ Y& b 03_数仓采集_数仓的概念.avi8 Z# X* q/ c; }3 A* [ T 04_数仓采集_项目需求.avi6 B8 n s0 h! M4 X# j! |0 ` 05_数仓采集_项目技术选型.avi8 [% N% W, U# y5 s 06_数仓采集_系统数据流程设计.avi8 N: L Y6 D6 y 07_数仓采集_框架版本选型.avi, k8 c& `! j& B 08_数仓采集_框架版本具体型号.avi1 x& Q/ D. O' l 09_数仓采集_服务器选型.avi3 _: b. H. i! a; O8 V3 A7 [1 s0 t; B 100_业务数仓_DWS层之用户行为宽表.avi* o! `2 N, _5 u& a$ W 101_业务数仓_需求九:GMV成交总额.avi; x4 H& X( _' I8 L7 r* n3 I/ y 102_业务数仓_需求十:ADS层之新增用户占日活跃用户比率.avi 103_业务数仓_需求十一:ADS层之用户行为漏斗分析.avi 104_业务数仓_用户购买商品明细表(宽表).avi 105_业务数仓_需求十二:ADS层品牌复购率.avi 106_业务数仓_需求十三:求每个等级的用户对应的复购率前十的商品排行(学生分享).avi6 e) h" C# G2 X+ z6 B 107_业务数仓_数据可视化.avi! @5 r5 g- n0 f, J3 l 108_业务数仓_Azkaban安装.avi( r9 z2 L3 \% G' k9 [: t9 K 109_业务数仓_GMV指标获取的全调度流程.avi& O, S. M2 Q# o 10_数仓采集_集群资源规划设计.avi 110_业务数仓_拉链表理论.avi 111_业务数仓_拉链表制作.avi+ k: N4 e; P4 X; ?( i' O0 {0 u. M9 Y 112_业务数仓_业务数仓项目总结.avi/ {1 S. ^* Y" b# M) | 113_业务数仓_即席数仓课程介绍.avi 114_即席数仓_Presto简介.avi+ r. E# z! Z4 t% o+ r8 }7 Q 115_即席数仓_Presto安装及使用.avi 116_即席数仓_Presto优化.avi% @4 x# m3 } G# h 117_即席数仓_Druid概念、特点、场景.avi 118_即席数仓_Druid对比其他框架.avi7 C4 m1 z" }# n% h( F 119_即席数仓_Druid框架原理.avi 11_数仓采集_测试集群服务器规划.avi* X" H5 S4 M1 C0 j" w 120_即席数仓_Druid数据结构.avi, V& D, ]# l" a0 R1 ?) n; L f 121_即席数仓_Druid安装.avi 122_面试题_总体架构.avi! c' O1 I8 T6 n Q 123_面试题_技术框架.avi 124_面试题_用户行为、业务数据、即席查询.avi4 N2 j# j6 P% O" a 125_面试题_开发经验.avi3 b$ C' k; H" B2 p# c( \ 126_CDH数仓_课程介绍.avi9 _. V/ m% J5 ^* s/ g+ f; g( s 127_CDH数仓_CM简介及架构.avi8 ]' ]* B! X' j. Z9 [ 128_CDH数仓_CM安装环境准备.avi, Q8 k8 x/ j3 v 129_CDH数仓_CM、Hadoop、Zookeeper安装.avi7 z) @! o) G0 @4 s; J 12_数仓采集_埋点数据基本格式.avi 130_CDH数仓_采集Flume的安装.avi# V L4 F& x1 t* }( Z8 F' o9 g' ` 131_CDH数仓_Kafka安装.avi" N8 o- i b/ W) o3 j8 j/ a/ g 132_CDH数仓_测试Flume和Kafka安装.avi 133_CDH数仓_消费Flume配置完成.avi6 ?$ m3 H4 m; C# ^$ j 134_CDH数仓_Hive、Oozie、Hue安装.avi# ]& Y, M2 |) A( o# Y( b& w 135_CDH数仓_用户行为数仓ODS层导数据.avi 136_CDH数仓_用户行为数仓完结.avi. F4 z* v& a; q" }% V* \ 137_CDH数仓_业务数据生成.avi7 W7 \$ ~$ n% w2 N, {( A; l! }8 K: S 138_CDH数仓_业务数仓完结.avi! N7 f. d0 U2 N( }' w) P- b" S 139_CDH数仓_Oozie执行前准备.avi 13_数仓采集_事件日志数据(上).avi2 S' ` H& ^& S3 a1 X 140_CDH数仓_Oozie任务编写及运行.avi 141_CDH数仓_即席查询数仓搭建Impala.avi 142_CDH数仓_Spark安装及总结.avi 14_数仓采集_事件日志数据(下).avi 15_数仓采集_日志生成代码编写.avi4 |* G) Z3 J4 ]/ b9 z$ @ 16_数仓采集_Logback日志打印控制.avi 17_数仓采集_服务器准备.avi 18_数仓采集_Hadoop安装.avi 19_数仓采集_项目经验之HDFS多目录配置.avi 20_数仓采集_项目经验之支持LZO压缩配置.avi j3 Q& D8 m* G9 R Q$ G 21_数仓采集_项目经验之基准测试.avi 22_数仓采集_项目经验之HDFS参数调优.avi; F" t) F) H7 W' {& L% n3 H ~7 s 23_数仓采集_Zookeeper安装.avi6 c1 v9 x4 \% K5 D. \0 M 24_数仓采集_项目经验之ZK集群启动停止脚本.avi( i1 P# ^( y1 Q- a 25_数仓采集_生成测试日志.avi 26_数仓采集_集群日志生成启动脚本.avi 27_数仓采集_集群时间同步修改脚本.avi, n2 a/ j1 @) t* d w 28_数仓采集_集群所有进程查看脚本.avi 29_数仓采集_每日回顾.avi; R" Y P2 X, E/ [+ B' j# ~& K. e 30_数仓采集_日志采集Flume安装.avi* V0 |0 U7 o- @* R; w) M 31_数仓采集_Flume组件及配置.avi 32_数仓采集_日志采集Flume配置分析.avi U6 j% Q4 F$ T6 U5 ^ 33_数仓采集_ETL拦截器.avi 34_数仓采集_分类型拦截器.avi! b5 ^. a8 ^; }$ x8 z) l2 U3 }" p 35_数仓采集_日志采集Flume启动停止脚本.avi2 ~/ r- J: h$ U, q/ e# e7 k% M 36_数仓采集_Kafka集群安装.avi3 L6 `7 F& o/ U6 F" U5 U 37_数仓采集_Kafka集群启动停止脚本.avi 38_数仓采集_Kafka Manager安装及脚本.avi& h9 z' v' g0 ^. }0 j 39_数仓采集_项目经验之Kafka压力测试.avi7 ~8 m+ w$ q/ G$ ?- _- K 40_数仓采集_项目经验之Kafka机器数量计算.avi 41_数仓采集_消费Kafka数据Flume.avi 42_数仓采集_项目经验之Flume内存优化.avi; q3 Q6 E! I, d7 n& k# {# B6 K 43_数仓采集_项目经验之Flume组件.avi- S+ J+ s/ {5 S0 d 44_数仓采集_采集通道启动停止脚本.avi! Q; X6 }4 C" g. f 45_数仓采集_调试经验.avi! P; q2 w N1 c i5 Z' c; i" i' O- x 46_数仓采集_面试题(Linux、Shell、Hadoop).avi2 R" A6 R7 D' p9 h( i. \ I" F9 w 47_数仓采集_面试题(Flume、Kafka).avi& A1 w0 W) S1 ~# i& n, } ~6 o( b& o 48_用户行为数仓_每日回顾.avi% U( @. v7 D* C* B W J 49_用户行为数仓_用户行为数仓课程介绍.avi 50_用户行为数仓_为什么要分层.avi! J- C* F* K' R* l 51_用户行为数仓_数仓分层.avi4 W _. ]: j5 U; l$ Q9 l. Q [/ u 52_用户行为数仓_数据集市与数据仓库概念.avi5 U5 c# e( Y8 B% c 53_用户行为数仓_数仓命名规范.avi 54_用户行为数仓_Hive&MySQL;安装.avi 55_用户行为数仓_Hive运行引擎Tez.avi! L# \% m0 s- F; A" q 56_用户行为数仓_项目经验之元数据备份.avi 57_用户行为数仓_ODS层启动日志和事件日志表创建.avi 58_用户行为数仓_ODS层加载数据脚本.avi' J8 ^- I/ b5 O3 Y) @9 a- h 59_用户行为数仓_DWD层启动日志建表及导入数据.avi9 h3 [. T0 F1 ~6 s! i/ J 60_ 用户行为数仓_DWD层启动表加载数据脚本.avi$ \1 Z0 Z/ m; d: F+ B5 u$ c 61_用户行为数仓_DWD层事件基础明细表创建.avi; Y& i+ U7 S6 P" X) T3 n! V 62_用户行为数仓_自定义UDF函数(解析公共字段).avi7 Q/ i) X8 O6 S0 M( V' m- ]- M 63_用户行为数仓_自定义UDTF函数(解析事件日志基础明细表).avi 64_用户行为数仓_DWD层数据解析脚本.avi 65_用户行为数仓_DWD层事件表加载数据脚本.avi 66_用户行为数仓_今日回顾.avi* e9 W+ P$ {5 ?! x9 [- e5 ]# a 67_用户行为数仓_业务术语.avi 68_用户行为数仓_日期的系统函数.avi 69_用户行为数仓_每日活跃设备明细.avi 70_用户行为数仓_每周活跃设备明细.avi 71_用户行为数仓_每月活跃设备明细.avi 72_用户行为数仓_DWS层加载数据脚本.avi- i* h$ d' Q7 M1 G0 ?% f 73_用户行为数仓_需求一:ADS层日活、周活、月活用户数.avi- I- Q* u3 n; v. n, T 74_用户行为数仓_每日新增设备明细表.avi/ B# |; {' c4 y6 y9 \2 r( i 75_用户行为数仓_需求二:ADS层每日新增设备表.avi 76_用户行为数仓_用户留存分析.avi 77_用户行为数仓_1、2、3、n日留存用户明细.avi v. ^5 Q1 \ `9 V4 Q 78_用户行为数仓_需求三:ADS层留存用户和留存比率.avi 79_用户行为数仓_新数据准备.avi 80_用户行为数仓_需求四:沉默用户.avi 81_用户行为数仓_需求五:本周回流用户数.avi 82_用户行为数仓_需求六:流失用户.avi2 x0 _( B( `, z4 j$ |5 S2 Z4 T- e% R) ] 83_用户行为数仓_需求七:最近连续3周活跃用户数.avi 84_用户行为数仓_需求八:最近七天内连续三天活跃用户数.avi- C- l" J O8 v3 x- J$ r 85_用户行为数仓_用户行为数仓业务总结.avi- V4 n, x9 B* A( P6 n/ e! E! U 86_用户行为数仓_Hive企业面试题总结.avi3 l9 J8 F2 t0 p& S! O! ^ 87_业务数仓_业务数仓课程介绍.avi 88_业务数仓_电商业务与数据结构简介.avi 89_业务数仓_表的分类.avi# X. Q* ~# f7 F P' @; i+ z 90_业务数仓_同步策略.avi; k0 r$ A: b9 E) @1 W 91_业务数仓_范式理论.avi5 ~2 z+ A' F+ N- J" S% r 92_业务数仓_雪花模型、星型模型和星座模型.avi 93_业务数仓_配置Hadoop支持Snappy压缩.avi 94_业务数仓_业务数据生成.avi 95_业务数仓_Sqoop安装及参数.avi% s/ l0 E. R( Y9 s, h3 k 96_业务数仓_Sqoop导入数据.avi4 {8 ~! a8 o4 `" y: p5 {1 ^ 97_业务数仓_ODS层建表及数据导入.avi 98_业务数仓_DWD层建表及导入数据.avi 99_业务数仓_需求讲解.avi7 X6 q, I3 Y+ F: N8 h 源码笔记资料.rar0 W

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕布辕门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值