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;