大数据数仓建模(5)

5章 总结

5.1 数仓概念总结

1)数据仓库的输入数据源和输出系统分别是什么?

输入系统:埋点产生的用户行为数据、JavaEE后台产生的业务数据。

输出系统:报表系统、用户画像系统(部分是大数据,部分是的算法)、推荐系统(基于画像之后,做算法)

5.2 项目需求及架构总结

5.2.1 集群规模计算  

 

5.2.2 框架版本选型

1)Apache:运维麻烦,组件间兼容性需要自己调研。(一般大厂使用,技术实力雄厚,有专业的运维人员)(建议使用)

2)CDH:国内使用最多的版本,但CM不开源,但其实对中、小公司使用来说没有影响。离线

3)HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少

5.2.3 服务器选型

 

5.3 数据采集模块总结

5.3.1 Linux&Shell相关总结

1)Linux常用高级命令

序号

命令

命令解释

1

top

查看内存

2

df -h

查看磁盘存储情况

3

iotop

查看磁盘IO读写(yum install iotop安装)

4

iotop -o

直接查看比较高的磁盘读写程序

5

netstat -tunlp | grep 端口号

查看端口占用情况

6

uptime

查看报告系统运行时长及平均负载

7

ps  aux

查看进程

8

find / grep

查找目录,查找文件

2)Shell常用工具(京东)

awk、sed、cut、sort

5.3.2 Hadoop相关总结

1)Hadoop默认不支持LZO压缩,如果需要支持LZO压缩,需要添加jar包,并在hadoop的cores-site.xml文件中添加相关压缩配置。需要掌握让LZO文件支持切片。

2)Hadoop常用端口号,50070,8088,19888,9000

3)Hadoop配置文件以及简单的Hadoop集群搭建。8个配置文件

4)HDFS读流程和写流程(笔试题,有朋友)

5)MapReduce的Shuffle过程及Hadoop优化(包括:压缩、小文件、数据倾斜,集群优化)

6)Yarn的Job提交流程

7)Yarn的默认调度器、调度器分类、以及他们之间的区别

8HDFS存储多目录

9)Hadoop参数调优

10)项目经验基准测试

5.3.3 Zookeeper相关总结

zk就是存储少量数据+监听(分布式的程序)

1)选举机制

半数机制,安装奇数台,这个机制是如何实现?

10台服务器几台:3 台

20台服务器几台:5台

100台服务器几台:11台

不是越多越好,也不是越少越好。  如果多,通信时间长,效率低;如果太少,可靠性差。

  1. 常用命令

ls、get、create

3)zk有哪几种节点? 临时节点和永久节点,有序节点和无序节点

还有一些问题:

  1. 这个框架是用来做什么的?你在开发中使用过没有,怎么使用?

在大数据场景下:有HA的配置,kafka的元数据管理,hbase的元数据

在企业里面zk还有这些场景:配置文件的管理,动态管理上下线,客户端负载均衡

  1. zk有哪几种节点?
  2. zk的监听机制?

zk有两种监听。一种是对节点的监听,节点里面的内容的监听

5.3.4 Flume相关总结

1)Flume组成,Put事务,Take事务

Taildir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。

File Channel:数据存储在磁盘,宕机数据可以保存。但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业。

Memory Channel:数据存储在内存中,宕机数据丢失。传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据。

Kafka Channel:减少了Flume的Sink阶段,提高了传输效率。           

Source到Channel是Put事务

Channel到Sink是Take事务

2)Flume拦截器

(1)拦截器注意事项

项目中自定义了:ETL拦截器和区分类型拦截器。

采用两个拦截器的优缺点:优点,模块化开发和可移植性;缺点,性能会低一些

(2)自定义拦截器步骤

a)实现 Interceptor

b)重写四个方法

  • initialize 初始化
  • public Event intercept(Event event) 处理单个Event
  • public List<Event> intercept(List<Event> events) 处理多个Event,在这个方法中调用Event intercept(Event event)
  • close 方法

c)静态内部类,实现Interceptor.Builder

3)Flume Channel选择器

4)Flume 监控器

Ganglia

5)Flume采集数据会丢失吗?

不会,Channel存储可以存储在File中,数据传输自身有事务。

6)Flume内存

开发中在flume-env.sh中设置JVM heap为4G或更高,部署在单独的服务器上(4核8线程16G内存)

-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc。

-Xms表示JVM Heap(堆内存)最小尺寸,初始分配-Xmx 表示JVM Heap(堆内存)最大允许的尺寸,按需分配。如果不设置一致,容易在初始化时,由于内存不够,频繁触发fullgc

7)FileChannel优化

通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量。

官方说明如下:

Comma separated list of directories for storing log files. Using multiple directories on separate disks can improve file channel peformance

checkpointDir和backupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证checkpoint坏掉后,可以快速使用backupCheckpointDir恢复数据

8)Sink:HDFS Sink小文件处理

(1)HDFS存入大量小文件,有什么影响?

元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在Namenode内存中。所以小文件过多,会占用Namenode服务器大量内存,影响Namenode性能和使用寿命

计算层面:默认情况下MR会对每个小文件启用一个Map任务计算,非常影响计算性能。同时也影响磁盘寻址时间。

  1. 在数据进入hdfs之前,用flume采集,hdfs sink相关的配置HDFS小文件处理?

官方默认的这三个参数配置写入HDFS后会产生小文件,hdfs.rollInterval、hdfs.rollSize、hdfs.rollCount

基于以上hdfs.rollInterval=3600,hdfs.rollSize=134217728,hdfs.rollCount =0几个参数综合作用,效果如下:

(1)文件在达到128M时会滚动生成文件

(2)文件创建超3600秒时会滚动生成文件

举例:在2018-01-01 05:23的时侯sink接收到数据,那会产生如下tmp文件:

 

  1. 如果说hdfs已经有很多小文件了,怎么办?

hadoop 处理小文件

https://blog.csdn.net/czz1141979570/article/details/87822469

 

spark sql 小文件的处理方案:

https://www.cnblogs.com/flymin/p/11345646.html

 

https://blog.csdn.net/weixin_34138377/article/details/94288789?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend~default-3-94288789.nonecase

自己开发代码实现小文件的合并,我们可以用spark读取需要处理的目录,用hdfs 相关的api获取到这个目录下文件的大小,需要设置每个文件是多大,然后计算出需要生成多少个文件(多少个分区),然后使用spark的算子(合并分区),输出到指定目录即可。

5.3.5 Kafka相关总结

 

1)Kafka压测

Kafka官方自带压力测试脚本(kafka-consumer-perf-test.sh、kafka-producer-perf-test.sh)。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈

2)Kafka的机器数量

Kafka机器数量=2*(峰值生产速度*副本数/100)+1

3)Kafka的日志保存时间

3天

4)Kafka的硬盘大小

每天的数据量*3天

5)Kafka监控

公司自己开发的监控器;

开源的监控器:KafkaManager、KafkaMonitor

6)Kakfa分区数。

(1)创建一个只有1个分区的topic

(2)测试这个topic的producer吞吐量和consumer吞吐量。

(3)假设他们的值分别是Tp和Tc,单位可以是MB/s。

(4)然后假设总的目标吞吐量是Tt,那么分区数=Tt / min(Tp,Tc)

例如:producer吞吐量=10m/s;consumer吞吐量=50m/s,期望吞吐量100m/s

专业有逻辑

分区数=100 / 10 =10分区

分区数一般设置为:3-10个

7)副本数设定

一般我们设置成2个或3个,很多企业设置为2个。

8)多少个Topic

   通常情况:多少个日志类型就多少个Topic也有日志类型进行合并的。

9)Kafka丢不丢数据

Ack=0,producer不等待kafka broker的ack,一直生产数据。 

Ack=1,leader数据落盘就发送ack,producer收到ack才继续生产数据。

Ack=-1,ISR中的所有副本数据罗盘才发送ack,producer收到ack才继续生产数据。 

10)Kafka的ISR副本同步队列

ISR(In-Sync Replicas),副本同步队列。ISR中包括Leader和Follower。如果Leader进程挂掉,会在ISR队列中选择一个服务作为新的Leader。有replica.lag.max.messages(延迟条数)和replica.lag.time.max.ms(延迟时间)两个参数决定一台服务是否可以加入ISR副本队列,在0.10版本移除了replica.lag.max.messages参数,防止服务频繁的进去队列。

任意一个维度超过阈值都会把Follower剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的Follower也会先存放在OSR中。

11)Kafka分区分配

Range和RoundRobin

12)Kafka中数据量计算

每天总数据量100g,每天产生1亿日志, 10000万/24/60/60=1150条/秒钟

平均每秒钟:1150

低谷钟:400

高峰每秒钟:1150*(2-20=2300条-23000条

每条日志大小0.5k-2k(取1k

每秒多少数据量:2.0M-20MB

13) Kafka挂掉

(1)Flume记录

(2)日志有记录

(3)短期没事

14)Kafka消息数据积压,Kafka消费能力不足怎么处理?

(1)如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数=分区数。(两者缺一不可)

(2)如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据积压。

15)Kafka幂等性

Kafka0.11版本引入了幂等性,幂等性配合at least once语义可以实现exactly once语义。但只能保证单次会话的幂等。

16)Kafka事务

Kafka0.11版本引入Kafka的事务机制,其可以保证生产者发往多个分区的一批数据的原子性。

第6章 制作本地YUM源

为什么要制作本地YUM源

YUM在Linux上使用源码的方式安装软件非常麻烦,使用yum可以简化安装的过程.

 

YUM源的原理

YUM源其实就是一个保存了多个RPM包的服务器,可以通过http的方式来检索、下载并安装相关的RPM包

 

1.3 制作本地YUM源

  1. 准备一台Linux服务器,用最简单的版本CentOS-6.7-x86_64-minimal.iso
  2. 配置好这台服务器的IP地址
  3. 上传CentOS-6.7-x86_64-bin-DVD1.iso到服务器,或者挂载在本机目录
  4. 将CentOS-6.7-x86_64-bin-DVD1.iso镜像挂载到某个目录

 

mkdir /var/iso

mount -o loop CentOS-6.7-x86_64-bin-DVD1.iso /var/iso

补充:挂载光盘(无需上传ios文件)

mkdir /mnt/cdrom

mount -t iso9660 -o ro /dev/cdrom/ /mnt/cdrom

  1. 修改本机上的YUM源配置文件,将源指向自己

备份原有的YUM源的配置文件

cd /etc/yum.repos.d/

rename .repo .repo.bak *

vi CentOS-Local.repo

[base]
name=CentOS-Local
baseurl=file:///mnt/cdrom
gpgcheck=1
enabled=1  
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

 

 

添加上面内容保存退出

  1. 清除YUM缓冲

yum clean all

  1. 列出可用的YUM

yum repolist

  1. 安装相应的软件

yum install -y httpd

 

YUM的常用命令

安装httpd并确认安装

yum install -y httpd

 

列出所有可用的package和package组

yum list

 

清除所有缓冲数据

yum clean all

 

列出一个包所有依赖的包

yum deplist httpd

 

/******************/ 这个是删除操作

删除httpd

yum remove httpd

 

按照一个nc服务器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值