网站首页  词典首页

请输入您要查询的论文:

 

标题 基于Mahout框架的Hadoop平台作业日志分析平台设计与实现
范文

    曹政

    

    

    

    摘要:随着Hadoop的流行与Hadoop Yarn的出现,集群的规模越来越大。在Hadoop生态圈中对集群运行状态的开源实现已经很成熟,但是尚未有对一个对Hadoop作业的运行趋势进行统计分析的平台。本文介绍了一个面向Hadoop Yarn的作业资源统计分析平台,面向集群管理员与普通用户,以时间、用户双维度对作业进行统计分析,得出一个Hadoop作业运行的标准。

    关键词:关键词;数据分析;Hadoop;Yarn;作业分析;机器学习;Mahout

    中图分类号:TP399

    文献标识码:A

    DOI: 10.3969/j.issn.1003-6970.2015.11.012

    0 引言

    由Google公司于2004年提出的MapReduce并行计算框架目前被广泛应用于解决大规模数据处理问题。Hadoop是Apache基金会所开发的分布式系统基础架构,是Google的MapReduce编程模型的开源实习。由于Hadoop生态圈的日渐成熟,Hadoop逐渐成为许多互联网公司基础计算平台的一个核心部分。本系统在实现一个面向Hadoop生态圈的一个增强的监控分析平台。

    MapReduce拥有诸多良好特性,如负载平衡、高可扩展性以及容错等。MapReduce是当前工业界和学术界最有效的大规模数据处理问题并行解决方案之一。但由于Hadoop编程的可控性与编程人员的参差不齐,在Hadoop集群的使用过程中经常发生难以预料的错误。Hadoop日志是用户定位问题的最重要渠道,Hadoop集群也专门配置了History Server来让开发人员使用以了解其提交的作业执行情况,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。但对较长期的日志展示分析效果欠佳,集群管理人员和开发人员难以了解整个集群的指标聚合指标。

    本系统旨在基于Hadoop集群记录的作业运行日志和配置信息,统计作业在时间和用户两个维度上的运行指标,并针对一个具体作业,分析作业内任务的执行情况,进而为作业优化提供数据参考。目前笔者使用的线上集群规模为500台主机,内存为32TB,日均JOB数为两万左右。传统的作业分析软件如集群监控软件:Nigos、Ganglia、Flume等已无法满足监控需求,普通用户与集群管理员都迫切需要一个任务分析平台。

    1 hadoop生态圈相关简介

    Hadoop是一个集成了了分布式文件系统HDFS和大规模并行计算模型MapReduce的开源框架。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。在Hadoop的生态圈中,一系列的为了处理超过单机尺度的数据处理的框架因此诞生。本文主要涉及了Yam (MRv2)、Mahout、HDFs、Hive、Spark等。

    1.1 MapReduce-Hadoop的核心

    Google的网络搜索引擎在得益于算法发挥作用的同时,MapReduce在后台发挥了极大的作用。MapReduce框架成为当今大数据处理背后的最具影响力的“发动机”。除了Hadoop,你还会在MapReduce上发现MPP (Sybase IQ推出了列示数据库)和NoSQL(如Vertica和MongoDB)。

    MapReduce的重要创新是当处理一个大数据集查询时会将其任务分解并在运行的多个节点中处理。当数据量很大时就无法在一台服务器上解决问题,此时分布式计算优势就体现出来。将这种技术与Linux服务器结合可获得性价比极高的替代大规模计算阵列的方法。Yahoo在2006年看到了Hadoop未来的潜力,并邀请Hadoop创始人Doug Cutting着手发展Hadoop技术,在2008年Hadoop已经形成一定的规模。Hadoop项目再从初期发展的成熟的过程中同时吸纳了一些其他的组件,以便进一步提高自身的易用性和功能。

    1.2 HDFS和MapReduce

    对于分布式计算,每个服务器必须具备对数据的访问能力,是HDFS(Hadoop Distributed File System)所起到的作用。HDFS与MapReduce的结合是强大的。在处理大数据的过程中,当Hadoop集群中的服务器出现错误时,整个计算过程并不会终止。同时HFDS可保障在整个集群中发生故障错误时的数据冗余。当计算完成时将结果写入HFDS的一个节点之中。HDFS对存储的数据格式并无苛刻的要求,数据可以是非结构化或其它类别。相反关系数据库在存储数据之前需要将数据结构化并定义架构。

    开发人员编写代码责任是使数据有意义。HadoopMapReduce级的编程利用Java APIs,并可手动加载数据文件到HDFS之中。

    1.3 Pig和Hive

    对于开发人员,直接使用Java APIs可能是乏味或容易出错的,同时也限制了Java程序员在Hadoop上编程的运用灵活性。于是Hadoop提供了两个解决方案,使得Hadoop编程变得更加容易。

    Pig是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。

    Hive在Hadoop中扮演数据仓库的角色。Hive添加数据的结构在HDFS (hive superimposes structureon data in HDFS),并允许使用类似于SQL语法进行数据查询。与Pig一样,Hive的核心功能是可扩展的。

    Pig和Hive总是令人困惑的。Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。正因为如此,Pig仍然是吸引大量的软件开发人员。

    1.4 Hadoop Yarn

    Apache Hadoop YARN (Yet Another ResourceNegotiator,另一种资源协调者)是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。YARN最初是为了修复MapReduce实现里的明显不足,并对可伸缩性、可靠性和集群利用率进行了提升。

    本文采用的是Hadoop 2.20,采用Yarn作为研究框架因为其出色的资源管理与良好的对接其他集群框架,Hive与Spark的资源都由其进行分配(Spark onYarn、Hive on Yarn)。

    1.5 Hadoop日志系统

    Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录。可以在相应History Server的19888端口上打开历史服务器的WEB UI界面。可以查看已经运行完的作业情况。

    并且Hadoop有众多的开源日志系统:Facebook的scribe、Apache的Chukwa、Linkedln的Kafka、Cloudera的Flume。其旨在构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统:并具有高可扩展性。

    1.6 Mahout框架

    Mahout是Apache Software Foundation (ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。

    通过使用Apache Hadoop库,Mahout可以有效地扩展到云中。Mahout支持一些集群算法实现(都是使用Map-Reduce编写的),它们都有一组各自的目标和标准:

    Canopy:一种快速集群算法,通常用于为其他集群算法创建初始种子。

    k-Means(以及模糊k-Means):根据项目与之前迭代的质心(或中心)之间的距离将项目添加到k集群中。

    Mean-Shift:无需任何关于集群数量的推理知识的算法,它可以生成任意形状的集群。

    Dirichlet:借助基于多种概率模型的集群,它不需要提前执行特定的集群视图。

    2 系统设计

    2.1 系统架构

    本系统旨在基于作业的运行日志和配置信息,在时间和用户维度上统计分析作业的多种运行指标。作业的日志和配置数据从HDFS到HBase的同步,主要使用增量同步的方法实现,由于系统所有的统计分析指标(如某小时某个用户提交的作业总数等)都以小时为最小统计分析单位,因此数据同步单元也只需每隔一个小时同步一次数据,将这一小时内最新的作业日志和配置信息格式化后装载HBase。在Python中,Snakebite库提供了优秀的HDFS文件读写能力,其基于RPC访问Hadoop进行文件的读写,且方便易用,因此系统使用Snakebite完成作业日志和配置文件的读取操作。

    图1中描述了本系统的整体架构,考虑到日志数据的快速增长以及快速查询的需求,原始的作业日志和配置信息保存在HDFS,通过系统提供的数据同步单元将作业的日志和配置信息结构化后保存到HBase中,作业调度单元周期性地检查HBase,并将HBase中最新的作业信息使用Hive或者直接利用HBase Shell进行分析统计,最终将完成统计分析的数据保存在MySQL,以提供数据查询API访问。

    HBase能够提供海量数据的存储设施,其支持列扩充,本系统涉及的大量分析统计工作,绝大部分是对各项指标的汇总操作,HBase足以提供这样的能力。此外,HBase也可以与Hive结合使用,以增强HBase Shell的统计分析能力。

    2.2 Hadoop作业日志系统概述

    Hadoop集群记录的作业运行日志在“mapreduce.jobhistory.done-dir”中配置,其内容保存了作业运行过程中触发的所有事件,如JOB_SUBMITTED、JOBjNITED、TASK_STARTED、MAP_ATTEMPT_STARTED、MAP_ATTEMPT_FAILED、MAP_ATTEM PT_KILLED、MAP_ATTEMPT_FNISHED、TASK_FINISHED、TASK FAILED、REDUCE_ATTEMPT_FAILED、REDUCE___ATTEMPT_KILLED、REDUCE_ATTEMPT_FINISHED、JOB_FAILED、JOB_KILLED、JOB_FINISHED等等,每一个事件包含若干属性,如JOB_SUBMITTED就包含jobid、jobName、userName和submitTime等。

    在Hadoop作业中存在以下三个概念作业(Job)、任务(Task)和Attempt,一个作业通常包含多个Map或者Reduce任务,一个任务在正常情况下只通过一次Attempt完成执行,如果该Attempt执行失败,则再次启动一个Attempt尝试执行。在集群作业运行日志中,Attempt、任务和作业都包含一个关键的运行统计指标Counter。Attempt的Counter统计该Attempt执行的资源消耗情况,任务的Counter卷积该任务包含的所有的Attempt的Counter,同理,作业的Counter汇总该作业包含的所有的任务的Counter。

    本系统中,只关心作业和任务两个级别的Counter。一个Map任务的Counter包含以下三种类型统计数据:文件系统、Map任务和FileInputFormat。一个Reduce任务类似地也包含三种类型的统计数据:文件系统、Reduce任务和FileOutputFormat。一个作业的Counter除文件系统、任务(Map和Reduce指标全集)、InputFormat和OutputFormat外,还包括作业统计数据。

    一个具体的作业运行日志,不一定涉及相关Counter的所有统计指标,上表是各Counter所包含所有统计指标的一个展示。除作业和任务的Counter、基本信息等参与分析统计外,还需要部分作业配置信息。如:dfs.datanode.ipc.address、file.blocksize、mapreduce.input.fileinputformat.inputdir等。

    2.3 基于Mahout的K-means算法

    K-means算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。k个初始类聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机的选取任意k个对象作为初始聚类的中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个簇中心的距离将每个对象重新赋给最近的簇。当考察完所有数据对象后,一次迭代运算完成,新的聚类中心被计算出来。如果在一次迭代前后,J的值没有发生变化,说明算法已经收敛。

    算法过程如下:

    1)从N个文档随机选取K个文档作为质心

    2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类

    3)重新计算已经得到的各个类的质心

    4)迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束

    具体如下:

    输入:k,data[n]:

    (1)选择k个初始中心点,例如c[O]=data[0],…c[k-l]=data[k-1];

    (2)对于data[0]…data[n],分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i;

    (3)对于所有标记为i点,重新计算c[i]={所有标记为i的data[j]之和}/标记为i的个数;

    (4)重复(2)(3),直到所有c[i]值的变化小于给定阈值。

    K-MEANS算法的工作原理及流程

    K-MEANS算法

    输入:聚类个数k,以及包含n个数据对象的数据库。

    输出:满足方差最小标准的k个聚类。

    处理流程

    (1)从n个数据对象任意选择k个对象作为初始聚类中心;

    (2)根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离:并根据最小距离重新对相应对象进行划分;

    (3)重新计算每个(有变化)聚类的均值(中心对象)

    (4)循环(2)到(3)直到每个聚类不再发生变化为止

    k-means算法接受输入量k;然后将n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。

    工作过程k-means算法的工作过程

    说明如下:首先从n个数据对象任意选择k个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数。k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

    Mahout实现聚类算法kmeans

    参数input指定待聚类的所有数据点,clusters指定初始聚类中心如果指定参数k,由org.apache.mahout.clustering.kmeans.RandomS eedGenerator.buildRandom通过org.apache.hadoop.fs直接从input指定文件中随机读取k个点放入clusters中。

    根据原数据点和上一次迭代(或初始聚类)的聚类中心计算本次迭代的聚类中心,输出到clusters-N目录下。该过程由org.apache.mahout.clustering.kmeans下的KMeansMapper\ KMeansCombiner\KMeansReducer\KMeansDriver实现KMeansMapper:在configure中初始化mapper时读入上一次迭代产生或初始聚类中心(每个mapper都读入所有的聚类中心);map方法对输入的每个点,计算距离其最近的类,并加入其中输出key为该点所属聚类ID,value为KMeanslnfo实例,包含点的个数和各分量的累加和KMeansCombmer:本地累加KMeansMapper输出的同一聚类ID下的点个数和各分量的和KMeansReducer:累加同一聚类ID下的点个数和各分量的和,求本次迭代的聚类中心;并根据输入Delta判断该聚类是否已收敛:上一次迭代聚类中心与本次迭代聚类中心距离

    参数调整:

    manhout Kmeans聚类有两个重要参数:收敛Delto和最大迭代次数,Delta值越小,表示收敛条件越高,因此最终收敛的聚类数可能会降低,而最大迭代次数可通过观察每次迭代后收敛聚类数决定,当收敛聚类数几乎不再变化或震荡时可停止迭代了。

    K-Means算法是明确的聚类算法,很适合多维度的聚类分析,对Job的聚类效果良好。

    2.5 Job统计分析模块

    本系统是作为作业监控平台与集群监控平台对接,因此使用了Django框架,集成在了Cloudera Hue系统中。分析模块主要是对MySql数据库进行交互,将已聚集好的作业信息进行时间与用户维度上的抽离。抽离出如时间段内用户作业量排行,资源使用量排行等信息,并对诸如占用时间过长、占用资源过多、重复失败的Job进行过滤,通知系统管理员与相关集群用户。

    对于集群管理员,可以获得诸如集群的长期的作业运行状况,与集群用户的使用水平。尤其在集群用户使用Spark服务时,经常过多的申请集群资源,导致了集群资源的大量浪费。集群管理员可以快速找出此类作业与用户。

    对于集群用户,可以获得其本身的作业运行状态走势,对于周期性重复型作业的优化具有显著的意义。

    3 结束语

    Hadoop是一个离线计算框架,用户提交的作业信息往往无法立刻得到反馈,因此Hadoop作业运行日志分析是对作业分析的极为有效的工具。传统的Hadoop日志分析平台只针对了近期的作业信息,对作业的分析与统计达不到满意的效果。本系统采用了Mahout框架进行机器学习分析,得到了作业的聚类结果,但是如何进一步挖掘有用的Hadoop作业日志信息,需要深入的研究与探讨。

    

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/10 12:44:54