Mapreduce 工业界批式计算经验汇总(下)

MR添加缓存文件

Hadoop提供了两种DistributedCache使用方式,一种是通过API,在程序中设置文件路径,另外一种是通过命令行(-files、-archives、-libjars)参数告诉Hadoop,命令行方式使用以下三个参数设置文件:

  1. -files:将指定的本地/hdfs文件分发到各个Task的工作目录下,不对文件进行任何处理;
  2. -archives:将指定文件分发到各个Task的工作目录下,并对名称后缀为".jar"、“.zip”,“.tar.gz”、".tgz"的文件自动解压,默认情况下,解压后的内容存放到工作目录下名称为解压前文件名的目录中,比如压缩包为dict.zip,则解压后内容存放到目录dict.zip中。为此,你可以给文件起个别名/软链接,比如dict.zip#dict,这样,压缩包会被解压到目录dict/dict中。
  3. -libjars:指定待分发的jar包,Hadoop将这些jar包分发到各个节点上后,会将其自动添加到任务的CLASSPATH环境变量中。

社区提供的示例比较好,见https://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/HadoopStreaming.html#Working_with_Large_Files_and_Archives

Tips: 可以登录 Yarn Container WebShell 来验证所需文件是否被localized到container的执行环境里。

需要注意的是,DistributedCache 是每个 node 只会下载一份,然后同一个 node 上的多个 task 是使用软链共享这一份数据的,因此如果是不允许并发读的数据的话是不能够使用 DistributedCache的。替代方式是手动在 task 中下载。

MR用户主动Debug

找到作业链接

通过 applicationId 在 https://cloud.bytedance.net/megatron/jobs 找到作业链接,例如application_1583916629750_4673851

如果作业id是以"job_xxx"形式开头,请替换成"application_xx"查询

错误诊断

点击"作业诊断"

一般在stderr有错误抛出

或者直接进入web UI查看任务,进入failed查看失败task

进入log链接查看日志

常规错误

Pipe failed

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1.

用户进程退出

在stderr一般有退出原因,没有找到多看一些错误的task

如果还是没有找到,很有可能是用户没有把stdin的数据读完主动退出,或者依赖的脚本有exit(0)的逻辑,请用户加日志输出到stderr主动debug

ImportError: No module named xxx

如果用户有用-file, -cacheArchive传递了依赖,请在import之前sleep住脚本(任务必须是运行状态,失败和运行结束的task无法进入webshell),进入webshell查看运行目录是否存在这些依赖(执行appcache)。如果不存在,说明-file, -cacheArchive没有设置正确,请详细检查;如果存在,说明import路径不正确,请认真检查。

执行命令appcache,进入运行目录

如果用-file, -cacheArchive传递依赖不方便,可以使用docker镜像Docker on Yarn

Error: java.lang.RuntimeException: Error in

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值