Hive大数据测试

Result文件数据说明:

Ip:106.39.41.166,(城市)

Date:10/Nov/2016:00:01:02 +0800,(日期)

Day:10,(天数)

Traffic: 54 ,(流量)

Type: video,(类型:视频video或文章article)

Id: 8701(视频或者文章的id)

测试要求:

1、 数据清洗:按照进行数据清洗,并将清洗后的数据导入hive数据库中。

两阶段数据清洗:

(1)第一阶段:把需要的信息从原始日志中提取出来

ip:    199.30.25.88

time:  10/Nov/2016:00:01:03 +0800

traffic:  62

文章: article/11325

视频: video/3235

(2)第二阶段:根据提取出来的信息做精细化操作

ip--->城市 city(IP)

date--> time:2016-11-10 00:01:03

day: 10

traffic:62

type:article/video

id:11325

(3)hive数据库表结构:

create table data(  ip string,  time string , day string, traffic bigint,

type string, id   string )

2、数据分析:在HIVE统计下列数据。

(1)统计最受欢迎的视频/文章的Top10访问次数 (video/article)

(2)按照地市统计最受欢迎的Top10课程 (ip)

(3)按照流量统计最受欢迎的Top10课程 (traffic)

3、数据可视化:

将统计结果倒入MySql数据库中,通过图形化展示的方式展现出来。

1、使用java代码将result.txt文件中的时间格式化,再将其导入mysql

日期格式化代码

import java.io.*;

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

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;


public class test {

    public static ArrayList<String> getfile(String filepath){
        try{
            String temp = null;
            File f = new File(filepath);
            //指定读取编码用于读取中文
            InputStreamReader read = new InputStreamReader(new FileInputStream(f),"utf-8");
            ArrayList<String> readList = new ArrayList<String>();
            BufferedReader reader=new BufferedReader(read);
            //bufReader = new BufferedReader(new FileReader(filepath));
            while((temp=reader.readLine())!=null &&!"".equals(temp)){
                readList.add(temp);
            }
            read.close();
            return readList;

        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //改变时间的格式
    public static String parseDate(String dateStr) throws java.text.ParseException{

        SimpleDateFormat input_date = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.ENGLISH);
        SimpleDateFormat output_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String finalDate = "";
        try {
            Date parse_date = input_date.parse(dateStr);
            finalDate = output_date.format(parse_date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return  finalDate;
    }

    public static void main(String[] args) throws java.text.ParseException, IOException {
        //txt文件读取
        ArrayList<String> list=getfile("D:\\result.txt");
        Writer writer = new FileWriter("D:\\result1.txt");
        int num=list.size();
        for (int i = 0; i < num; i++) {

            if (list.get(i)!=null) {
                String[] s=list.get(i).split(",");

                String data=parseDate(s[1]);
                //txt每行可以分割成6个字符串存到是s[],
                writer.append(s[0]+","+data+","+s[2]+","+s[3]+","+s[4]+","+s[5]+"\n");
            }

        }

        System.out.println("添加成功");
    }
}

后面是查询数据并进行格式化,可以在hive操作,或者直接在mysql中进行操作(最后的可视化需要连接mysql)

这里最重要的是sql语句,将后两问的sql语句贴上,第一问很简单

select id,traffic as traffic from result ORDER BY traffic desc limit 10;

select id,ip,SUM(traffic) as traffic from result GROUP BY id,ip ORDER BY traffic desc,ip desc limit 10;

 

posted on 2022-10-18 22:22  跨越&尘世  阅读(109)  评论(0编辑  收藏  举报