如何查看Hadoop运行过程中产生日志

如何查看Hadoop运行过程中产生日志,第1张

其实网上就有,可以借鉴董西成的博客,下面是内容:Hadoop HDFS只有服务日志,与Hadoop MapReduce的服务日志类似;Hadoop MapReduce日志分为两部分,一部分是服务日志,一部分是作业日志,具体介绍如下:1 Hadoop 1x版本Hadoop 1x中MapReduce的服务日志包括JobTracker日志和各个TaskTracker日志,他们的日志位置如下(Web界面也可查看其日志,地址主节点IP:50030):JobTracker:在JobTracker安装节点上,默认位置是${hadooplogdir}/logs/-jobtracker-log,该文件每天生成一个,旧的日志后缀是日期,当天的日志文件后缀是“log”,其中${hadooplogdir}默认值是hadoop安装目录,即${HADOOP_HOME}。TaskTracker:在各个TaskTracker安装节点上,默认位置是

用户配置并将一个Hadoop作业提到Hadoop框架中,Hadoop框架会把这个作业分解成一系列map tasks 和reduce tasks。Hadoop框架负责task分发和执行,结果收集和作业进度监控。

下图给出了一个作业从开始执行到结束所经历的阶段和每个阶段被谁控制(用户 or Hadoop框架)。

下图详细给出了用户编写MapRedue作业时需要进行那些工作以及Hadoop框架自动完成的工作:

在编写MapReduce程序时,用户分别通过InputFormat和OutputFormat指定输入和输出格式,并定义Mapper和Reducer指定map阶段和reduce阶段的要做的工作。在Mapper或者Reducer中,用户只需指定一对key/value的处理逻辑,Hadoop框架会自动顺序迭代解析所有key/value,并将每对key/value交给Mapper或者Reducer处理。表面上看来,Hadoop限定数据格式必须为key/value形式,过于简单,很难解决复杂问题,实际上,可以通过组合的方法使key或者value(比如在key或者value中保存多个字段,每个字段用分隔符分开,或者value是个序列化后的对象,在Mapper中使用时,将其反序列化等)保存多重信息,以解决输入格式较复杂的应用。

22 用户的工作

用户编写MapReduce需要实现的类或者方法有:

(1) InputFormat接口

用户需要实现该接口以指定输入文件的内容格式。该接口有两个方法

其中getSplits函数将所有输入数据分成numSplits个split,每个split交给一个map task处理。getRecordReader函数提供一个用户解析split的迭代器对象,它将split中的每个record解析成key/value对。

Hadoop本身提供了一些InputFormat:

(2)Mapper接口

用户需继承Mapper接口实现自己的Mapper,Mapper中必须实现的函数是

void map(K1 key,

V1 value,

OutputCollector<K2,V2> output,

Reporter reporter

) throws IOException

其中,<K1 V1>是通过Inputformat中的RecordReader对象解析处理 的,OutputCollector获取map()的输出结果,Reporter保存了当前task处理进度。

Hadoop本身提供了一些Mapper供用户使用:

(3)Partitioner接口

用户需继承该接口实现自己的Partitioner以指定map task产生的key/value对交给哪个reduce task处理,好的Partitioner能让每个reduce task处理的数据相近,从而达到负载均衡。Partitioner中需实现的函数是

getPartition(  K2   key, V2 value, int numPartitions)

该函数返回<K2 V2>对应的reduce task ID。

用户如果不提供Partitioner,Hadoop会使用默认的(实际上是个hash函数)。

(4)Combiner

Combiner使得map task与reduce task之间的数据传输量大大减小,可明显提高性能。大多数情况下,Combiner与Reducer相同。

(5)Reducer接口

用户需继承Reducer接口实现自己的Reducer,Reducer中必须实现的函数是

Hadoop本身提供了一些Reducer供用户使用:

(6)OutputFormat

用户通过OutputFormat指定输出文件的内容格式,不过它没有split。每个reduce task将其数据写入自己的文件,文件名为part-nnnnn,其中nnnnn为reduce task的ID。

Hadoop本身提供了几个OutputFormat:

3 分布式缓存

Haoop中自带了一个分布式缓存,即DistributedCache对象,方便map task之间或者reduce task之间共享一些信息,比如某些实际应用中,所有map task要读取同一个配置文件或者字典,则可将该配置文件或者字典放到分布式缓存中。

4 多语言编写MapReduce作业

Hadoop采用java编写,因而Hadoop天生支持java语言编写作业,但在实际应用中,有时候,因要用到非java的第三方库或者其他原因,要采用C/C++或者其他语言编写MapReduce作业,这时候可能要用到Hadoop提供的一些工具。

以上就是关于如何查看Hadoop运行过程中产生日志全部的内容,包括:如何查看Hadoop运行过程中产生日志、如何在Hadoop上编写MapReduce程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10170197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存