相关文章:OssImport系列之一——架构
执行命令时异常:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/aliyun/ossimport2/OSSImport2 : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at com.simontuffs.onejar.JarClassLoader.defineClass(JarClassLoader.java:693)
at com.simontuffs.onejar.JarClassLoader.findClass(JarClassLoader.java:599)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.simontuffs.onejar.Boot.run(Boot.java:300)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
原因:Java版本过低,更新到1.7或以上版本。
使用submit命令提交任务报异常:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
Caused by: java.lang.NullPointerException
at com.aliyun.ossimport2.config.JobConfig.load(JobConfig.java:44)
at com.aliyun.ossimport2.OSSImport2.doSubmitJob(OSSImport2.java:289)
at com.aliyun.ossimport2.OSSImport2.main(OSSImport2.java:120)
... 6 more
原因:检查是否将配置文件中原有的项删除或者注释掉了,不需要配置的项请在等号后面填空,不需要删除。
原因:ulimit -n
查看系统句柄。
ulimit -n 65536
调大后,重启进程即可;sudo losf -n
排查是哪些进程打开了句柄。原因:大部分情况是java没装或者版本低于1.7导致的,或配置文件错误导致。
submit 命令提交完任务后,用 stat 查看任务状态一直显示:
bash console.sh stat
[WARN] List files dir not exist : /home//ossimport/workdir/master/jobs/
no jobs is running or finished.
原因:
logs/ossimport.log
,找到异常原因并解决,然后再启动服务进程。观察Task的总数是否在增加:
原因:如果机器的可用内存是少于 2GB 的,大概率是内存不足被杀掉了,检查下 dmsg 日志是否有内存不足被杀的记录。
直接调用 start 命令启动服务即可,已经提交的Job不需要重新提交,只要不调用clean命令,所有提交过的Job都有断点记录,不会重做已经完成的工作。
Job全部成功上传完后OSS控制台里没有看到bucket的大小有变化,或者和本地用 du
统计的大小相差很大。
原因:OSS控制台的bucket数据量是延迟1小时更新的。du
命令统计的是块大小,会比实际文件要大,可以参考如下命令统计本地目录的真实大小: ls -lR <目录绝对路径> | grep "\-rw" | awk '{sum+=$5}END{print sum}'
。
一般应该使用 retry 命令进行重试。
原因:查看文件$work_dir/master/jobs/$jobName/failed_tasks/$taskName/error.list
拿到失败文件的相对路径,检查该文件是否有权限访问,是否被删除,是否是软连接,是否是乱码的文件名等。
需要首先使用export LANG="
, ls
查看该文件名不乱码之后,用 clean 命令清掉原来的Job,再用 submit 命令重新提交Job。
报异常:启动服务时报java.nio.file.AccessDeniedException。
原因:没有权限访问配置文件目录。
Task状态显示0个,但Job显示完成,如下所示:
[2015-12-28 16:12:35] [INFO] JobName:dir_data
[2015-12-28 16:12:35] [INFO] Pending Task Count:0
[2015-12-28 16:12:35] [INFO] Dispatched Task Count:0
[2015-12-28 16:12:35] [INFO] Succeed Task Count:0
[2015-12-28 16:12:35] [INFO] Failed Task Count:0
[2015-12-28 16:12:35] [INFO] Is Scan Finished:true
[2015-12-28 16:12:35] [INFO] JobState:SUCCEED
原因:
srcPrefix
填写错误,导致 List 不出来文件;srcPrefix
下只有目录,没有文件,因为目录概念是OSS模拟出来的,不会被真正上传。日志报异常:
Exception:com.aliyun.oss.OSSException: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
AccessDenied
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
56EA98DE815804**21B23EE6
my-oss-bucket.oss-cn-qingdao.aliyuncs.com
my-oss-bucket
oss-cn-hangzhou.aliyuncs.com
原因:bucket的srcDomain
或 destDomain
填写错误,请按照 域名列表 填写正确的域名。
日志报异常:
Exception:com.aliyun.oss.OSSException: The request signature we calculated does not match the signature you provided. Check your key and signing method.
[ErrorCode]: SignatureDoesNotMatch
[RequestId]: xxxxxxx
[HostId]: xxx.oss-cn-shanghai.aliyuncs.com
原因:检查destAccessKey
和destSecretKey
是否填错,详细说明请参看 访问控制。
submit命令提交任务时报异常:
submit job:/disk2/ossimport2/local_job.cfg
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
Caused by: java.lang.NullPointerException
at com.aliyun.ossimport2.OSSImport2.doSubmitJob(OSSImport2.java:289)
at com.aliyun.ossimport2.OSSImport2.main(OSSImport2.java:120)
... 6 more
原因:检查 conf/sys.properties
中的配置项 workingDir 是否配置,配置是否正确;检查配置文件路径是否路径正确。
不支持
参考 访问域名 里的域名帮助,配置内网域名后,将不收取流量费用,但访问次数的费用是依旧计费的。
原因:Master是先 List 出文件列表,之后按照文件列表做数据迁移。当 List 完之后,源端某些文件被删除,就会出现源端文件不存在的情况。这种文件会被跳过,并把文件输出在错误列表里。
开启增量模式,本地删除后OSS上会不会被删,删除操作不会被同步。
增量模式是采用对比文件最后修改来判断文件是否为增量的,Linux的 mv ,Windows的 cp , mv 以及 rsync 带-t
或者-a
参数等操作是不会修改文件的最后修改时间的,这些操作修改的文件是不会被扫描到的。
原因:又拍的比较复杂,主要分两种情况:
[2016-07-21 10:21:46] [INFO] [name=YoupaiList, totalRequest=1729925, avgLatency=38, recentLatency=300000]
,这条日志如果recentLatency=30000
这种一般就是在正常 List 的,又拍 List 比较慢一般都是跑满30秒超时,30秒 List 出几个文件就返回几个文件过来,这种情况等任务慢慢recentLatency
很小,这种情况一般就是账号密码填错之类的,因为又拍的sdk出错只返回 null ,并不返回错误结果,所以只能通过抓包的方式获得又拍返回的错误码排查。srcAccessKey
和srcSecretKey
填写什么填写又拍的 操作员账号 和 密码 。
又拍对sdk访问间隔做了限制,如果访问稍微快一点,会进行限速,请联系又拍的客服放开限制。OssImport本身会对这种情况进行重试的。
原因:使用的命令没有安装,请用 yum
或 apt-get
或 zypper
等命令安装相应的命令。
Job配置文件看上去是对的,但跑的时候看上去明显和Job配置文件配置的不一样。只有sys.properties
是改完之后重启就生效的,Job的配置文件一旦提交后,修改是不会生效的,需要 clean 掉原有的Job,然后重新 submit 新的配置文件。
日志报异常:
java.lang.IllegalArgumentException: The bucket name "xxx/xx" is invalid. A bucket name must: 1) be comprised of lower-case characters, numbers or dash(-); 2) start with lower case or numbers; 3) be between 3-63 characters long.
原因:检查配置项destBucket
是否填写正确,bucket是不带 / 以及其它路径的。
日志报异常:
com.aliyun.oss.ClientException: Unknown
[ErrorCode]: NonRepeatableRequest
[RequestId]: Cannot retry request with a non-repeatable request entity. The cause lists the reason the original request failed.
以及SocketTimeoutException,一般都是网络打满的时出现的,OssImport内部会重试,如果重试完后依旧失败,可以在任务完成后调用 retry 命令再次重试。
日志报异常:
Unable to execute HTTP request: Connect to xxx.oss-cn-beijing-internal.aliyuncs.com:80 timed out
[ErrorCode]: ConnectionTimeout
[RequestId]: Unknown
原因:非ieECS的机器不能使用带 internl 的域名。
日志报异常:
com.aliyun.oss.OSSException: The specified bucket is not valid.
[ErrorCode]: InvalidBucketName
[RequestId]: 57906B4DD0EBAB0FF553D661
[HostId]: you-bucket.you-bucketoss-cn-hangzhou-internal.aliyuncs.com
原因:配置文件里的 destDomian
配置的域名不能带bucket名称。
srcPrefix
能单独指定文件吗不可以,srcPrefix
只支持目录或者前缀级别,单个文件上传可以用别的更简单的工具。
日志报异常:
Unable to execute HTTP request: The Difference between the request time and the current time is too large.
[ErrorCode]: RequestTimeTooSkewed
[RequestId]: xxxxxxx
原因:
日志里显示错误 No route to host
,一般是本地防火墙或者 iptables 等原因导致网络不通。
使用 http 模式日志显示该错误,是因为指定的http列表文件格式不对:
日志报异常:
Exception:java.lang.IllegalArgumentException: The boject key "/xxxxx.jpg" is invalid. An object name should be between 1 - 1023 bytes long when encoded as UTF-8 and cannot contain LF or CR os unsupported chars in XML1.0, and cannot begin with "/" or "\".
原因:
srcPrefix
是否是作为目录的但没有以 / 结尾;destPrefix
是否以 / 或者 ** 开头了。相关文章:OssImport系列之一——架构