一、离线项目整体技术
对于Hadoop离线项目来说:
1、存储
- 存储在Hadoop集群
2、Hive计算(面试的时候问你Hive的认识,如果你说就是写sql,基本人没了)
- 使用MapReduce对数据进行清洗,清洗后的数据存储在hdfs上,在Hive中创建一张分区表,分区字段(day=20200416),清洗完的数据需要使用:alter table order_partiiton ADD IF NOT EXISTS PARTITION(day=‘20200416’); 而不能使用msck来刷新元数据信息(因为msck是一个重量级的过程在生产上)
面试考察:
- SQL --> Mapreduce?转换成多少个stage,stage之间的依赖关系又是怎么样的?
3、Flume(数据采集)
4、调度工具(crontab、shell)
- 进阶调度工具:Azakaban
5、HUE:用于在生产上的排查数据
- 可视化的基于web的notebook
- Hue的好处就是不需要使用黑窗口的命令方式,可以直接查询、编辑数据,HUE可以查询Hive、Impala,高版本可以对接Spark
关于数据抽样Preview Sample Data、图形化界面,HUE都提供给了我们
二、从通用项目来看:
集群规模 --> 每台机器的配置(CDH中会涉及) --> 机型
面试题:
你们公司的集群规模 --> 每台机器的配置 --> 你们公司的机型
二、离线项目功能演示
流程图如下:
离线处理流程解析:
1、数据从外部服务器Server、关系型数据库RDBMS采集到Hadoop集群中,Server中的日志信息–>Flume,RDBMS --> SQOOP/Spark;
2、对于大部分公司而言,离线处理的数据采集到天级别,举例:原始日志:/g6/hadoop/accesslog/20200416/…log (采用普通的文本压缩格式);主要是对分隔符、时间字段、IP字段的解析;
3、使用MapReduce进行ETL处理,处理后的数据写到hdfs上的某个目录:/g6/hadoop/output/access/day=20200416,相应的在Hive中就是创建一个分区表Partitioned(day=20200416),通过location进行指定即可;那Hive如何感知到hdfs上的数据呢,alter table tbl_name ADD IF NOT EXISTS PARTITION(day=“20200416”); 生产上不能使用msck刷新元数据信息,msck在生产上是一个很重的操作。
三、离线项目步骤处理
shell脚本的步骤:
Step1:数据清洗
Step2:move data to DW
Step3:flush partition meta data
对于一个作业来说我们要知道它的整体耗时,此处跑完shell脚本的时间其实是step1的时间。
梳理整个离线处理的流程:
1、数据采集 Server–>Hadoop集群
2、ETL操作
3、raw --> target(external table partiton) 数据从源端到目标端
4、SQL进行业务统计 --> destination table
5、WebUI展示
对于大数据开发人员而言:掌握2、3、4步尤为重要
关于第二步ETL而言,使用Mapreduce开发,涉及到有无map和reduce主要有以下三种场景:
1、map+reducer
2、map
3、Mapreducer chain(由多个mapreduce进行的拼接)
对于普通的数据导入、导出,Sqoop只有map,map默认的个数是4,sqoop仅仅只是做了行过滤和列裁剪。
a.map去hdfs的input文件夹下读取数据
b.map方法中进行数据的清洗操作,对于不符合规范的数据应该怎么处理??(不符合规范的数据需要进行剔除,这些你所认为不符合规范的数据需要进行留档)
新的知识点:
1、清洗后的数据该采用行式VS列式存储
2、Compression压缩格式