介绍一个 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方法中进行数据的清洗操作,清洗不符合规范的数据

离线数据技术Hadoop框架 hadoop 离线使用场景_Hadoop