本文将本地的hadoop日志,加载到Hive数据仓库中,再过滤日志中有用的日志信息转存到Mysql数据库里。
环境:hive-0.12.0 + Hadoop1.2.1
1、日志格式
2014-04-17 22:53:30,621 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* addToInvalidates: blk_4856124673669777083 to 127.0.0.1:50010 2014-04-17 22:53:30,621 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* addToInvalidates: blk_3952951948255939678 to 127.0.0.1:50010 2014-04-17 22:53:30,629 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* addToInvalidates: blk_-7659295115271387204 to 127.0.0.1:50010 2014-04-17 22:53:30,713 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* addToInvalidates: blk_1247712269990837159 to 127.0.0.1:50010 2014-04-17 22:53:30,713 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* addToInvalidates: blk_3041853621376201540 to 127.0.0.1:50010 2014-04-17 22:53:30,713 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* addToInvalidates: blk_5165085626508844330 to 127.0.0.1:50010 2014-04-17 22:53:30,713 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* addToInvalidates: blk_5058515618805863349 to 127.0.0.1:50010
日志的格式大概是这样子的,这里采用空格方式对其分隔,组织成多列,不过后面的提示信息不好处理,暂时以3列来存储。
表结构定义:
- //建立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 ':'");
2、代码:
GetConnect.Java 类负责建立与Hive、Mysql的连接与关闭;
- //package com.my.hivetest;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class getConnect {
- private static Connection conn = null;
- private static Connection conntomysql = null;
- private getConnect() {
- }
- public static Connection getHiveConn() throws SQLException {
- if (conn == null)
- {
- try {
- Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.exit(1);
- }
- conn = DriverManager.getConnection(
- "jdbc:hive://localhost:50031/default", "", "");
- System.out.println(1111);
- }
- return conn;
- }
- public static Connection getMysqlConn() throws SQLException {
- if (conntomysql == null)
- {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.exit(1);
- }
- conntomysql = DriverManager.getConnection(
- "jdbc:mysql://localhost:3306/hadoop?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=GBK",
- "root", "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();
- }
- }
hiveUtil.java类,用来创建Hive表、加载数据、依据条件查询数据。以及将数据存到mysql中的方法。
- //package com.my.hivetest;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class HiveUtil {
- //创建hive表
- public static void createTable(String hiveql) throws SQLException{
- Connection con=getConnect.getHiveConn();
- Statement stmt = con.createStatement();
- ResultSet res = stmt.executeQuery(hiveql);
- }
- //查询hive表
- 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);
- }
- //转存到mysql中
- public static void hiveTomysql(ResultSet Hiveres) throws SQLException{
- 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);//信息组合
- System.out.println(rdate+" "+time+" "+type+" "+relateclass+" "+information+" ");
- int i = stmt.executeUpdate(
- "insert into hadooplog values(0,'"+rdate+"','"+time+"','"+type+"','"+relateclass+"','"+information+"')");
- }
- }
- }
exeHiveQL.java类,执行类,实现main函数。
- //package com.my.hivetest;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- 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 '/root/hadoop-1.2.1/logs/*.log.*' overwrite into table loginfo11");
- //查询有用的信息
- //test code
- String str = "select rdate,time[0],type,relateclass,information1,information2,information3 from loginfo11 where type='"
- + type + "' and rdate='" + date + "' ";
- System.out.println(str + "----test");
- ResultSet res1 = HiveUtil.queryHive(
- "select rdate,time[0],type,relateclass,information1,
- information2,information3 from loginfo11 where type='"+ type + "' and rdate='" + date + "' ");
- //查询结果转存到mysql中
- HiveUtil.hiveTomysql(res1);
- //关闭hive连接
- getConnect.closeHive();
- //关闭mysql连接
- getConnect.closemysql();
- }
- }
在运行之前 需要开启hive server服务,这里端口号 50031 要与GetConnect.Java 类的一致。
# bin/hive --service hiveserver -p 50031
然后在eclipse中运行起来,设置输入参数
ERROR 2014-04-14
不过在运行之前还需要导入各种包:
hive-jdbc-0.12.0.jar
hive-metastore-0.12.0.jar
mysql-connector-java-5.1.10.jar(mysql的jdbc驱动,可到http://dev.mysql.com/downloads/connector/j/下载)
以及hive/lib下所有的包。。。(为图省事全导入了。。。)
还有一点就是,要预先在mysql中建立数据库hadoop,并且在里面建立表hadooplog。表的格式与代码中的保持一致即可。。
源代码:https://github.com/y521263/Hadoop_in_Action
参考资料:
Apache Hive TM
http://blog.csdn.net/y521263/article/details/23969745
相关推荐
Hadoop 2.4 是一个稳定且广泛采用的分布式存储和计算框架,而 Hive 则是基于 Hadoop 的数据仓库工具,用于处理和管理大规模数据。但在这个特定的版本中,Spark 并没有集成 Hive,使得它更适合那些不需要 Hive 支持,...
hive2.1.0 --- spark1.6.0 hive on spark的spark包,这个是已经经过./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.4,parquet-provided"编译后的了spark-1.6.0-bin-...
本压缩包“spark--bin-hadoop3-without-hive.tgz”提供了Spark二进制版本,针对Hadoop 3.1.3进行了编译和打包,这意味着它已经与Hadoop 3.x兼容,但不包含Hive组件。在CentOS 8操作系统上,这个版本的Spark已经被...
基于Hadoop网站流量日志数据分析系统 1、典型的离线流数据分析系统 2、技术分析 - Hadoop - nginx - flume - hive - mysql - springboot + mybatisplus+vcharts nginx + lua 日志文件埋点的 基于Hadoop网站流量...
"without-hive"表明该版本不包含Hive组件,Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。如果你的项目不需要Hive的功能,这个版本更适合。 6. **部署与...
Hive 是一个基于 Hadoop 的数据仓库工具,用于数据ETL(提取、转换、加载)以及提供SQL接口进行数据分析。尽管如此,Spark 仍然可以通过 JDBC 或 Thrift 服务器连接到 Hive Metastore,从而访问 Hive 表。如果你的...
elasticsearch-hadoop-hive-2.3.4.jar包下载
Spark 提供了高效的数据处理能力,而 Hive 则提供了基于 SQL 的数据查询和管理功能。然而,有时我们可能需要在不依赖 Hive JAR 包的情况下,使用 Spark 处理 Hive 上的数据,这就是"spark-2.3.0-bin-hadoop2-without...
hadoop2.6.3-spark1.5.2-hbase-1.1.2-hive-1.2.1-zookeeper-3.4.6安装指南
spark2.3.0 without hive 编译版本,用于Hive on ..../dev/make-distribution.sh --name "hadoop277-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided,orc-provided" -Dhadoop.version=2.7.7
基于Hadoop-2.7,手动源码编译的Spark-2.4,支持hive,
Hadoop-2.8.0-HA-Hive安装部署与HQL07.hive.mp4
hive 加载mongdb数据所需的三个包mongo-hadoop-core-2.0.2.jar mongo-hadoop-hive-2.0.0.jar mongo-java-driver-3.6.1.jar
综上所述,“spark-3.2.4-bin-hadoop3.2-scala2.13”安装包是构建和运行Spark应用程序的基础,涵盖了大数据处理、流处理、机器学习等多个领域,为开发者提供了高效、灵活的数据处理平台。通过深入理解和熟练运用,...
Hive是基于Hadoop的数据仓库工具,用于将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,适合大规模数据集的离线分析。Hive 1.2是Hive的一个稳定版本,它增强了性能和稳定性,支持更多的SQL特性,并改进了...
3. **Hadoop 2.7兼容性**:Hadoop是大数据存储和处理的基础平台,Flink的Hadoop 2.7兼容性意味着它可以无缝集成到Hadoop生态系统中,利用HDFS进行数据存储,并能与其他Hadoop组件(如Hive、Pig等)协同工作。...
mongo-hadoop-core-2.0.0.jar x x s s sa a a s dd . d d
Hadoop-2.8.0-HA-Hive安装部署与HQL09.hive的基本语法--建表语法.mp4
Hadoop-2.8.0-HA-Hive安装部署与HQL11.hive的基本语法--CTAS建表.mp4