【数仓项目】万丈高楼平地起-从0开始的环境搭建

写在前面

本文主要配置项目开始阶段需要用到的集群环境,基本配置不再赘述,只提一些与初次搭建集群不同的点与优化的点,以及笔者在网上看到的一些比较有意思的相关部分面试题
so 本文不适合没搭建过集群环境的小白
其实还是能看看的,反正迟早会用到的嘛hhhh


数仓是什么?

数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合。
这是官方概念
自我理解应该就是一个集群上的超大型数据库系统,里面存放了各种用户信息,业务信息,商品信息等。公司能够根据这些信息来进行大数据分析,生成一些有利于业务发展,提高产品质量,用户体验的数据,而BOSS每天也会根据这些信息来对公司的未来战略进行调整,可以说对于一个做大做强的公司来说,十分重要!当然,对于笔者这种即将面试者来说特别是目标是大厂的,搭建数仓这种事根本轮不到我来做,但是我觉得,了解下数仓整个流程对于大数据来说还是很重要的~ 接下来是一道相关面试题~

数仓中数据从哪来?又去了哪?

来源可以是公司的日志采集系统,业务数据库信息,爬虫等等
去向最主要就是生成报表系统,用户画像等东西来帮助决策,好的公司还会用来做推荐系统,机器学习,风控等高精尖的东西

接下来是环境搭建~

HADOOP2.7.2

在原来的基础上增加了lzo压缩,需要去core-site.xml,mapred-site.xml文件配置信息,具体看官方文档,apache宇宙好的点就是要看什么直接就google:想看的东西.apache.org即可

此外

有两个参数很重要

(1)dfs.namenode.handler.count=20 * log2(Cluster Size),比如集群规模为8台时,此参数设置为60
The number of Namenode RPC server threads that listen to requests from clients. If dfs.namenode.servicerpc-address is not configured then Namenode RPC server threads listen to requests from all nodes.
NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。设置该值的一般原则是将其设置为集群大小的自然对数乘以20,即20logN,N为集群大小。
(2)编辑日志存储路径dfs.namenode.edits.dir设置与镜像文件存储路径dfs.namenode.name.dir尽量分开,达到最低写入延迟

有一个点要注意:hadoop宕机怎么办?必竟意外总会有的

解决办法

(1)如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是8192MB)
(2)如果写入文件过量造成NameNode宕机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。高峰期的时候用Kafka进行缓存,高峰期过去数据同步会自动跟上。

zookeeper3.4.10

这没啥好说的,重要的是选举机制和常用指令,博主会在后面的项目总结文章中详细介绍

flume1.7.0

此处直接写我做项目过程中写的随笔,由于是边操作边写的,所以乱的地方,叙述不当的地方,我挖个坑,之后的总结文章填233

如何测试flume是否稳定?

通过ganglia可以监控put和take的次数
若put的次数大于take很多的话则说明失败次数多,不稳定

优化方案:增加flume台数,增加内存,配置双层flume

须知道:

flume中一般有两块用于存放数据,一个是header一个是body,其中数据默认是放在body,header中为空,而在进行etl和类型拦截器设置时 就会用到header部分去存放带start和event的日志数据

kafkamanager1.3.3启动:

nohup bin/kafka-manager -Dhttp.port=7456 >/opt/module/kafka-manager-1.3.3.22/start.log 2>&1 &

Flume内存优化

如何处理内存溢出问题:比如:

ERROR hdfs.HDFSEventSink: process failed
java.lang.OutOfMemoryError: GC overhead limit exceeded

到flume-env.sh下修改配置:
export JAVA_OPTS=”-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote”
内存范围,这个参数和idea,pycharm的调优相同
Flume内存参数设置及优化
JVM heap一般设置为4G或更高,部署在单独的服务器上(4核8线程16G内存)
-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc。

优化flume的filechannel读取速度:

file要比memory慢,但是file保存数据安全
所以在传输重要数据又要求速度时可以通过如下方式进行优化:

通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量。
checkpointDir和backupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证checkpoint坏掉后,可以快速使用backupCheckpointDir恢复数据

官方文档也有说明如下
Comma separated list of directories for storing log files.
Using multiple directories on separate disks can improve file channel
peformance

小文件处理:

HDFS存入大量小文件,有什么影响?
元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在Namenode内存中。所以小文件过多,会占用Namenode服务器大量内存,影响Namenode性能和使用寿命
计算层面:默认情况下MR会对每个小文件启用一个Map任务计算,非常影响计算性能。同时也影响磁盘寻址时间。
处理方法其一:
官方默认的这三个参数配置写入HDFS后会产生小文件,hdfs.rollInterval、hdfs.rollSize、hdfs.rollCount
基于以上hdfs.rollInterval=3600,hdfs.rollSize=134217728,hdfs.rollCount =0,hdfs.roundValue=10,hdfs.roundUnit= second几个参数综合作用,效果如下:
(1)tmp文件在达到128M时会滚动生成正式文件
(2)tmp文件创建超10秒时会滚动生成正式文件
举例:在2018-01-01 05:23的时侯sink接收到数据,那会产生如下tmp文件:
/atguigu/20180101/atguigu.201801010520.tmp
即使文件内容没有达到128M,也会在05:33时滚动生成正式文件

kafka0.11.02

在flume从kafka拿数据消费到hdfs出过错:hdfs端没有数据

解决思路:二分查找
1.去看kafka-flume-hdfs.conf文件配置是否正确
2.去看zookeeper状态
3.去看flume是否能正常工作
4.去看kafka brokerid是否正确
5.去看log.txt看3节点的flume消费是否正常工作

lzo挂了:如果完全跟着别人的思维走,做到这一步你应该会发现你lzo挂了23333

hdfs端读取数据生成一堆没用的临时文件
报错是找不到native
后来翻阅官方配置文档发现是网上的项目文档少配了两个地方

只叫配了core-site
还应该去配hadoop-env和mapred-site
指定java-library还有native路径

×

纯属好玩

扫码支持
谢谢你

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 写在前面
    1. 1.1. 数仓是什么?
      1. 1.1.1. 数仓中数据从哪来?又去了哪?
    2. 1.2. HADOOP2.7.2
      1. 1.2.1. 有两个参数很重要
      2. 1.2.2. 解决办法
    3. 1.3. zookeeper3.4.10
    4. 1.4. flume1.7.0
      1. 1.4.1. 如何测试flume是否稳定?
      2. 1.4.2. 须知道:
      3. 1.4.3. kafkamanager1.3.3启动:
    5. 1.5. Flume内存优化
      1. 1.5.1. 如何处理内存溢出问题:比如:
      2. 1.5.2. 优化flume的filechannel读取速度:
      3. 1.5.3. 小文件处理:
    6. 1.6. kafka0.11.02
      1. 1.6.1. 在flume从kafka拿数据消费到hdfs出过错:hdfs端没有数据
      2. 1.6.2. lzo挂了:如果完全跟着别人的思维走,做到这一步你应该会发现你lzo挂了23333
,