hadoop_day01

大数据介绍
1.数据流转流程:
	数据采集-->数据存储-->数据计算-->数据分析-->数据展示
2.实时,离线数据分析系统
	按照数据分析的时效性,通常会把大数据分析系统分成实时系统和离线系统两种;实时系统对数据的实时要求非常高,而离线系统相对来说,实时性要求不高
3.js自调用匿名函数
格式: (function(){})()
eg: (function(x){
    alert(x);
	})("hello ");
15
数据的采集
1.数据采集的流程:
	项目下的所有网页,都会被布置埋点代码;当dom树加载到埋点代码,埋点代码会生成script标签,并异步引入
ma.js脚本文件,而ma.js引入完成就会开始收集当前html页面的信息,并拼接为字符串;最后收集完成后,ma.js向
后端请求一张1*1px的图片,并在图片url后拼接收集到的信息,服务器端接收到请求,对请求url
处理保存,并相应空白图片给浏览器,完成数据收集
2.ajax跨域解决方案:
	javascript请求后端的数据收集脚本后发送收集的数据,通常发送的是ajax请求,而使用ajax请求就难免发
生跨域问题;而html规范中,image的跨域是允许的(crossorign属性),因此通常将发送收集到数据的请求伪
装成请求一张gif图片
3.nginx收集数据局限性解决方案:
	nginx会自动收集客户端访问信息,并将信息保存到logs/access.log文件中,但是nginx默认收集的数据非
常有限,因此需要将Lua脚本小程序嵌入到nginx服务器中,通过ngx_lua模块集成了Lua,从而在conf/nginx.conf文件中通过Lua来完成业务

在这里插入图片描述


##### index.html

```html
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>welcom to hadoop</title>	
	
		<script type="text/javascript">
        //如果_map为null,那么就将[]赋值给_map
		var _maq = _maq || [];
        //设置当前的账户名为AllenWoon
		_maq.push(['_setAccount', 'AllenWoon']);
	    //自调用匿名函数,当函数加载完成会自动执行函数中的代码
		(function() {
			var ma = document.createElement('script'); 
			ma.type = 'text/javascript';
			ma.async = true;
            //请求ma.js文件
			ma.src = 'http://192.168.255.128/ma.js';
			var s = document.getElementsByTagName('script')[0]; 
			s.parentNode.insertBefore(ma, s);
		})();
		</script>			
	</head>
	<body>
		<h1 align="center">黑马程序员--云计算大数据</h1>
	</body>
</html>

在这里插入图片描述

ma.js
(function () {
    var params = {};
    //Document对象数据
    if(document) {
        params.domain = document.domain || ''; 
        params.url = document.URL || ''; 
        params.title = document.title || ''; 
        params.referrer = document.referrer || ''; 
    }   
    //Window对象数据
    if(window && window.screen) {
        params.sh = window.screen.height || 0;
        params.sw = window.screen.width || 0;
        params.cd = window.screen.colorDepth || 0;
    }   
    //navigator对象数据
    if(navigator) {
        params.lang = navigator.language || ''; 
    }   
    //解析_maq配置
    if(_maq) {
        for(var i in _maq) {
            switch(_maq[i][0]) {
                case '_setAccount':
                    params.account = _maq[i][1];
                    break;
                default:
                    break;
            }   
        }   
    }   
    //拼接参数串
    var args = ''; 
    for(var i in params) {
        if(args != '') {
            args += '&';
        }   
        args += i + '=' + encodeURIComponent(params[i]);
    }   
    //通过Image对象请求后端脚本
    var img = new Image(1, 1); 
    img.src = 'http://192.168.255.128/log.gif?' + args;
})();

猜你喜欢

转载自blog.csdn.net/qq_42514129/article/details/86475225