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编程模式对海量搜索日志进行分析...
4. 数据分析模块:基于Hive数据仓库,执行分析查询。这包括用户访问模式分析、页面浏览统计、异常访问检测等。Hive提供的HQL查询语句,使得这些复杂的分析任务变得简单高效。 5. 结果展示模块:将分析的结果以图表...
基于Hadoop网站流量日志数据分析系统项目源码+教程.zip网站流量日志数据分析系统 典型的离线流数据分析系统 技术分析 hadoop nginx flume hive sqoop mysql springboot+mybatisplus+vcharts 基于Hadoop网站流量日志...
1. **日志数据提取**:在 Eclipse 中创建一个 MapReduce 工程(HiveHadoopMysqlPro),用于处理日志分析任务。在开始之前,确保将 Hive 的库目录(lib)下的所有 JAR 包复制到 Hadoop 的 lib 目录下,以便 MapReduce...
【描述】:此系统设计的两个核心任务是构建一个分布式Hadoop集群以及利用这个集群进行日志分析。通过Hadoop,可以处理海量的电影数据,而Hive则作为一个基于Hadoop的数据仓库工具,提供了一种结构化数据的查询和分析...
【基于Hadoop豆瓣电影数据分析实验报告】 在大数据时代,对海量信息进行高效处理和分析是企业决策的关键。Hadoop作为一款强大的分布式计算框架,自2006年诞生以来,已经在多个领域展现了其卓越的数据处理能力。本...
【基于Hadoop的大数据日志分析实践】 在大数据领域,Hadoop是一个不可或缺的分布式计算框架,尤其在处理大规模数据时,其优势尤为显著。本文档将详细介绍如何利用Hadoop进行网站日志分析的实践过程,涵盖了从数据...
基于Hadoop的Web日志挖掘是指使用Hadoop大数据处理技术对Web日志进行挖掘和分析的过程。Web日志挖掘是指从Web日志中提取有价值的信息,以便更好地了解用户行为、优化网站性能和改进网站设计。 在基于Hadoop的Web...
《基于Hadoop的数据分析系统详解》 在当今大数据时代,数据的价值日益凸显,而有效处理海量数据的关键技术之一就是Hadoop。Hadoop是Apache软件基金会开发的一个开源框架,专门用于处理和存储大规模数据,尤其适合...
标题 "基于hadoop,hive,hbase的日志分析系统.zip" 涉及到的核心技术是大数据处理领域中的Hadoop、Hive和HBase。这三个工具在大数据生态系统中扮演着重要角色,尤其对于日志分析而言,它们提供了一种有效且可扩展的...
本项目“大数据——基于Hadoop的网站日志分析系统(附带Web展示页面)”聚焦于利用Hadoop生态工具对网站日志进行深度挖掘,并通过Web界面展示分析结果。以下是该项目涉及的关键技术点: 1. **Hadoop**:Hadoop是...
【标题】"taotao-weblog-analysis基于openresty kafka hadoop hive 日志点击流数据分析"涉及的关键技术点包括OpenResty、Kafka、Hadoop和Hive,这些都是大数据处理和分析领域的重要组件。 OpenResty是基于Nginx与...
【标题】:“2022毕业设计,基于 Hadoop 的游戏数据分析系统源码” 这个毕业设计项目主要聚焦于使用Hadoop框架开发一个游戏数据分析系统。Hadoop是Apache软件基金会的一个开源分布式计算平台,专为处理和存储大规模...
"基于Hadoop、Spark、FLUME、HIVE等大数据组件搭建的一个分布式集群环境下的电影推荐及日志分析平台"是一个旨在利用这些技术来解决实际业务问题的综合系统。这个平台主要用于电影推荐和日志分析,它展示了大数据技术...
Ashish Thusoo是Hive的主要开发者之一,他可能会详细介绍Hive如何帮助Facebook处理海量的日志数据,以及Hive如何与Facebook的数据基础设施集成,提供高效的数据分析能力。 Yahoo的“Hadoop by Hairong Kuang.ppt”...
在大数据处理领域,Hive是一个不可或缺的工具,它是一个基于Hadoop的数据仓库系统,用于处理和分析大规模数据集。Hive提供了SQL(HiveQL)接口,使得非Java背景的用户也能轻松地对存储在Hadoop分布式文件系统(HDFS...
《基于Hadoop的美团外卖数据分析》 在大数据时代,企业对数据的挖掘和分析变得尤为重要。美团外卖作为国内领先的在线外卖平台,积累了海量的订单、用户行为和商户信息等数据。利用这些数据,企业可以洞察市场趋势,...