OssImport系列之五——常见问题及排除

相关文章:OssImport系列之一——架构

1. UnsupportedClassVersionError异常

执行命令时异常:

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或以上版本。

2. InvocationTargetException异常

使用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

原因:检查是否将配置文件中原有的项删除或者注释掉了,不需要配置的项请在等号后面填空,不需要删除。

3. too many open files

原因:ulimit -n 查看系统句柄。

  • 如果值小于一万以下的,可以通过 ulimit -n 65536 调大后,重启进程即可;
  • 如果本来就设置的比较大,那就用 sudo losf -n 排查是哪些进程打开了句柄。

4. windows启动后秒退

原因:大部分情况是java没装或者版本低于1.7导致的,或配置文件错误导致。

5. no jobs is running or finished

submit 命令提交完任务后,用 stat 查看任务状态一直显示:

bash console.sh stat
[WARN]   List files dir not exist : /home//ossimport/workdir/master/jobs/
no jobs is running or finished.

原因:

  • Job 刚提交,Master需要先去扫描文件列表,这时 Task 还没有真正生成和分发,打印该日志是正常的;
  • 很长一段时间后依旧打印该错误,一般是没有使用 start 命令启动进程或者进程启动后有异常退出。没有启动服务的情况,只需使用 start 就可以了;否则看下 logs/ossimport.log,找到异常原因并解决,然后再启动服务进程。

6. stat命令一直显示scanFinished:false

观察Task的总数是否在增加:

  • 如果在变多,那就是 Job 的文件列表还没 List 完,还在 List 新的文件;
  • 一直没变化,如果 Job 配置的是增量模式, scanFinished 永远不会为 true ,会根据用户配置的间隔时间,定期去扫描文件列表,检查有无新增或修改的文件;
  • 如果不是增量模式,Task数也不会增多,检查日志是否有异常。

7. 服务进程挂掉,日志却没有输出异常

原因:如果机器的可用内存是少于 2GB 的,大概率是内存不足被杀掉了,检查下 dmsg 日志是否有内存不足被杀的记录。

8. 进程挂掉或者杀掉进程后,重启服务需要做什么操作

直接调用 start 命令启动服务即可,已经提交的Job不需要重新提交,只要不调用clean命令,所有提交过的Job都有断点记录,不会重做已经完成的工作。

9. 任务完成OSS控制台显示的数据量比源数据量小

Job全部成功上传完后OSS控制台里没有看到bucket的大小有变化,或者和本地用 du统计的大小相差很大。
原因:OSS控制台的bucket数据量是延迟1小时更新的。du 命令统计的是块大小,会比实际文件要大,可以参考如下命令统计本地目录的真实大小: ls -lR <目录绝对路径> | grep "\-rw" | awk '{sum+=$5}END{print sum}'

10. stat显示的失败任务如何处理

一般应该使用 retry 命令进行重试。

11. 有些失败任务后反复retry都无法成功

原因:查看文件$work_dir/master/jobs/$jobName/failed_tasks/$taskName/error.list 拿到失败文件的相对路径,检查该文件是否有权限访问,是否被删除,是否是软连接,是否是乱码的文件名等。

12. 文件名乱码的文件如何上传到OSS

需要首先使用export LANG="", ls 查看该文件名不乱码之后,用 clean 命令清掉原来的Job,再用 submit 命令重新提交Job。

13. java.nio.file.AccessDeniedException

报异常:启动服务时报java.nio.file.AccessDeniedException。
原因:没有权限访问配置文件目录。

14. Task状态显示0个,但Job显示完成

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模拟出来的,不会被真正上传。

15. The bucket you are attempting to access must be addressed using the specified endpoint

日志报异常:

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的srcDomaindestDomain 填写错误,请按照 域名列表 填写正确的域名。

16. The request signature we calculated does not match the signature you provided

日志报异常:

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

原因:检查destAccessKeydestSecretKey是否填错,详细说明请参看 访问控制。

17. InvocationTargetException

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 是否配置,配置是否正确;检查配置文件路径是否路径正确。

18. 是否支持设置代理

不支持

19. OSS迁移到OSS为什么还会产生费用

参考 访问域名 里的域名帮助,配置内网域名后,将不收取流量费用,但访问次数的费用是依旧计费的。

20. 同步的过程中显示源端的文件不存在

原因:Master是先 List 出文件列表,之后按照文件列表做数据迁移。当 List 完之后,源端某些文件被删除,就会出现源端文件不存在的情况。这种文件会被跳过,并把文件输出在错误列表里。

21. 开启增量模式,本地删除后OSS上会不会被删

开启增量模式,本地删除后OSS上会不会被删,删除操作不会被同步。

22. 开启增量模式,有些新增的文件没有被同步

增量模式是采用对比文件最后修改来判断文件是否为增量的,Linux的 mv ,Windows的 cpmv 以及 rsync-t或者-a参数等操作是不会修改文件的最后修改时间的,这些操作修改的文件是不会被扫描到的。

23. 又拍迁移的任务数一直显示0

原因:又拍的比较复杂,主要分两种情况:

  • [2016-07-21 10:21:46] [INFO] [name=YoupaiList, totalRequest=1729925, avgLatency=38, recentLatency=300000],这条日志如果recentLatency=30000这种一般就是在正常 List 的,又拍 List 比较慢一般都是跑满30秒超时,30秒 List 出几个文件就返回几个文件过来,这种情况等任务慢慢
    List 出来就正常了;
  • recentLatency很小,这种情况一般就是账号密码填错之类的,因为又拍的sdk出错只返回 null ,并不返回错误结果,所以只能通过抓包的方式获得又拍返回的错误码排查。

24. 又拍迁移时srcAccessKeysrcSecretKey填写什么

填写又拍的 操作员账号密码

25. 又拍迁移时一直显示http 429错误

又拍对sdk访问间隔做了限制,如果访问稍微快一点,会进行限速,请联系又拍的客服放开限制。OssImport本身会对这种情况进行重试的。

26. 执行时unknown command "java", unknown command "nohup"之类的提示

原因:使用的命令没有安装,请用 yumapt-getzypper 等命令安装相应的命令。

27. 任务与配置文件不符

Job配置文件看上去是对的,但跑的时候看上去明显和Job配置文件配置的不一样。只有sys.properties是改完之后重启就生效的,Job的配置文件一旦提交后,修改是不会生效的,需要 clean 掉原有的Job,然后重新 submit 新的配置文件。

28. The bucket name "xxx/xx" is invalid

日志报异常:

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是不带 / 以及其它路径的。

29. com.aliyun.oss.ClientException: Unknown

日志报异常:

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 命令再次重试。

30. Connect to xxx.oss-cn-beijing-internal.aliyuncs.com:80 timed out

日志报异常:

Unable to execute HTTP request: Connect to xxx.oss-cn-beijing-internal.aliyuncs.com:80 timed out
[ErrorCode]: ConnectionTimeout
[RequestId]: Unknown

原因:非ieECS的机器不能使用带 internl 的域名。

31. The specified bucket is not valid

日志报异常:

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名称。

32. 配置文件里的srcPrefix能单独指定文件吗

不可以,srcPrefix只支持目录或者前缀级别,单个文件上传可以用别的更简单的工具。

33. Unable to execute HTTP request: The Difference between ... is too large.

日志报异常:

Unable to execute HTTP request: The Difference between the request time and the current time is too large.
[ErrorCode]: RequestTimeTooSkewed
[RequestId]: xxxxxxx

原因:

  • 本地机器时间不对,与服务器时间相差15分钟以上,该情况居多;
  • 可能是并发太高,尤其是CPU占用率很高,导致在并发上传慢。

34. No route to host

日志里显示错误 No route to host,一般是本地防火墙或者 iptables 等原因导致网络不通。

35. Unknown http list file format

使用 http 模式日志显示该错误,是因为指定的http列表文件格式不对:

  • 从其它系统上拷过来的文件,可以用mac2unix,dos2unix等相关命令转化文件格式;
  • 文件里有某些行不符规则,比如某行少于两列。

36. The boject key "/xxxxx.jpg" is invalid

日志报异常:

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系列之一——架构

你可能感兴趣的:(OssImport系列之五——常见问题及排除)