MR添加缓存文件
Hadoop提供了两种DistributedCache使用方式,一种是通过API,在程序中设置文件路径,另外一种是通过命令行(-files、-archives、-libjars)参数告诉Hadoop,命令行方式使用以下三个参数设置文件:
- -files:将指定的本地/hdfs文件分发到各个Task的工作目录下,不对文件进行任何处理;
- -archives:将指定文件分发到各个Task的工作目录下,并对名称后缀为".jar"、“.zip”,“.tar.gz”、".tgz"的文件自动解压,默认情况下,解压后的内容存放到工作目录下名称为解压前文件名的目录中,比如压缩包为dict.zip,则解压后内容存放到目录dict.zip中。为此,你可以给文件起个别名/软链接,比如dict.zip#dict,这样,压缩包会被解压到目录dict/dict中。
- -libjars:指定待分发的jar包,Hadoop将这些jar包分发到各个节点上后,会将其自动添加到任务的CLASSPATH环境变量中。
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

最低0.47元/天 解锁文章
1078

被折叠的 条评论
为什么被折叠?



