OSS ossimport 老司机

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: ossimport NullPointException 空指针的目前存在于低版本的 ossimport 工具中,官网的新版本已经修复,下载新版本后重启任务进程即可解决。 get target meta faild 是正常报错,ossimport 会自动重试,重试如果还是失败,最后会变成 failed success 任务,可以用 sh console.sh stat 看到,错误原因一般因为上传到 OSS 文件失败,无法拉去 meta 信息进行校验导致,可以不用关心。

合理的迁移配置

目前还是推荐客户按照 VPC 的环境方式进行迁移,在服务体验感上有很大提升。在迁移过程中 OSS SLA 没有承诺迁移速度有明确指标,而且迁移数据和多因素有关(机器配置、数据量、网络、线程、限流等),所以根据实际情况进行问题诊断。

首先在迁移之前,要求使用者要先大致的学习一下我们的配置属性说明,和相关文件的作用,日志存储,异常处理等。
https://help.aliyun.com/document_detail/56990.html?spm=a2c4g.11174283.6.1079.sbu1ch

配置迁移文件单机版

迁移前要明确客户端的迁移体量和文件数量。目的是合理的配置 task 和线程数量,以及 ossimport 的工作模型。

  • 一般迁移体量小于 30TB 的完全可以采用单机模式进行迁移,单机版可以配置多线程的方式进行迁移,调节 workerTaskThreadNum 参数,需要注意的是如果是高配,物理机的话,数量可以调大,可以参考 平均文件 size * 线程数量,对比 memory 是否够用,同时也要参考 CPU 核心数量是否能否抗住这种并发量。
  • 当高并发,且文件的 size 较大时,如果配置数量不合理,会出现设备 OOM 的情况,可以通过 /var/log/message 看到,这是要么选择降低并发线程数量,要么是增大机器配置。
  • 如果是本地 ECS 或者第三方存储迁移到 OSS ,请注意源是否有限流,目前经常会出现源发现有大流量流出后直接给限制住,导致迁移速度无法增长。关键参数 workerMaxThroughput(KB/s),如果源没有限制,可以释放调大这数。
  • 其他 sys.properties 文件中的属性不要随意改动。

配置分布式迁移文件

  • 分布式迁移模式的数据体量都是大于 30TB ,甚至上 PB 的级别才会用到,迁移模型也比较特殊,是通过 master 带多个 worker 协同工作,类似 nginx 的模型,master 只是用来切割任务和分配任务,对数据量庞大的用户,worker 的数量也要配置好,才能高效迁移。
  • 首先通过客户端文件数量,来计算任务数,该项目中客户端总文件数 424421917 个,源头限制 3Gbps ,客户的机器数量有 12 台。
    计划分成 20000 个 task ,每个 task 迁移 21221 个文件。每个 worker 机器开 200 线程,并发处理 200 个 task ,并发也就是能处理 2400 个,升级 17600 个 task 在队列中。
  • 源流限制是 3000Mbps ,其实并发 worker 全部也就能跑到 375MB ,所以即便是你的线程开的再多,机器配置在高其他的线程也只能阻塞住。

OSS 单机版迁移速度慢优化建议

所有优化都是基于 ECS 的基础上,如果是自己的 PC 优化空间不大

  • 如果是 OSS 迁移到 OSS 可以买 ECS 做迁移,将配置做大点,比 32G 16 核,64G 32核, 16G 8 核 等。
    将 ECS 的 srcdomain destdomain 都设置为内网 internal 的域名。
  • 如果不是 OSS 迁移到 OSS ,将配置做大点,比 32G 16 核,64G 32核, 16G 8 核 等。将 ECS 的 destdomain 设置为内网 internal 的域名。
  • 将本机的迁移 heap 调大到 ECS 内存的 1/2 ,如果本机内存使用较高的请调到 1/4
  • 线程数可以开到 workerTaskThreadNum=120
  • 设置 workerMaxThroughput=0

OSS 分布式版迁移速度慢优化建议

  • master 和 worker 机器要使用 ECS 机器进行迁移,master 机器要配置大点,如果想迁移快建议 master 64G 32核,worker 机器 32G 16 核 或者以上,数量越多越好,客户根据自己的业务情况买,具体情况再分析。将 ECS 的 srcdomain destdomain 都设置为内网 internal 的域名。
  • 如果不是 OSS 迁移到 OSS ,将配置做大点,比 32G 16 核,64G 32核, 16G 8 核 等。
    将 ECS 的 destdomain 设置为内网 internal 的域名。
  • 将本机的迁移 heap 调大到 ECS 内存的 1/2 ,如果本机内存使用较高的请调到 1/4
  • 配置文件线程数可以开到 workerTaskThreadNum=150
  • 设置 workerMaxThroughput=0

问题:

ossimport NullPointException

排查:

1

  • 空指针的目前存在于低版本的 ossimport 工具中,官网的新版本已经修复,下载新版本后重启任务进程即可解决。
  • get target meta faild 是正常报错,ossimport 会自动重试,重试如果还是失败,最后会变成 failed success 任务,可以用 sh console.sh stat 看到,错误原因一般因为上传到 OSS 文件失败,无法拉去 meta 信息进行校验导致,可以不用关心。

问题:

ossimport 上传 oss 超时

1

排查:

通过上传报错即可知道 socket timeout ,基本上和网络脱不了关系,延迟过高、丢包、网络不通都会出现这种问题;
最有效的办法是客户端抓包走一波,然后通过抓包分析症结。

问题:

原文件带有特殊符号

1

排查:

出现这种错误,要检查下原文件是否存在特殊字符

, " ' \ / & <> 、? :
AI 代码解读

如果是以上带有特殊字符的原文件,需要经过本地先特殊字符处理掉,有些特殊字符可能在 Linux 的文件系统中可能无法正常显示,可能导致 OSS 获取原文件失败,最好自己将这种特殊的字符处理掉。

问题:

设置增量迁移,任务一直存在

排查:

isIncremental=true
incrementalModeInterval=86400

设置了这增量迁移参数后,如果第一次全量迁移完后,进程会一直存在,根据设置的间隔时间发起增量扫描,属于正常现象。

问题:

LocalScanner.run Exception:java.lang.StringIndexOutOfBoundsException: String index out of range

1

排查:

迁移的源文件设置了软链接单机版的暂时不支持,分布式版本的可以支持。

问题:

如何降低 ossimport 的迁移带宽,占用内存?

排查:

  • 1)如果降低迁移带宽或者内存,将导致整体的 ossimport 迁移速度下降,耽误迁移时间,请做好预期。
  • javaHeapMaxSize , 默认是 1024 最低的堆栈配置,想要调整迁移占用内存可以调整堆栈大小,不能少于 1024;
  • workerMaxThroughput(KB/s) ,可以控制它迁移速度,单位是 KB;
  • workerTaskThreadNum,迁移线程数,默认 60 ,可以调整。

通过以上几个参数可以降低迁移的占用带宽和内存消耗。所有配置文件都在 sys.properties 里面;

问题:

迁移过程中,出现 NoSuckKey ,但是本地文件存在,或者第三方存储源文件存在,为什么报 404?

[2018-12-05 10:33:13]   [ERROR] Oss get meta failed, bucket:single key:mpg/All Japan 3200 Database Complete/Japan Data
base/J100040.mpg Exception:com.aliyun.oss.OSSException: Not Found
[ErrorCode]: NoSuchKey
[RequestId]: 5C0738E8D06C7BFCBDFFBAC1
[HostId]: null
        at com.aliyun.oss.common.utils.ExceptionFactory.createOSSException(ExceptionFactory.java:104)
        at com.aliyun.oss.internal.OSSErrorResponseHandler.handle(OSSErrorResponseHandler.java:56)
        at com.aliyun.oss.common.comm.ServiceClient.handleResponse(ServiceClient.java:253)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:135)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:69)
        at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:94)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:156)
        at com.aliyun.oss.internal.OSSObjectOperation.getObjectMetadata(OSSObjectOperation.java:398)
        at com.aliyun.oss.OSSClient.getObjectMetadata(OSSClient.java:582)
        at com.aliyun.oss.OSSClient.getObjectMetadata(OSSClient.java:576)
        at com.aliyun.ossimport.worker.uploader.OssUploader.getMeta(OssUploader.java:374)
        at com.aliyun.ossimport.worker.task.localimpl.LocalAuditTask.checkWithRetry(LocalAuditTask.java:92)
        at com.aliyun.ossimport.worker.task.localimpl.LocalImportTask.audit(LocalImportTask.java:101)
        at com.aliyun.ossimport.worker.task.localimpl.LocalImportTask.run(LocalImportTask.java:150)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
AI 代码解读

排查:

ossimport 的工作过程是要先将源文件 list 出来,然后分成不同的 task 去执行,当所以任务执行完成后,再进行统计的文件校验比对,其方式是通过本地发起一条 http 的 header 请求到 OSS ,如果校验通过表示上传成功,如果校验失败上传就失败。

通过报错可以看到是 ossimport 执行了一个 http 请求到 OSS 端,获取了 404 的结果,这种情况只有两种可能:

  • 迁移的数据源是 OSS,并且 OSS 上没有这个文件;
  • 源文件存在,但是迁移过程中出现了失败任务,没有迁移成功,在最后 ossimport 校验时没有请求到目标 bucket 这条 object 所以出现 404 ;
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
打赏
0
0
1
0
254
分享
相关文章
OSS ossimport 老司机
ossimport NullPointException 空指针的目前存在于低版本的 ossimport 工具中,官网的新版本已经修复,下载新版本后重启任务进程即可解决。 get target meta faild 是正常报错,ossimport 会自动重试,重试如果还是失败,最后会变成 failed success 任务,可以用 sh console.sh stat 看到,错误原因一般因为上传到 OSS 文件失败,无法拉去 meta 信息进行校验导致,可以不用关心。
OSS ossimport 老司机
【OSS 排查方案-7】ossimport 大数据量迁移方案总结
背景: 面临客户不断的将友商的存储数量迁移到阿里云上。ossimport 工具越来越多的暴露在用户端,但是合理的利用 ossimport 工具以及良好的迁移架构数据能否帮助用户高效的快速迁移。但是如果对 ossimport 不熟知,而且迁移架构没有经过测试,反而会降低我们的迁移效率,影响客户的全面战略上云计划安排。
14042 0
kubernetes部署OSS跨账号复制工具ossimport
生产环境的OSS上有很多数据需要同步到开发环境(帐号不同),每次使用复制很麻烦而且还占用流量。在serverless kubernetes上部署一个pod版的ossimport,实现内网增量复制。
637 0
【最佳实践】如何通过OSSimport工具将线下数据迁移至金融云OSS?
1. 当前存在的问题: 金融云由于等保要求,不能直接将闪电立方设备寄送到金融云机房。因此,我们还不能通过闪电立方的方式直接迁移数据至金融云OSS。但是金融云提供了另外一种类型的Bucket-金融云公网Bucket。
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
116 1
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
10月前
|
阿里云OSS的优势
【7月更文挑战第19天】阿里云OSS的优势
381 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等