大數據教程(10.3)web日誌數據清洗

    上一篇博客分享了QQ共同好友的實現方案,本篇博客博主將繼續爲小夥伴們分享web日誌清洗案例。php

    1、需求css

           在實際生產的日誌文件中,有可能某些日誌數據並不規整,咱們須要對其進行清洗,而後用於分析;以下圖的日誌文件:html

194.237.142.21 - - [18/Sep/2013:06:49:18 +0000] "GET /wp-content/uploads/2013/07/rstudio-git3.png HTTP/1.1" 304 0 "-" "Mozilla/4.0 (compatible;)"
183.49.46.228 - - [18/Sep/2013:06:49:23 +0000] "-" 400 0 "-" "-"
163.177.71.12 - - [18/Sep/2013:06:49:33 +0000] "HEAD / HTTP/1.1" 200 20 "-" "DNSPod-Monitor/1.0"
163.177.71.12 - - [18/Sep/2013:06:49:36 +0000] "HEAD / HTTP/1.1" 200 20 "-" "DNSPod-Monitor/1.0"
101.226.68.137 - - [18/Sep/2013:06:49:42 +0000] "HEAD / HTTP/1.1" 200 20 "-" "DNSPod-Monitor/1.0"
101.226.68.137 - - [18/Sep/2013:06:49:45 +0000] "HEAD / HTTP/1.1" 200 20 "-" "DNSPod-Monitor/1.0"
60.208.6.156 - - [18/Sep/2013:06:49:48 +0000] "GET /wp-content/uploads/2013/07/rcassandra.png HTTP/1.0" 200 185524 "http://cos.name/category/software/packages/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"
222.68.172.190 - - [18/Sep/2013:06:49:57 +0000] "GET /images/my.jpg HTTP/1.1" 200 19939 "http://www.angularjs.cn/A00n" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"
222.68.172.190 - - [18/Sep/2013:06:50:08 +0000] "-" 400 0 "-" "-"
183.195.232.138 - - [18/Sep/2013:06:50:16 +0000] "HEAD / HTTP/1.1" 200 20 "-" "DNSPod-Monitor/1.0"
183.195.232.138 - - [18/Sep/2013:06:50:16 +0000] "HEAD / HTTP/1.1" 200 20 "-" "DNSPod-Monitor/1.0"
66.249.66.84 - - [18/Sep/2013:06:50:28 +0000] "GET /page/6/ HTTP/1.1" 200 27777 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
221.130.41.168 - - [18/Sep/2013:06:50:37 +0000] "GET /feed/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"
157.55.35.40 - - [18/Sep/2013:06:51:13 +0000] "GET /robots.txt HTTP/1.1" 200 150 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
50.116.27.194 - - [18/Sep/2013:06:51:35 +0000] "POST /wp-cron.php?doing_wp_cron=1379487095.2510800361633300781250 HTTP/1.0" 200 0 "-" "WordPress/3.6; http://blog.fens.me"
58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] "GET /nodejs-socketio-chat/ HTTP/1.1" 200 10818 "http://www.google.com/url?sa=t&rct=j&q=nodejs%20%E5%BC%82%E6%AD%A5%E5%B9%BF%E6%92%AD&source=web&cd=1&cad=rja&ved=0CCgQFjAA&url=%68%74%74%70%3a%2f%2f%62%6c%6f%67%2e%66%65%6e%73%2e%6d%65%2f%6e%6f%64%65%6a%73%2d%73%6f%63%6b%65%74%69%6f%2d%63%68%61%74%2f&ei=rko5UrylAefOiAe7_IGQBw&usg=AFQjCNG6YWoZsJ_bSj8kTnMHcH51hYQkAA&bvm=bv.52288139,d.aGc" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
58.215.204.118 - - [18/Sep/2013:06:51:36 +0000] "GET /wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1 HTTP/1.1" 304 0 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] "GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 304 0 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
58.215.204.118 - - [18/Sep/2013:06:51:36 +0000] "GET /wp-includes/js/comment-reply.min.js?ver=3.6 HTTP/1.1" 304 0 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
58.215.204.118 - - [18/Sep/2013:06:51:36 +0000] "GET /wp-content/uploads/2013/08/chat.png HTTP/1.1" 200 48968 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
58.215.204.118 - - [18/Sep/2013:06:51:36 +0000] "GET /wp-content/uploads/2013/08/chat2.png HTTP/1.1" 200 59852 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
58.215.204.118 - - [18/Sep/2013:06:51:37 +0000] "GET /wp-content/uploads/2013/08/socketio.png HTTP/1.1" 200 80493 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
58.248.178.212 - - [18/Sep/2013:06:51:37 +0000] "GET /nodejs-grunt-intro/ HTTP/1.1" 200 51770 "http://blog.fens.me/series-nodejs/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; InfoPath.2; .NET4.0C)"
58.248.178.212 - - [18/Sep/2013:06:51:40 +0000] "GET /wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1 HTTP/1.1" 200 7200 "http://blog.fens.me/nodejs-grunt-intro/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; InfoPath.2; .NET4.0C)"
58.248.178.212 - - [18/Sep/2013:06:51:40 +0000] "GET /wp-includes/js/comment-reply.min.js?ver=3.6 HTTP/1.1" 200 786 "http://blog.fens.me/nodejs-grunt-intro/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; InfoPath.2; .NET4.0C)"
58.248.178.212 - - [18/Sep/2013:06:51:40 +0000] "GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 200 45307 "http://blog.fens.me/nodejs-grunt-intro/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; InfoPath.2; .NET4.0C)"
58.248.178.212 - - [18/Sep/2013:06:51:40 +0000] "GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 200 93128 "http://blog.fens.me/nodejs-grunt-intro/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; InfoPath.2; .NET4.0C)"
58.248.178.212 - - [18/Sep/2013:06:51:40 +0000] "GET /wp-includes/js/comment-reply.min.js?ver=3.6 HTTP/1.1" 200 786 "http://blog.fens.me/nodejs-grunt-intro/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; InfoPath.2; .NET4.0C)"
58.215.204.118 - - [18/Sep/2013:06:51:41 +0000] "-" 400 0 "-" "-"
58.215.204.118 - - [18/Sep/2013:06:51:41 +0000] "-" 400 0 "-" "-"

        本次的清洗規則:主要是對字段數不合法的數據進行清洗(加入標記位),而且對其中一些字段進行處理,如時間等等。java

    2、代碼實現node

          WebLogBean(web日誌bean類實現)jquery

package com.empire.hadoop.mr.weblogwash;

public class WebLogBean {

    private String  remote_addr;    // 記錄客戶端的ip地址
    private String  remote_user;    // 記錄客戶端用戶名稱,忽略屬性"-"
    private String  time_local;     // 記錄訪問時間與時區
    private String  request;        // 記錄請求的url與http協議
    private String  status;         // 記錄請求狀態;成功是200
    private String  body_bytes_sent;// 記錄發送給客戶端文件主體內容大小
    private String  http_referer;   // 用來記錄從那個頁面連接訪問過來的
    private String  http_user_agent;// 記錄客戶瀏覽器的相關信息

    private boolean valid = true;   // 判斷數據是否合法

    public String getRemote_addr() {
        return remote_addr;
    }

    public void setRemote_addr(String remote_addr) {
        this.remote_addr = remote_addr;
    }

    public String getRemote_user() {
        return remote_user;
    }

    public void setRemote_user(String remote_user) {
        this.remote_user = remote_user;
    }

    public String getTime_local() {
        return time_local;
    }

    public void setTime_local(String time_local) {
        this.time_local = time_local;
    }

    public String getRequest() {
        return request;
    }

    public void setRequest(String request) {
        this.request = request;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getBody_bytes_sent() {
        return body_bytes_sent;
    }

    public void setBody_bytes_sent(String body_bytes_sent) {
        this.body_bytes_sent = body_bytes_sent;
    }

    public String getHttp_referer() {
        return http_referer;
    }

    public void setHttp_referer(String http_referer) {
        this.http_referer = http_referer;
    }

    public String getHttp_user_agent() {
        return http_user_agent;
    }

    public void setHttp_user_agent(String http_user_agent) {
        this.http_user_agent = http_user_agent;
    }

    public boolean isValid() {
        return valid;
    }

    public void setValid(boolean valid) {
        this.valid = valid;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(this.valid);
        sb.append("\001").append(this.remote_addr);
        sb.append("\001").append(this.remote_user);
        sb.append("\001").append(this.time_local);
        sb.append("\001").append(this.request);
        sb.append("\001").append(this.status);
        sb.append("\001").append(this.body_bytes_sent);
        sb.append("\001").append(this.http_referer);
        sb.append("\001").append(this.http_user_agent);
        return sb.toString();
    }
}

            WebLogParser(日誌清洗規則類)git

package com.empire.hadoop.mr.weblogwash;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class WebLogParser {

    static SimpleDateFormat sd1 = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss", Locale.US);

    static SimpleDateFormat sd2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static WebLogBean parser(String line) {
        WebLogBean webLogBean = new WebLogBean();
        String[] arr = line.split(" ");
        if (arr.length > 11) {
            webLogBean.setRemote_addr(arr[0]);
            webLogBean.setRemote_user(arr[1]);
            webLogBean.setTime_local(parseTime(arr[3].substring(1)));
            webLogBean.setRequest(arr[6]);
            webLogBean.setStatus(arr[8]);
            webLogBean.setBody_bytes_sent(arr[9]);
            webLogBean.setHttp_referer(arr[10]);

            if (arr.length > 12) {
                webLogBean.setHttp_user_agent(arr[11] + " " + arr[12]);
            } else {
                webLogBean.setHttp_user_agent(arr[11]);
            }
            if (Integer.parseInt(webLogBean.getStatus()) >= 400) {// 大於400,HTTP錯誤
                webLogBean.setValid(false);
            }
        } else {
            webLogBean.setValid(false);
        }
        return webLogBean;
    }

    public static String parseTime(String dt) {

        String timeString = "";
        try {
            Date parse = sd1.parse(dt);
            timeString = sd2.format(parse);

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return timeString;
    }

    public static void main(String[] args) {
        WebLogParser wp = new WebLogParser();
        String parseTime = wp.parseTime("18/Sep/2013:06:49:48");
        System.out.println(parseTime);
    }

}

            WeblogPreProcess(mapreduce主程序類)angularjs

package com.empire.hadoop.mr.weblogwash;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WeblogPreProcess {

    static class WeblogPreProcessMapper extends Mapper<LongWritable, Text, Text, NullWritable> {
        Text         k = new Text();
        NullWritable v = NullWritable.get();

        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

            String line = value.toString();
            WebLogBean webLogBean = WebLogParser.parser(line);
            //能夠插入一個靜態資源過濾(.....)
            /* WebLogParser.filterStaticResource(webLogBean); */
            if (!webLogBean.isValid())
                return;
            k.set(webLogBean.toString());
            context.write(k, v);

        }

    }

    public static void main(String[] args) throws Exception {

        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        job.setJarByClass(WeblogPreProcess.class);

        job.setMapperClass(WeblogPreProcessMapper.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);

        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.waitForCompletion(true);

    }
}

    3、執行程序web

#上傳jar

Alt+p
lcd d:/
put  WeblogWash.jar
put  access.log.txt

#準備hadoop處理的數據文件

cd /home/hadoop
hadoop fs  -mkdir -p /weblogwash/loginput
hdfs dfs -put  access.log.txt  /weblogwash/loginput


#運行程序

hadoop jar WeblogWash.jar  com.empire.hadoop.mr.weblogwash.WeblogPreProcess /weblogwash/loginput /weblogwash/logoutput

    4、運行效果apache

[hadoop@centos-aaron-h1 ~]$ hadoop jar WeblogWash.jar  com.empire.hadoop.mr.weblogwash.WeblogPreProcess /weblogwash/loginput /weblogwash/logoutput
18/12/23 07:46:35 INFO client.RMProxy: Connecting to ResourceManager at centos-aaron-h1/192.168.29.144:8032
18/12/23 07:46:35 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
18/12/23 07:46:35 INFO input.FileInputFormat: Total input files to process : 1
18/12/23 07:46:35 INFO mapreduce.JobSubmitter: number of splits:1
18/12/23 07:46:35 INFO Configuration.deprecation: yarn.resourcemanager.system-metrics-publisher.enabled is deprecated. Instead, use yarn.system-metrics-publisher.enabled
18/12/23 07:46:36 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1545512861141_0003
18/12/23 07:46:36 INFO impl.YarnClientImpl: Submitted application application_1545512861141_0003
18/12/23 07:46:36 INFO mapreduce.Job: The url to track the job: http://centos-aaron-h1:8088/proxy/application_1545512861141_0003/
18/12/23 07:46:36 INFO mapreduce.Job: Running job: job_1545512861141_0003
18/12/23 07:46:43 INFO mapreduce.Job: Job job_1545512861141_0003 running in uber mode : false
18/12/23 07:46:43 INFO mapreduce.Job:  map 0% reduce 0%
18/12/23 07:46:51 INFO mapreduce.Job:  map 100% reduce 0%
18/12/23 07:46:56 INFO mapreduce.Job:  map 100% reduce 100%
18/12/23 07:46:57 INFO mapreduce.Job: Job job_1545512861141_0003 completed successfully
18/12/23 07:46:58 INFO mapreduce.Job: Counters: 49
        File System Counters
                FILE: Number of bytes read=1843125
                FILE: Number of bytes written=4080159
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=3025884
                HDFS: Number of bytes written=1799829
                HDFS: Number of read operations=6
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters 
                Launched map tasks=1
                Launched reduce tasks=1
                Data-local map tasks=1
                Total time spent by all maps in occupied slots (ms)=5806
                Total time spent by all reduces in occupied slots (ms)=3342
                Total time spent by all map tasks (ms)=5806
                Total time spent by all reduce tasks (ms)=3342
                Total vcore-milliseconds taken by all map tasks=5806
                Total vcore-milliseconds taken by all reduce tasks=3342
                Total megabyte-milliseconds taken by all map tasks=5945344
                Total megabyte-milliseconds taken by all reduce tasks=3422208
        Map-Reduce Framework
                Map input records=14619
                Map output records=13535
                Map output bytes=1807907
                Map output materialized bytes=1843125
                Input split bytes=127
                Combine input records=0
                Combine output records=0
                Reduce input groups=13017
                Reduce shuffle bytes=1843125
                Reduce input records=13535
                Reduce output records=13535
                Spilled Records=27070
                Shuffled Maps =1
                Failed Shuffles=0
                Merged Map outputs=1
                GC time elapsed (ms)=217
                CPU time spent (ms)=3510
                Physical memory (bytes) snapshot=346947584
                Virtual memory (bytes) snapshot=1694277632
                Total committed heap usage (bytes)=142786560
        Shuffle Errors
                BAD_ID=0
                CONNECTION=0
                IO_ERROR=0
                WRONG_LENGTH=0
                WRONG_MAP=0
                WRONG_REDUCE=0
        File Input Format Counters 
                Bytes Read=3025757
        File Output Format Counters 
                Bytes Written=1799829
[hadoop@centos-aaron-h1 ~]$

    5、運行結果

[hadoop@centos-aaron-h1 ~]$ hdfs dfs -cat /weblogwash/logoutput/part-r-00000 
true1.162.203.134-2013-09-18 13:47:35/images/my.jpg20019939"http://www.angularjs.cn/A0d9""Mozilla/5.0 (Windows
true1.202.186.37-2013-09-18 15:39:11/wp-content/uploads/2013/08/windjs.png20034613"http://cnodejs.org/topic/521a30d4bee8d3cb1272ac0f""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/nodejs-async-windjs/20010139"http://cnodejs.org/topic/521a30d4bee8d3cb1272ac0f""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-content/themes/silesia/functions/css/shortcodes.css2002899"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-content/themes/silesia/functions/js/shortcode.js200333"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-content/themes/silesia/js/jquery.cycle.all.min.js2007784"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-content/themes/silesia/js/load.js200715"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-content/themes/silesia/style.css2007554"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-includes/js/comment-reply.min.js?ver=3.6200786"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.12007200"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:18/wp-includes/js/jquery/jquery.js?ver=1.10.220032851"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/js/baidu.js200249"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/js/google.js200475"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/themes/silesia/images/bullets/5.gif20062"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/themes/silesia/images/crubms-div.png2001255"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/themes/silesia/images/home-ico.png2001103"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/themes/silesia/images/ico-meta.gif20073"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/themes/silesia/images/natty-logo.png2001438"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/themes/silesia/images/slide-bg.png200934"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/themes/silesia/images/sprites/post-type.png2002009"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/uploads/2013/08/stage1.png20010208"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/uploads/2013/08/stage2.png20016419"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:19/wp-content/uploads/2013/08/stage3.png20015227"http://blog.fens.me/nodejs-async-windjs/""Mozilla/5.0 (Macintosh;
true1.202.186.37-2013-09-18 15:39:20/wp-content/uploads/2013/05/favicon.ico2001150"-""Mozilla/5.0 (Macintosh;
[hadoop@centos-aaron-h1 ~]$

    最後寄語,以上是博主本次文章的所有內容,若是你們以爲博主的文章還不錯,請點贊;若是您對博主其它服務器大數據技術或者博主本人感興趣,請關注博主博客,而且歡迎隨時跟博主溝通交流。

相關文章
相關標籤/搜索