实践:使用 Apache Hadoop 处理日志

2019-03-28 13:30|来源: 网络

简介: 日志是任何计算系统中一个必不可少的部分,支持从审计到错误管理等功能。随着日志的发展和日志来源数量的不断增加(比如在云环境中),有必要提供一个可扩展的系统来高效处理日志。这篇实践将探讨如何在典型 Linux 系统上使用 Apache Hadoop 来处理日志。

日志形态千差万别,但随着应用程序和基础架构的发展,结果产生了大量对用户有用的分布式数据。从 Web 和邮件服务器到内核和引导日志,许多现代的服务器拥有丰富的信息集。大量的分布式数据是 Apache Hadoop 的完美应用,就像日志文件(按时间排序的结构化文本数据)一样。

您可以使用日志处理来提取各种信息。其中最常用的一种用法是提取错误,或是对某个系统中的一些事件(比如登录失败)的发生次数进行计数。您还可以提取某些类型的性能数据,比如每秒连接数或每秒处理的事务数。其他有用的信息包括 Web 日志中的站点访问量(减少)的提取(映射)和构造。这一分析除了支持检测文件访问统计之外,还支持对惟一用户访问的检测。

概述

关于本文通过练习开始工作之前,您可能想阅读以下文章:

使用 Linux 和 Hadoop 进行分布式计算 http://www.linuxidc.com/Linux/2008-12/17798.htm
用 Hadoop 进行分布式数据处理,第 1 部分:入门 http://www.linuxidc.com/Linux/2012-08/68177.htm
用 Hadoop 进行分布式数据处理,第 2 部分:进阶 http://www.linuxidc.com/Linux/2012-08/68178.htm
用 Hadoop 进行分布式数据处理,第 3 部分:应用程序开发 http://www.linuxidc.com/Linux/2012-08/68179.htm
使用 Apache Pig 处理数据 http://www.linuxidc.com/Linux/2012-08/68180.htm

这些练习将为您提供以下几方面的实践:

建立一个简单的 Hadoop 环境并运行它
与 Hadoop 文件系统 (HDFS) 进行交互
编写一个简单的 MapReduce 应用程序
编写一个过滤的 Apache Pig 查询
编写一个累计的 Pig 查询
先决条件

要从这些练习中获得最大的益处,您应当掌握 Linux® 的基本应用知识。对虚拟设备有一些了解也有助于建立一个简单的环境。

练习 1. 建立一个简单的 Hadoop 环境并运行它

要建立 Hadoop 环境并运行它,有两种方法。第一种是安装 Hadoop 软件,然后针对您的环境(最简单的情况是一个单节点实例,其中所有的守护程序都在单个节点上运行)对其进行配置。参见 用 Hadoop 进行分布式数据处理,第 1 部分:入门 http://www.linuxidc.com/Linux/2012-08/68177.htm
 以了解有关的详细信息。

第二种(也是较为简单的一种)方法是通过使用 Cloudera 的 Hadoop Demo VM(包含一个 Linux 映像和一个预配置的 Hadoop 实例)。Cloudera 虚拟机 (VM) 运行于 VMware、基于 Kernel 的虚拟机或 Virtualbox 之上。

选择一种方法,并完成安装。然后,完成以下任务:

  • 通过发出一个 HDFS ls 命令来验证 Hadoop 是否正在运行。

练习 2. 与 HDFS 进行交互

HDFS 是一种专用的文件系统,用来管理一个 Hadoop 集群内的数据和副本,并将它们分配给各个计算节点,以便高效处理它们。尽管 HDFS 是一种专用的文件系统,但它仍然可以实现许多典型的文件系统命令。要检索 Hadoop 的帮助信息,可发出 hadoop dfs 命令。请执行以下任务:

  • 在 HDFS 内创建一个测试子目录。
  • 使用 copyFromLocal 将一个文件从本地文件系统移动到 HDFS 子目录中。
  • 对于额外的练习,请使用 hadoop dfs 命令查看 HDFS 内的文件。

相关问答

更多
  • Error: java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSplit cannot be cast to org.apache.hadoop.mapred.FileSplit 包引入错误,mapreduce包下的类是新版API,mapred是旧版API,换成mapreduce包下的类就可以了
  • 感谢您试用HTrace! 对不起,版本问题现在是如此的痛苦。 使用cloudera的Hadoop CDH5.5发行版及更高版本配置HTrace更容易。 这里有一个很好的描述: http : //blog.cloudera.com/blog/2015/12/new-in-cloudera-labs-apache-htrace-incubating/如果你想坚持一个Apache发布源代码而不是供应商发布,请尝试使用Hadoop 3.0.0-alpha1。 http://hadoop.apache.org/rel ...
  • 您的名称节点处于安全模式: Name node is in safe mode. The ratio of reported blocks 0.0000 has not reached the threshold 0.9990 比率0.0000通常表示您的数据节点都没有联机,或者它们与名称节点之间存在连接问题。 建议您检查数据节点的日志 Your name node is in safe mode: Name node is in safe mode. The ratio of reported bloc ...
  • Sqoop的Cloudera发行版与Apache Sqoop版本相匹配。 不存在与绩效有关的重大问题。 然而,在CDH上运行Cloudera分发Sqoop是有好处的,因为你可以免费获得漂亮的包装和简单的安装。 Jarcec Cloudera distribution of Sqoop match the Apache Sqoop version. There shall be no major performance related issues. There is however benefit in r ...
  • 做了一个全新安装的hadoop并用同一个罐子运行工作,问题就消失了。 似乎是一个错误,而不是编程错误。 Did a fresh installation of hadoop and ran the job with the same jar, the problem disappeared. Seems to be a bug rather than programming errors.
  • datanode1的namespaceID与当前的namenode不匹配。也许你从另一个集群中复制了/ usr / local / hadoop / tmp / dfs / data目录。如果datanode1的数据不相关,你可以删除/ usr / local / hadoop datanode1的/ tmp / dfs / * the namespaceID of datanode1 do not match the current namenode's.Maybe you copied the /usr ...
  • 学习oozie的最好方法是下载发行版附带的示例tar文件并运行它们。 它有mapreduce,pig,流工作流程以及样本协调器xmls的示例。 首先运行正常的工作流程,然后在调试之后,转移到使用协调器运行工作流程,以便您可以逐步执行。 最后一个最佳实践是使工作流和协调器中的大多数变量可以通过component.properties文件进行配置和提供,这样您就不会经常触摸xml。 http://yahoo.github.com/oozie/releases/3.1.0/DG_Examples.html The ...
  • 实际的答案是将yarn.app.mapreduce.am.log.level设置为您所需的级别,但关键的是,它需要在提交时在Hadoop作业配置中进行设置。 它不能在集群上全局设置。 集群全局将始终默认为INFO ,因为它是硬编码的。 由于YARN将覆盖命令行上的日志级别值,因此单独使用container-log4j.properties将不起作用。 请参阅org.apache.hadoop.mapreduce.v2.util.MRApps的方法addLog4jSystemProperties以及与org. ...
  • 我能够使用版本1.1.2让Hadoop在NFS上运行。 它可能适用于其他版本,但我无法保证任何事情。 如果您有NFS文件系统,那么每个节点都应该有权访问文件系统。 fs.default.name告诉Hadoop要使用的文件系统URI,因此应该指向本地磁盘。 我假设你的NFS目录被挂载到/ nfs的每个节点。 在core-site.xml中,您应该定义: fs.default.name file:///
  • 我假设您已屏蔽并共享您的网址 hdfs://vikasXXX.XX.XX.XX:X000 我认为它无法通过名称识别您的机器。 尝试使用localhost并检查它是否有效。 hdfs://localhost:8020 I assume that you have masked and shared your URL hdfs://vikasXXX.XX.XX.XX:X000 I think it is not recognizing your machine by name. Try using localh ...