介绍一个 Hadoop生态离线项目:
涉及到的技术:
Hadoop:HDFS(数据存储的地方) MapReduce(用来做数据清洗) YARN
Hadoop集群
Hive:数据清洗之后,数据放在hdfs上,需要使用外部表,所有维度的数据统计分析需要通过SQL进行处理分析。在这里数据倾斜有部分会解决(数据倾斜也是分场景的)。还有元数据管理需要去掌握。以及其他的一些优化。
(面试:你对hive的理解?(SQL是如何转换成MapReduce的?会生成几种stege,依赖关系是什么?))
Flume:用来进行数据采集。
调度:简单的可以用crontab、shell进行调度。后面还有 Azkaban 。
HUE:用来进行数据排查。它是可视化的notebook。
(项目面试:你们的集群规模是多少?==>每台机器的配置是什么?==>机型(物理机)是什么? )
离线处理架构:
比如可以用Flume从某个server上采集日志信息到hdfs上(建议压缩的文本格式),或者用Sqoop/Spark从RDBMS上采集过来。
原始的日志信息不规整,需要有一个ETL操作,(比如MapReduce或者Sqark来实现),有一个解析、规则匹配的过程。
清洗之后的数据放在hdfs上的一个地方,对应分区表。(hive外部表)
(分区其实就是hdfs上的一个key=value的目录,外加一批元数据信息。)
还要通过alter刷一下元数据信息才能通过hive查到表里的数据。
最后通过 Web UI 界面(比如HUE、Zeppelin、BI展示工具),把结果展示出来。
整个流程的开发步骤;
①数据采集:从Web server用Flume采集到hadoop
②做一个ETL过程
③把清洗后的数据移到目标目录(外部表)
④业务统计:考验SQL的能力 执行的结果放在dest table里。
⑤web UI界面展示
开发的重点是②③④
关于ETL过程:(在这里先用MapReduce来进行操作)
对于之前的用sqoop从RDBMS抽数据到hadoop上,ETL操作只涉及到Map,而不涉及reduce。
这个过程其实是字段的选择和行的过滤,就是select where
MapReduce的两个阶段,map阶段处理后的数据,会经过shuffle端,到reduce端,由reduce端进行统一的规约的操作。
而sqoop只是数据的导入和导出,可以研究一下sqoop的工作原理。所以只是涉及map。
1)Map去HDFS的input文件夹(原始的日志数据)下读取数据
2)map方法中进行数据的清洗操作,清洗不符合规范的数据