1). 日志格式分析
首先分析 Hadoop 的日志格式, 日志是一行一条, 日志格式可以依次描述为:日期、时间、级别、相关类和提示信息。如下所示:
2014-01-07 00:31:25,393 INFO org.apache.hadoop.mapred.JobTracker: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down JobTracker at hadoop1/192.168.91.101
************************************************************/
2014-01-07 00:33:42,425 INFO org.apache.hadoop.mapred.JobTracker: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting JobTracker
STARTUP_MSG: host = hadoop1/192.168.91.101
STARTUP_MSG: args = []
STARTUP_MSG: version = 1.1.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782; compiled by 'hortonfo' on Thu Jan 31 02:03:24 UTC 2013
************************************************************/
2014-01-07 00:33:43,305 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2014-01-07 00:33:43,358 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2014-01-07 00:33:43,359 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2014-01-07 00:33:43,359 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: JobTracker metrics system started
2014-01-07 00:33:43,562 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source QueueMetrics,q=default registered.
2014-01-07 00:33:44,118 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2014-01-07 00:33:44,118 INFO org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSecretManager: Updating the current master key for generating delegation tokens
2014-01-07 00:33:44,119 INFO org.apache.hadoop.mapred.JobTracker: Scheduler configured with (memSizeForMapSlotOnJT, memSizeForReduceSlotOnJT, limitMaxMemForMapTasks, limitMaxMemForReduceTasks) (-1, -1, -1, -1)
2014-01-07 00:33:44,120 INFO org.apache.hadoop.util.HostsFileReader: Refreshing hosts (include/exclude) list
2014-01-07 00:33:44,125 INFO org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSecretManager: Starting expired delegation token remover thread, tokenRemoverScanInterval=60 min(s)
2014-01-07 00:33:44,125 INFO org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSecretManager: Updating the current master key for generating delegation tokens
2014-01-07 00:33:44,126 INFO org.apache.hadoop.mapred.JobTracker: Starting jobtracker with owner as root
2014-01-07 00:33:44,187 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source RpcDetailedActivityForPort9001 registered.
2014-01-07 00:33:44,187 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source RpcActivityForPort9001 registered.
2014-01-07 00:33:44,188 INFO org.apache.hadoop.ipc.Server: Starting SocketReader
2014-01-07 00:33:44,490 INFO org.mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
2014-01-07 00:33:44,805 INFO org.apache.hadoop.http.HttpServer: Added global filtersafety (class=org.apache.hadoop.http.HttpServer$QuotingInputFilter)
2014-01-07 00:33:44,825 INFO org.apache.hadoop.http.HttpServer: Port returned by webServer.getConnectors()[0].getLocalPort() before open() is -1. Opening the listener
这只是部分日志。
2). 程序设计
本程序是在个人机器用 Eclipse 开发,该程序连接 Hadoop 集群,处理完的结果存储在MySQL 服务器上。下面是程序开发示例图。
MySQL 数据库的存储信息的表“hadooplog”的 SQL 语句如下:
drop table if exists hadooplog; create table hadooplog( id int(11) not null auto_increment, rdate varchar(50) null, time varchar(50) default null, type varchar(50) default null, relateclass tinytext default null, information longtext default null, primary key (id) ) engine=innodb default charset=utf8;
操作如下:进入mysql 直接执行sql语句就行,创建一个hadooplog表
3). 程序代码
package com.wzl.hive; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * 该类的主要功能是负责建立与 Hive 和 MySQL 的连接, 由于每个连接的开销比较大, 所以此类的设计采用设计模式中的单例模式。 */ class DBHelper { private static Connection connToHive = null; private static Connection connToMySQL = null; private DBHelper() { } // 获得与 Hive 连接,如果连接已经初始化,则直接返回 public static Connection getHiveConn() throws SQLException { if (connToHive == null) { try { Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); } catch (ClassNotFoundException err) { err.printStackTrace(); System.exit(1); } connToHive = DriverManager.getConnection("jdbc:hive://192.168.91.101:10000/default", "hive", ""); } return connToHive; } // 获得与 MySQL 连接 public static Connection getMySQLConn() throws SQLException { if (connToMySQL == null) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException err) { err.printStackTrace(); System.exit(1); } connToMySQL = DriverManager.getConnection("jdbc:mysql://192.168.91.101:3306/hive?useUnicode=true&characterEncoding=UTF8", "root", "root"); //编码不要写成UTF-8 } return connToMySQL; } public static void closeHiveConn() throws SQLException { if (connToHive != null) { connToHive.close(); } } public static void closeMySQLConn() throws SQLException { if (connToMySQL != null) { connToMySQL.close(); } } public static void main(String[] args) throws SQLException { System.out.println(getMySQLConn()); closeMySQLConn(); } }
package com.wzl.hive; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * * 针对 Hive 的工具类 */ class HiveUtil { // 创建表 public static void createTable(String sql) throws SQLException { Connection conn = DBHelper.getHiveConn(); Statement stmt = conn.createStatement(); ResultSet res = stmt.executeQuery(sql); } // 依据条件查询数据 public static ResultSet queryData(String sql) throws SQLException { Connection conn = DBHelper.getHiveConn(); Statement stmt = conn.createStatement(); ResultSet res = stmt.executeQuery(sql); return res; } // 加载数据 public static void loadData(String sql) throws SQLException { Connection conn = DBHelper.getHiveConn(); Statement stmt = conn.createStatement(); ResultSet res = stmt.executeQuery(sql); } // 把数据存储到 MySQL 中 public static void hiveToMySQL(ResultSet res) throws SQLException { Connection conn = DBHelper.getMySQLConn(); Statement stmt = conn.createStatement(); while (res.next()) { String rdate = res.getString(1); String time = res.getString(2); String type = res.getString(3); String relateclass = res.getString(4); String information = res.getString(5) + res.getString(6) + res.getString(7); StringBuffer sql = new StringBuffer(); sql.append("insert into hadooplog values(0,'"); sql.append(rdate + "','"); sql.append(time + "','"); sql.append(type + "','"); sql.append(relateclass + "','"); sql.append(information + "')"); System.out.println(sql.toString()); int i = stmt.executeUpdate(sql.toString()); } } }
package com.wzl.hive; import java.sql.ResultSet; import java.sql.SQLException; public class AnalyszeHadoopLog { public static void main(String[] args) throws SQLException { StringBuffer sql = new StringBuffer(); // 第一步:在 Hive 中创建表 sql.append("create table if not exists loginfo( "); sql.append("rdate string, "); sql.append("time array<string>, "); sql.append("type string, "); sql.append("relateclass string, "); sql.append("information1 string, "); sql.append("information2 string, "); sql.append("information3 string) "); sql.append("row format delimited fields terminated by ' ' "); sql.append("collection items terminated by ',' "); sql.append("map keys terminated by ':'"); System.out.println(sql); HiveUtil.createTable(sql.toString()); // 第二步:加载 Hadoop 日志文件 sql.delete(0, sql.length()); sql.append("load data local inpath "); sql.append("'/usr/local/hadoop/logs/hadoop-root-jobtracker-hadoop1.log'"); sql.append(" overwrite into table loginfo"); System.out.println(sql); HiveUtil.loadData(sql.toString()); // 第三步:查询有用信息 sql.delete(0, sql.length()); sql.append("select rdate,time[0],type,relateclass,"); sql.append("information1,information2,information3 "); sql.append("from loginfo where type='INFO'"); System.out.println(sql); ResultSet res = HiveUtil.queryData(sql.toString()); // 第四步:查出的信息经过变换后保存到 MySQL 中 HiveUtil.hiveToMySQL(res); // 第五步:关闭 Hive 连接 DBHelper.closeHiveConn(); // 第六步:关闭 MySQL 连接 DBHelper.closeMySQLConn(); } }
4). 运行结果
在执行之前要注意的问题:
- 在运行前必须保证hive远端服务端口是开的 执行命令:nohup hive --service hiveserver & 如果没有执行这句命令常出现这个错误:Could not establish connection to 192.168.91.101:10000/default: java.net.ConnectException: Connection refused: connect
- mysql已经建立了hadooplog表
- mysql数据库允许本机连接数据库执行命令:grant all privileges on *.* to root@'%' identified by 'root'; 这句意思是允许任何的ip都能访问mysql数据库。如果如果没有执行这句命令常出现这个错误:java连接linux中mysql出现:Access denied for user 'root'@'192.168.91.1' (using password: YES)
mysql> use hive; mysql> show tables; mysql> select * from hadooplog;
5). 经验总结
在示例中同时对 Hive 的数据仓库库和 MySQL 数据库进行操作,虽然都是使用了 JDBC接口,但是一些地方还是有差异的,这个实战示例能比较好地体现 Hive 与关系型数据库的异同。
如果我们直接采用 MapReduce 来做,效率会比使用 Hive 高,因为 Hive 的底层就是调用了 MapReduce,但是程序的复杂度和编码量都会大大增加,特别是对于不熟悉 MapReduce编程的开发人员,这是一个棘手问题。Hive 在这两种方案中找到了平衡,不仅处理效率较高,而且实现起来也相对简单,给传统关系型数据库编码人员带来了便利,这就是目前 Hive被许多商业组织所采用的原因。
相关推荐
例如,可能有一个实例是使用Hadoop处理日志文件,分析用户行为;或者使用MapReduce计算大规模数据集的统计指标,如平均值、最大值和最小值。 5. **Hadoop生态系统**:Hadoop并不是孤立的,它有一个丰富的生态系统,...
5. **EMC的统一数据存储和分析平台**:EMC利用Hadoop建立了一个综合性的数据存储和分析解决方案,帮助企业更好地管理和分析数据。 #### 四、结语 Hadoop作为大数据领域的关键技术之一,为企业提供了强大的数据处理...
5. 日志处理:收集和分析系统及应用日志,监控系统性能,及时发现和解决问题。 四、Hadoop实战——《Hadoop实战》 《Hadoop实战》这本书提供了丰富的实践教程,涵盖从基础概念到高级技术,包括集群搭建、数据处理...
在大数据处理领域,Hadoop 是一个至关...通过实际操作,我们可以深入了解大数据处理的流程,并学习如何利用 Hadoop 解决实际问题。在人工智能的背景下,这种能力尤为重要,因为高效的数据处理是许多 AI 应用的基础。
本文档详细介绍了在Ubuntu系统上搭建Hadoop平台的步骤,并通过一个简单的WordCount实例展示了其运行过程。 首先,搭建Hadoop平台需要满足一定的硬件环境,包括足够的内存、处理器和磁盘空间。在Ubuntu系统上,我们...
在AI领域,Hadoop通过其强大的数据处理能力,帮助解决机器学习和深度学习中的大规模数据问题。例如: 1. 数据预处理:Hadoop可以高效地清洗、整合和转换海量数据,为后续的模型训练提供准备。 2. 训练模型:利用...
总之,“Hadoop核心技术”涵盖了从理论到实践的全面知识,从理解Hadoop的基本架构到掌握其优化配置,再到运用Hadoop解决实际问题,每一个环节都是大数据处理中不可或缺的部分。通过对Hadoop的学习和应用,我们可以...
- 可以通过检查Hadoop的日志配置文件,调整日志输出策略来解决此类问题。 3. **调试工具使用不当**: - 在使用Hadoop Web界面查看任务日志时,如果选择不当的查看方式也可能导致混淆。 - 确保正确选择查看map和...
学习如何阅读和理解Hadoop的日志文件对于解决这些问题非常有帮助。 通过这个高清图解教程,你将能够亲手实践每一个步骤,深入了解Hadoop的分布式架构和工作原理。记得在实际操作中,耐心和细心是成功的关键。如果你...
最后一课将通过具体的应用场景,如日志分析、推荐系统等,演示如何利用Hadoop解决实际问题。通过实例,学员可以更直观地理解和应用所学知识。 通过这套官方教案,无论是对Hadoop感兴趣的初学者还是寻求深化理解的...
在配置指导方面,书中会提供详尽的步骤和实例,帮助读者在实际环境中安装、配置和管理Hadoop集群。这包括硬件需求、网络配置、安全设置以及性能调优等方面。同时,也会介绍如何使用Hadoop与其他工具(如Pig、Spark、...
8. **Hadoop应用实例**:通过具体的案例,如网页日志分析、推荐系统等,演示如何使用Hadoop解决实际问题,让你更好地理解和掌握Hadoop的实际应用。 9. **Hadoop的高级主题**:包括Hadoop的安全性、性能调优、容错与...
1. **Hadoop环境搭建**:源代码可能包含如何在本地或虚拟机上安装和配置Hadoop的详细步骤,包括配置Hadoop的环境变量、修改Hadoop配置文件(如hdfs-site.xml和mapred-site.xml)等。 2. **HDFS操作**:源码可能包含...
4. Hadoop实战:通过实际案例分析,演示如何使用Hadoop解决实际问题,例如日志分析、数据挖掘等。 在【3.代码.zip】中,可能包含了一系列示例代码,用于辅助学习者实践Hadoop编程。这些代码可能涵盖了以下方面: 1....
2. **运行和调试**:在本地或集群环境中运行代码,观察其执行过程和输出,通过日志分析可能出现的问题。 3. **修改和优化**:尝试修改代码,如改变分区策略、优化Mapper和Reducer的实现,以提升性能。 4. **扩展应用...
1. "hadoop安装实例(原创最终版).doc":这可能是一个详细的Hadoop安装步骤文档,包括了从下载源码到编译、安装、配置的全过程,可能还包含了遇到问题时的解决方案。 2. "细细品味Hadoop_Hadoop集群(第1期)_...
【描述】提到的“开发商业实例进行Hadoop的使用,开发分析讲解”意味着本资料可能包含具体的项目实施步骤、技术选型考量以及数据分析方法。通过视频教程和学习大纲,学习者可以系统地了解如何将Hadoop技术应用于实际...
8. **数据处理实践**:通过实例演示如何使用Hadoop处理数据,如使用MapReduce编写简单的Java程序,或者使用Hive和Pig进行数据查询和分析。 9. **安全性与高可用性**:了解Hadoop的安全机制,如Kerberos认证,以及...
通过实例代码,读者可以掌握如何处理各种类型的数据和计算问题。 5. **HDFS操作**:Hadoop实战中包含如何使用HDFS命令进行文件操作,如上传、下载、查看文件属性等。同时,还会讨论HDFS的副本策略和故障恢复机制。 ...