1.日志格式
日期 时间 级别 相关类 信息
2011-08-01 08:39:08,020 INFO org.apache.hadoop.ipc.Server:IPC server Responder......
2.存储结构
日期 时间 级别 相关类各占一列 信息占3列
create table if not exists loginfo11(rdate string,time array<string>,type string,relateclass string,infomation1 string,infomation2 string,infomation3 string)
row format delimited fields terminated by '' collection items terminated by ',' map keys terminated by ':';
3.getConnect.java
新建工程hiveAction,导入 hadoop的jar包,导入mysql的驱动包
getConnect类负责建立与Hive和MYSQL的连接,由于每个连接的开销比较大,所以此类的设计采用的是单例模式:
package com.cstore.transToHive; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class getConnect { private static Connection conn = null; private static Connection conntomysql = null; private static final String DBURL="jdbc:hive://192.168.1.13:50031/default"; private static final String DBUSERNAME = "hive"; private static final String DBPASSWORD = "123456"; private getConnect() { } // 获得与Hive的连接,如果连接已经初始化,则直接返回 public static Connection getHiveConn() throws SQLException { if (conn == null) { try { Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } conn = DriverManager.getConnection( DBURL, "hive", "123456"); System.out.println(1111); } return conn; } // 获得与MYSQL的连接 public static Connection getMysqlConn() throws SQLException { if (conntomysql == null) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } conntomysql = DriverManager .getConnection( "jdbc:mysql://192.168.1.12:3306/hadoop?useUnicode=true&characterEncoding=GBK", "hive", "123456"); System.out.println(1111); } return conntomysql; } // 在完成所有操作之后,调用次方法关闭本次会话的连接 public static void closeHive() throws SQLException { if (conn != null) conn.close(); } public static void closemysql() throws SQLException { if (conntomysql != null) conntomysql.close(); } }
4.HiveUtil.java
package com.cstore.transToHive; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class HiveUtil { public static void createTable(String hiveql) throws SQLException // 创建表 { Connection con = getConnect.getHiveConn(); Statement stmt = con.createStatement(); ResultSet res = stmt.executeQuery(hiveql); } public static ResultSet queryHive(String hiveql) throws SQLException // 查询表 { Connection con = getConnect.getHiveConn(); Statement stmt = con.createStatement(); ResultSet res = stmt.executeQuery(hiveql); return res; } public static void loadDate(String hiveql) throws SQLException // 加载数据 { Connection con = getConnect.getHiveConn(); Statement stmt = con.createStatement(); ResultSet res = stmt.executeQuery(hiveql); } public static void hiveTomysql(ResultSet Hiveres) throws SQLException // 数据转存至mysql { Connection con = getConnect.getMysqlConn(); Statement stmt = con.createStatement(); while (Hiveres.next()) { String rdate = Hiveres.getString(1); String time = Hiveres.getString(2); String type = Hiveres.getString(3); String relateclass = Hiveres.getString(4); String information = Hiveres.getString(5) + Hiveres.getString(6) + Hiveres.getString(7);// 可以使用udaf实现 System.out.println(rdate + " " + time + " " + type + " " + relateclass + " " + information + " "); int i = stmt.executeUpdate("insert into hadooplog values(0,'" + rdate + "','" + time + "','" + type + "','" + relateclass + "','" + information + "')"); } } }
5.exeHiveQL.java
新建类,其中包含main方法,他是个驱动类,运行时需要两个参数,日志级别和日期
程序执行时:程序首先在Hive数据仓库中建立表,然后加载hadoop日志,过滤有用的日志信息后并转存到mysql数据库中
package com.cstore.transToHive; import java.sql.ResultSet; import java.sql.SQLException; public class exeHiveQL { public static void main(String[] args) throws SQLException { if (args.length < 2) { System.out.print("请输入你要查询的条件:日志级别 日志信息"); System.exit(1); } String type = args[0]; String date = args[1]; // 在Hive中创建表 HiveUtil.createTable("create table if not exists loginfo11 ( rdate String,time ARRAY<string>,type STRING,relateclass STRING,information1 STRING,information2 STRING,information3 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':'"); // 加载Hadoop日志文件,*表示加载所有的日志文件 HiveUtil.loadDate("load data local inpath '/usr/local/hadoop2/logs/*' overwrite into table loginfo11"); // 查询有用的信息,这里依据日期和日志级别过滤信息 ResultSet res1 = HiveUtil .queryHive("select rdate,time[0],type,relateclass,information1,information2,information3 from loginfo11 where type='ERROR' and rdate='2011-07-29' "); // 查询的信息经过变换后存如mysql中 HiveUtil.hiveTomysql(res1); // 最后关闭此次会话的hive连接 getConnect.closeHive(); // 关闭mysql连接 getConnect.closemysql(); } }
6.测试
运行程序前需要在装有Hive的机器上启动HiveServer服务并指定一个端口监听
hive --service hiveserver 50031
运行exeHiveQL.java,输入参数作为查询的条件查找用户所关注的信息,如查询2011年7月29日所有的ERROR信息,那么参数就是 ERROR 2011-07-29,运行后可以看到Hiveserver的控制台上输入了运行时的信息,程序执行完毕后去mysql的控制台,查看hadooplog表中的结果
7.分析总结
本次程序的实现其实mapreduce也能够做,因为Hive的底层调用的就是mapreduce,所以hive的效率没有mapreduce的高
mapreduce:效率高 编程复杂
hive :效率低 编程简单
(上文中的效率高或者效率低仅仅是mapreduce和hive之间相对来说的)
相关推荐
基于Hadoop网站流量日志数据分析系统 1、典型的离线流数据分析系统 2、技术分析 - Hadoop - nginx - flume - hive - mysql - springboot + mybatisplus+vcharts nginx + lua 日志文件埋点的 基于Hadoop网站流量...
针对传统分布式模型在海量日志并行处理时的可扩展性和并行程序编写困难的问题, 提出了基于Hive的Web海量搜索日志分析机制。利用HQL语言以及Hadoop分布式文件系统(HDFS)和MapReduce编程模式对海量搜索日志进行分析...
基于Hive的hadoop集群日志的分析及错误排解(eclipse上运行出现错误:Access denied for user 'hivenew'@'172.16.2.36' (using password: YES)) 设计思路:利用hive的方法将hadoop中的指定日志存放在hive表中,然后...
基于Hadoop/Hive的web日志分析系统的设计,为广大大数据爱好者提供更好的帮助,喜欢可以下载
hadoop 搜索引擎 用户行为分析 基于hadoop的搜索引擎用户行为分析,采用分布式文 件系统和并行计算模型支撑海量日志文件的处理
基于Hadoop网站流量日志数据分析系统项目源码+教程.zip网站流量日志数据分析系统 典型的离线流数据分析系统 技术分析 hadoop nginx flume hive sqoop mysql springboot+mybatisplus+vcharts 基于Hadoop网站流量日志...
基于Hadoop部署实践对网站日志分析 1. 项目概述 本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖、回帖。至此,我们通过Python网络爬虫手段进行数据...
本系统主要设计完成两件工作,一是搭建分布式的hadoop的集群环境,二是基于分布式的集群环境做日志分析。详细介绍参考:https://blog.csdn.net/newlw/article/details/127332767
05_复杂日志分析-需求分析 06_复杂日志分析-需求字段讲解及过滤 07_复杂日志分析-字段提取及临时表的创建 08_复杂日志分析-指标结果的分析实现 09_Hive中数据文件的存储格式介绍及对比 10_常见的压缩格式及MapReduce...
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的...
基于Hbase的网站日志分析系统(附带web展示页面) 基于Hbase的网站日志分析系统(附带web展示页面)基于Hbase的网站日志分析系统(附带web展示页面)
人工智能-hadoop
人工智能-hadoop
1、资源内容:taotao-weblog-analysis基于openresty kafka hadoop hive 离线网站日志点击流数据分 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程思路清晰、注释明细,都经过...
基于搜狗查询数据500w条使用MapReduce做数据清洗,hive做离线分析的项目,详细文档附数据连接,搜狗实验室的搜索数据下载后缺少了用户ID字段的数据,所以本分析采用的是完整的数据,大家可以放心下载,如果下载数据...
基于SQL-on-Hadoop构建网络日志分析平台,实现千亿级日志存储和高效、灵活查询。利用真实TB 级数据集对多种 Hadoop 列存储格式及压缩算法进行性能测试,并对比Hive和Impala引擎日志扫描及统计查询效率,选用Gzip压缩...
人工智能-hadoop
2:hive是基于hadoop的数据仓库工具,可以将结构化的数据文件映谢成一张表,并提供类SQL查询功能。 本质:将Hql转化成mpareduce 其基本执行过程: 数据仓库通过sql进行统计分析——–>将SQL语言中常用的操作...
第8章~第14章介绍Hadoop生态系统,包括支持MapReduce程序的单元测试和集成测试框架、Hadoop系统的监控和日志系统、Hive框架、Pig和Crunch框架、HCatalog框架、Hadoop日志流处理、HBase等。第15章~第17章介绍了数据...
基于Hive是采用了Hadoop的MapReduce作为分析执行引擎。