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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 数据迁移工具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/<user>/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="<your file name encode>", 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.
<Error>
  <Code>AccessDenied</Code>
  <Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message>
  <RequestId>56EA98DE815804**21B23EE6</RequestId>
  <HostId>my-oss-bucket.oss-cn-qingdao.aliyuncs.com</HostId>
  <Bucket>my-oss-bucket</Bucket>
  <Endpoint>oss-cn-hangzhou.aliyuncs.com</Endpoint>
</Error>

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

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
23天前
|
关系型数据库 MySQL Java
ChaosBlade常见问题之安装日志中一直报错某个数据库表不存在如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
26 0
|
23天前
|
关系型数据库 MySQL 测试技术
ChaosBlade常见问题之页面没有机器列表权限不能执行故障注入如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
21 1
|
2月前
|
SQL 分布式计算 DataWorks
maxcompute配置问题之配置回退的参数如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
40 2
|
2月前
|
SQL 存储 分布式计算
maxcompute配置问题之配置mc内容如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
30 1
|
23天前
|
Kubernetes Java 测试技术
ChaosBlade常见问题之不支持v1.28.2版本的k8s如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
20 0
ChaosBlade常见问题之不支持v1.28.2版本的k8s如何解决
|
23天前
|
SQL Java 测试技术
ChaosBlade常见问题之/QuerySceneFunctionByCategoryId接口报错如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
19 0
|
26天前
|
Java Serverless 测试技术
Serverless 应用引擎常见问题之上传自定义jar包自动vpc启动报错如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
32 4
|
27天前
|
缓存 Java 应用服务中间件
云效常见问题之把代码库里面的代码覆盖到目标机器组的对应目录如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
16 1
|
1月前
|
SQL 分布式计算 DataWorks
DataWorks常见问题之运行官方提供的示例报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
26 0
大依赖部署——常见问题梳理 FAQ
大依赖部署——常见问题梳理 FAQ自制脑图
39 0
大依赖部署——常见问题梳理 FAQ