Hadoop架构中各个集群在开发中的作用

学习大数据,如果只是零零散散地学习各个模块,就会深陷其中,很难深入了解hadoop架构中各个集群的作用。那么在实际开发中,究竟是怎样的一个流程呢?先看下面一张流程图:

Hadoop架构中各个集群在开发中的作用_第1张图片

接下来就用一些大白话,来讲解每个模块的实际应用。

大数据工程师应该从哪里收集用户的访问数据呢?一般可以从两个地方可以取,一个是客户端,一个是服务端。

如果从服务器取数据,比如服务器每天在晚上8点到9点之间用户访问量非常多,而如果我们也从服务器获取这些数据,那么会造成服务器端压力更加的大了。

 所以很多时候可以从客户端获取数据,客户端每一次访问url都会产生数据,每一次访问顺便就把这些数据发送给大数据服务器。那么这个怎么做到的呢?用户每次访问一个url,就会给他返回一堆html数据,而html中的js代码就可以帮我们实现发送数据的需求。所以我们只需写一段收集数据的js嵌套的html页面中即可。而这个js代码就称为js锚点程序也叫做js SDK

 这些数据最终肯定都会保存到HDFS分布式文件系统中,但js返回的数据也不可能直接就存到HDFS,因为jsSDK就不能写HDFS的客户端代码。况且,比如淘宝,并发量是非常之大的,在同一时间点会产生巨大的数据,所以我们需要一个可以接收高并发数据的服务器,这个时候,nginx就派上用场了,所以jsSDK把数据发送给nginx集群。nginx集群的数据存入到本地文件中。这个时候就引来一个问题,如何把本地数据搞到HDFS分布式文件系统上呢?

(方法有很多种,点击这里查看),flume就可以做这样的事情,Flume是一个分布式的海量日志采集和传输框架,nginx是个集群,数据分布在不同的节点,Flume可以实时的从网络协议、消息系统、文件系统采集日志,并传输到HDFS上。

 

当然不可能所有的日志数据都是通过jsSDK在客户端收集,比如支付日志,如果在客户端收集,就不会很安全了。所以必须要在web服务端收集了。就需要用到javaSDK了。javaSDK同样把数据发送给nginx集群。

 

上面整个流程已经把收集到的日志数据,存储到了HDFS中。那么怎么把HDFS中的数据拿出来处理呢?

先使用ETL(ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。)数据仓库技术清洗数据(可以用MapReduce或Hive清洗)。清洗完的数据放到HBase中,(当然如果不需要对数据进行实时改动可以直接放到Hive中即可,但是如果要实时改动数据就存入HBase)。然后就可以开始分析HBase上面的数据了。分析的方法一般是MRSparkHive

 

,处理结果我们需要在web页面去显示,把分析后的结果先放到MySql这种实时响应的关系型数据库中。MRSpark都可以直接把数据写入MySql中,但是Hive却不行,它把分析的数据存在HDFS分布式系统中,这个时候Sqoop就出现了(Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysqlpostgresql...)间进行数据的传递,可以将一个关系型数据库(例如 MySQL ,Oracle ,Postgres等)中的数据导进到HadoopHDFS中,也可以将HDFS的数据导进到关系型数据库中。


你可能感兴趣的:(大数据)