• [教程] 采用CDM进行HDFS到OBS的数据迁移
    1      背景介绍传统的Hadoop和Spark大数据生态,主要是以本地硬盘或云硬盘承载HDFS文件系统进行数据存储,但是存在成本高,扩容难等问题。当前华为云对象存储服务OBS可以与Hadoop和Spark大数据生态进行对接,为用户提供计算存储分离的大数据解决方案。为了实现用户数据平滑上云,可以采用华为云CDM服务进行HDFS到OBS的数据迁移。2      迁移背景和目标已存在集群一采用EVS存储HDFS格式数据,新建集群二采用OBS存储数据,需要将数据从集群一的HDFS迁移至集群二的OBS。3      迁移方法1、已搭建集群一(北京一)和集群二(华东),集群一采用EVS存储数据,集群二采用OBS存储数据2、在集群一构造Spark或者Hive的数据,例如,构造Hive表数据如下(1)创建DATABASECREATE DATABASE top_ods;(2)创建TABLECREATE TABLE `top_ods.claim_6yue_pt`(  `user_id` varchar(300),  `ese_id` int,   `task_id` varchar(100))partitioned by (tagdate int)ROW FORMAT DELIMITED FIELDS TERMINATED BY "|"STORED AS parquetfileTBLPROPERTIES ("orc.compression"="Snappy");insert into table top_ods.claim_6yue_pt partition(tagdate=1) values( '10' ,10,'10');insert into table top_ods.claim_6yue_pt partition(tagdate=1) values( '11' ,11,'11');insert into table top_ods.claim_6yue_pt partition(tagdate=1) values( '12' ,12,'12');insert into table top_ods.claim_6yue_pt partition(tagdate=1) values( '13' ,13,'13');insert into table top_ods.claim_6yue_pt partition(tagdate=1) values( '14' ,14,'14');insert into table top_ods.claim_6yue_pt partition(tagdate=1) values( '15' ,15,'15');insert into table top_ods.claim_6yue_pt partition(tagdate=2) values( '20' ,20,'20');insert into table top_ods.claim_6yue_pt partition(tagdate=2) values( '21' ,21,'21');insert into table top_ods.claim_6yue_pt partition(tagdate=2) values( '22' ,22,'22');insert into table top_ods.claim_6yue_pt partition(tagdate=2) values( '23' ,23,'23');insert into table top_ods.claim_6yue_pt partition(tagdate=2) values( '24' ,24,'24');insert into table top_ods.claim_6yue_pt partition(tagdate=2) values( '25' ,25,'25');select * from top_ods.claim_6yue_pt;3、在集群二创建Spark或者Hive的新表,新表格式与源表的存储格式等属性要一致(1)创建DATABASECREATE DATABASE top_odstest location 'obs://obs-bigdata-hd-003/user/hive/warehouse/top_ods.db';(2)创建TABLE,新表格式与源表的存储格式等属性要一致CREATE TABLE `top_odstest.claim_6yue_pt`(  `user_id` varchar(300),  `ese_id` int,   `task_id` varchar(100))partitioned by (tagdate int)ROW FORMAT DELIMITED FIELDS TERMINATED BY "|"STORED AS parquetfileTBLPROPERTIES ("orc.compression"="Snappy");4、创建CDM任务,将集群一的HDFS数据迁移至集群二的OBS(1)创建CDM集群(华东),跨Region需要绑定公网弹性IP(2)配置连接管理,一个连接使用Apache HDFS,另一个连接使用对象存储服务(OBS)备注:集群一的所有节点需配置公网弹性IP,并且Apache HDFS连接中的IP与主机名映射要填写所有集群一的主机XX.XX.XX.XX ecs-bigdata-hdtest-0000.novalocalXX.XX.XX.XX ecs-bigdata-hdtest-0001.novalocalXX.XX.XX.XX ecs-bigdata-hdtest-0002.novalocalXX.XX.XX.XX ecs-bigdata-hdtest-0003.novalocal(3)配置作业管理,源连接使用HDFS连接,目标连接使用OBS连接,文件格式使用二进制格式(4)配置完成后,运行作业进行数据迁移5、迁移完成后,在集群二恢复Hive表数据,即可查询数据成功。恢复Hive表数据:MSCK REPAIR TABLE top_odstest.claim_6yue_pt;查询Hive表数据:select * from top_odstest.claim_6yue_pt;
  • [技术干货] OBS JAVA SDK 实践7:已存在对象如何修改对象名称、对象属性、以及注意事项
    1      已存在对象如何修改对象名称目前已经上传到OBS桶中的对象名称是不可修改的(后续OBS会上线POSIX语义桶,可能会支持),如果想修改已经存在的对象名称,可以通过复制旧对象到新对象,再将旧对象删除来实现。以OBS JAVA SDK为例,复制对象操作,参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815454.html;删除对象操作,参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815453.html。2      已存在对象如何修改对象属性对象元数据有很多,比如Object文件类型Content-Type、指定Object被下载时的网页的缓存行为Cache-Control、还可以自定义元数据x-obs-meta-*,具体可以参考API接口链接说明:https://support.huaweicloud.com/api-obs/zh-cn_topic_0137044900.html。已经上传到OBS桶中的对象属性不可以直接修改,(后续OBS SDK会上线此功能),目前可通过带对象属性覆盖上传同名对象来达到效果(参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815529.html),也可以通过带对象属性复制同名对象来达到效果(参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815454.html)。注:若OBS桶开启了多版本,通过对象覆盖对象和复制对象来达到修改对象属性时若不带版本进行操作,会产生多余的新版本对象,占用额外的存储空间3      附录链接OBS JAVA SDK使用方法,官网参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815558.html
  • [技术干货] OBS JAVA SDK 实践5:判断文件是否存在
    1      背景介绍 & 效果展示通过JAVA SDK可判断文件是否存在,并不需要下载对象操作,如果对象存在会返回对象的类型和对象大小,若对象不存在则返回相应的错误码,效果如下。图1 对象存在会返回对象的类型和对象大小图2 对象不存在则返回相应的错误码2      java代码参考前提:需要先下载OBS最新的JAVA SDK,参考官网链接:https://developer.huaweicloud.com/sdk?OBS,并在自己的项目中导入SDK中的JAR包。                  public static void main(String[] args) throws IOException {                   // 需要将endPoint/ak/sk更新为实际信息                   String endPoint = "https://your-endpoint";                   String ak = "*** Provide your Access Key ***";                   String sk = "*** Provide your Secret Key ***";                                      // 创建ObsClient实例                   ObsClient obsClient = new ObsClient(ak, sk, endPoint);                   try                  {                                        String bucketName = "bucketXXX";                // 需要将bucketName更新为实际信息                                       String objectName = "objectXXX";                // 需要将objectName更新为实际信息                                      ObjectMetadata metadata = obsClient.getObjectMetadata(bucketName, objectName);                                            System.out.println("---------------\nobject exist!");                                      System.out.println("\tcontentType: " + metadata.getContentType());                                      System.out.println("\tcontentLength: " + metadata.getContentLength());                  }                  catch (Ob**ception e)                  {                      System.out.println("Response Code: " + e.getResponseCode());                      System.out.println("Error Message: " + e.getErrorMessage());                      System.out.println("Error Code:       " + e.getErrorCode());                      System.out.println("Request ID:      " + e.getErrorRequestId());                      System.out.println("Host ID:           " + e.getErrorHostId());                                            if(e.getResponseCode() == 404) {                             System.out.println("---------------\nobject doesn't exist!");                      }                  } }3      附录链接OBS JAVA SDK使用方法,官网参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815558.html
  • [技术干货] OBS BrowserJS SDK 实践1:结合HTML5 Canvas实现图片局部放大效果
    1      背景介绍 & 效果展示我们经常在电商购物时,当鼠标滑过物品展示图时,会在展示图旁边显示一个图片局部放大的效果图。本文利用OBS BrowserJS SDK上传图片对象到OBS,结合HTML5 Canvas特性可轻松实现“放大镜”效果。效果展示页面已经托管到OBS桶,访问地址:https://static-web-chongchong.obs-website.cn-north-1.myhuaweicloud.com/注:更多关于静态网站托管信息,可参考链接https://bbs.huaweicloud.com/forum/thread-15492-1-1.html图1 默认图片效果展示图2 方法一:通过上传本地图片文件进行展示首先点击“选择文件”按钮选择本地图片文件,单击“点击上传”按钮,待按钮下方显示100%进度完成后,单击“显示图片”即可以看到展示效果。(若图片较大,加载时需要点时间,请耐心等待)图3 方法二:通过已有的图片URL链接显示首先在文件框中输入可用的图片URL链接,单击“显示链接图片”按钮即可以看到展示效果。(若图片较大,加载时需要点时间,请耐心等待)注:针对已经上传到OBS的图片,其URL链接可通过OBS的“分享文件”功能获取(可参考链接https://support.huaweicloud.com/usermanual-obs/obs_03_0046.html),也可以直接在匿名可读的对象上获取URL链接(可参考链接https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829105.html)2      代码参考工具由Magnifier.html、以及子目录下Magnify的OBS BrowserJS SDK库文件、CSS文件、JS文件构成。所有的代码可在打开效果展示页面后(访问地址:https://static-web-chongchong.obs-website.cn-north-1.myhuaweicloud.com/),浏览器中打开F12调试页面获取。3      附录链接OBS BrowserJS SDK 下载和使用,官网参考链接:https://support.huaweicloud.com/sdk-browserjs-devg-obs/zh-cn_topic_0125029729.html
  • [分享交流] OBS详细错误信息
    OBS请求返回403时,返回头域x-reserved-indicator的含义如下:361-371由于桶policy导致请求被拒绝372由于桶或者对象的ACL权限,请求被拒绝373post回调请求,参数错误374post回调请求,被流控375post上传对象,回调错误376policy临时鉴权,目录分享,policy已经失效377policy临时鉴权,目录分享,policy条件不匹配378policy临时鉴权,目录分享,请求参数多余,没有与之匹配的条件379policy临时鉴权,目录分享,请求操作类型不支持380vpcid 校验不通过381非桶owner操作自定义域名382非桶owner操作桶policy383桶policy权限检查异常场景384不支持本地ip385post鉴权,policy已经失效,过了失效时间386post鉴权,policy条件没有匹配387post鉴权,请求参数多余,没有与之匹配的条件388不支持跨region拷贝对象和多段
  • [技术干货] 华为公有云OBS服务的SDK集成好后,可以直接用于对接HIS 对象存储服务吗?谢谢先
    华为公有云OBS服务的SDK集成好后,可以直接用于对接HIS 对象存储服务吗?或者反过来,HIS S3对象存储的SDK集成好后,能直接用于对接华为公有云的OBS服务吗?两者是否都是标准的AWS S3接口呀?非常感谢~
  • [技术干货] OBS JAVA SDK 实践3:列举指定目录下的所有文件、列举指定目录下的文件和子目录
    1      背景介绍 & 效果展示可以通过JAVA SDK,列举指定目录下的所有文件,也可以列举指定目录下的文件和子目录,效果如下。图1 指定目录share/下的所有文件图2 列举指定目录下的所有文件图3 列举指定目录下的文件和子目录2      java代码参考(列举指定目录下的文件和子目录)前提:需要先下载OBS最新的JAVA SDK,参考官网链接:https://developer.huaweicloud.com/sdk?OBS,并在自己的项目中导入SDK中的JAR包。           String endPoint = "https://your-endpoint";                   String ak = "*** Provide your Access Key ***";                   String sk = "*** Provide your Secret Key ***";                                      // 创建ObsClient实例                   ObsClient obsClient = new ObsClient(ak, sk, endPoint);                                                         ListObjectsRequest request = new ListObjectsRequest("chongchongtest");                   // 设置文件夹对象名"share/"为前缀                   request.setPrefix("share/");                   request.setMaxKeys(1000);                    ObjectListing result;                    System.out.println("Objects:");                   do{                       result = obsClient.listObjects(request);                       for (ObsObject obsObject : result.getObjects())                       {                           System.out.println("\t" + obsObject.getObjectKey());                       }                       System.out.println("------------------------------");                       request.setMarker(result.getNextMarker());                   }while(result.isTruncated()); 3      java代码参考(列举指定目录下的所有文件)前提:需要先下载OBS最新的JAVA SDK,参考官网链接:https://developer.huaweicloud.com/sdk?OBS,并在自己的项目中导入SDK中的JAR包。String endPoint = "https://your-endpoint";                   String ak = "*** Provide your Access Key ***";                   String sk = "*** Provide your Secret Key ***";                                      // 创建ObsClient实例                   ObsClient obsClient = new ObsClient(ak, sk, endPoint);                                      ListObjectsRequest request = new ListObjectsRequest("chongchongtest");                   // 设置文件夹对象名"share/"为前缀                   request.setPrefix("share/");                   request.setDelimiter("/");                   request.setMaxKeys(500);                    ObjectListing result;                    // 列举文件                   System.out.println("Objects:");                   do{                       result = obsClient.listObjects(request);                       for (ObsObject obsObject : result.getObjects())                       {                           System.out.println("\t" + obsObject.getObjectKey());                       }                       System.out.println("------------------------------");                       request.setMarker(result.getNextMarker());                   }while(result.isTruncated());                                      // 列举子目录                   System.out.println("\nFolder:");                   do{                       result = obsClient.listObjects(request);                       for (String commonPrefix : result.getCommonPrefixes())                       {                           System.out.println("\t" + commonPrefix);                       }                       System.out.println("------------------------------");                       request.setMarker(result.getNextMarker());                   }while(result.isTruncated());4      附录链接OBS JAVA SDK 列举对象其它使用方法,官网参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815500.html
  • [技术干货] (GO生成可执行文件)利用OBS API配置和查询桶历史对象CRR
    (GO生成可执行文件)利用OBS API配置和查询桶历史对象CRR1      工具作用OBS提供跨区域复制(CRR)功能,此功能开通后,可以将同一个账号下一个桶(源桶)中的数据自动、异步地复制到不同区域的另外一个桶(目标桶)中,但启用跨区域复制功能之前上传的对象,不会被复制到目标桶。为了解决这个问题,CRR提供了历史对象CRR功能,开启此功能后,源桶中的所有数据都会自动、异步地复制到目标桶中,此功能的界面还未上线,但可以通过OBS API发送http、https请求来配置历史对象CRR功能,本文工具对API接口进行封装,使用者只需填写简单的配置信息即可启动桶历史对象CRR功能。2      效果展示源桶obs-chongchong-guangzhou中有1000个对象。使用工具启动源桶obs-chongchong-guangzhou到目的桶obs-chongchong-beijing的历史对象CRR,约10分钟后源桶中数据复制到北京region的目的桶obs-chongchong-beijing中。3      工具使用详细步骤(Linux平台)3.1      拷贝工具目录到工具运行平台将本文附录中的工具包链接(testCrrOld_Go_Linux.zip)下载到Linux平台指定目录并解压,并为可执行文件setBucketCrr配置执行权限,效果如下:     其中setBucketCrr是可执行文件、application.properties是配置文件、replicationOld-open.xml是配置历史对象CRR的XML文件。3.2      配置application.properties、replicationOld-open.xmlapplication.properties是工具运行的配置文件,需要将文件中的信息更新为实际信息。replicationOld-open.xml是配置历史对象CRR的XML内容,需要参考下表中解释将文件中的信息更新为实际信息。名称描述是否必须Agency用户创建的委托名字是ID规则的特殊辨识符否Prefix对象键值名的前缀,适配于一个或者多个对象。否Bucket规则适用的目的桶名称。是StorageClass对象的存储类型。有效值:STANDARD|WARM|COLD否 注:XML中字段更详细的配置指导参考链接——https://support.huaweicloud.com/usermanual-obs/obs_03_0003.html3.3      运行工具直接运行可执行文件setBucketCrr即可,工具会发送OBS配置请求,同时还会返回查询配置的结果信息。4      工具使用详细步骤(Windows平台)4.1      拷贝工具目录到工具运行平台将本文附录中的工具包链接(testCrrOld_Go_Win.zip)下载到Linux平台指定目录并解压,效果如下:     其中setBucketCrr是exe可执行文件、application.properties是配置文件、replicationOld-open.xml是配置历史对象CRR的XML文件。4.2      配置application.properties、replicationOld-open.xmlapplication.properties是工具运行的配置文件,需要将文件中的信息更新为实际信息。replicationOld-open.xml是配置历史对象CRR的XML内容,需要参考下表中解释将文件中的信息更新为实际信息。名称描述是否必须Agency用户创建的委托名字是ID规则的特殊辨识符否Prefix对象键值名的前缀,适配于一个或者多个对象。否Bucket规则适用的目的桶名称。是StorageClass对象的存储类型。有效值:STANDARD|WARM|COLD否 注:XML中字段更详细的配置指导参考链接——https://support.huaweicloud.com/usermanual-obs/obs_03_0003.html4.3      运行工具可通过cmd来运行可执行文件setBucketCrr,工具会发送OBS配置请求,同时还会返回查询配置的结果信息。 5      附录工具下载链接:https://obs-tools.obs.cn-north-1.myhuaweicloud.com/crrApi/testCrrOld_Go_Linux.ziphttps://obs-tools.obs.cn-north-1.myhuaweicloud.com/crrApi/testCrrOld_Go_Win.zip  
  • [技术干货] OBS JAVA SDK 实践4:统计指定目录下的文件和子目录大小
    OBS JAVA SDK 实践4:统计指定目录下的文件和子目录大小1      背景介绍 & 效果展示可以通过JAVA SDK统计指定目录下的文件和子目录大小,效果如下。图1 指定目录share/下的所有文件图2 统计指定目录下的文件和子目录大小2      java代码参考前提:需要先下载OBS最新的JAVA SDK,参考官网链接:https://developer.huaweicloud.com/sdk?OBS,并在自己的项目中导入SDK中的JAR包。                  public static void main(String[] args) throws IOException {                                      String endPoint = "https://your-endpoint";                   String ak = "*** Provide your Access Key ***";                   String sk = "*** Provide your Secret Key ***";                                      // 创建ObsClient实例                   ObsClient obsClient = new ObsClient(ak, sk, endPoint);                                      String bucketName = "chongchongtest";                   ListObjectsRequest request = new ListObjectsRequest(bucketName);                   // 统计文件夹对象名"share/"下面的子目录和文件的大小                   request.setPrefix("share/");                   request.setDelimiter("/");                    ObjectListing result;                    // 统计文件夹下对象的大小                   System.out.println("Objects:");                   do{                       result = obsClient.listObjects(request);                       for (ObsObject obsObject : result.getObjects())                       {                             double objectSize = obsObject.getMetadata().getContentLength() / 1024.0;                           System.out.println("\t" + obsObject.getObjectKey() + ": " + String.format("%.2f", objectSize) + "KB");                       }                       System.out.println("------------------------------");                       request.setMarker(result.getNextMarker());                   }while(result.isTruncated());                                      // 统计子目录的大小                   System.out.println("\nFolder:");                   do{                       result = obsClient.listObjects(request);                       for (String commonPrefix : result.getCommonPrefixes())                       {                           double objectSize = countFolerLength(obsClient, bucketName, commonPrefix);                           System.out.println("\t" + commonPrefix + ": " + String.format("%.2f", objectSize) + "KB");                       }                       System.out.println("------------------------------");                       request.setMarker(result.getNextMarker());                   }while(result.isTruncated());          }                    //统计每个子目录的大小          private static double countFolerLength(ObsClient obsClient, String bucketName, String folder) {                                      double size = 0L;                                      ListObjectsRequest request = new ListObjectsRequest(bucketName);                   request.setPrefix(folder);                                      ObjectListing result;                   do{                       result = obsClient.listObjects(request);                       for (ObsObject obsObject : result.getObjects())                       {                           size += obsObject.getMetadata().getContentLength() / 1024.0;                       }                       request.setMarker(result.getNextMarker());                   }while(result.isTruncated());                                      return size;          }                   3      附录链接OBS JAVA SDK 列举对象其它使用方法,官网参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815500.html
  • [技术干货] OBS通过消息通知去OSS拉起数据工具
    1      工具作用阿里云OSS上的对象数据如果有更新会向工具发送http消息通知,工具会一直监听http消息,启动多线程对消息进行处理,并调用OBS接口回源到阿里云OSS源桶拉取对象数据到OBS。2      效果展示图2.1 阿里云同时更新4个对象图2.2 华为云随后也同步更新4个对象3      使用前准备工具使用前需要有如下3方面准备:1)     需要给阿里云源桶配置http事件通知功能和公共可读权限,如图3.1和图3.2所示,其中接收端地址为工具所在主机的IP及工具所监听端口号。2)     华为云所在的桶需要配置回源功能到阿里云源桶,如图3.3所示。3)     运行工具的Linux平台需要安装JAVA(JDK)。图3.1 阿里云源桶主题创建示例图3.2 阿里云源桶主题订阅者示例(消息推送格式需设置为SIMPLIFIED)图3.3 华为云桶回源设置示例(消息推送格式需设置为SIMPLIFIED)4      工具实现原理工具实现原理流程示意图开发语言:Java(jdk-8.0.1)IDE:Eclipse(Version: 2018-12 (4.10.0))使用到的相关SDK:OBS SDK(eSDK_Storage_OBS_V3.1.2.1_Java)5      工具使用详细步骤(以Linux系统运行平台为例)5.1      拷贝工具目录到工具运行平台将本文附录中的工具包(ObsFetchHttp.zip)解压上传到Linux平台指定目录,效果如下:     其中httpUpdateServer.jar是工具jar包、application.properties是工具运行的配置文件、log4j.properties是日志运行配置文件(建议保持默认配置)。5.2      配置application.properties文件application.properties是工具运行的配置文件,需要将文件中的XXX部分更新为实际信息,其中AK、SK信息为华为云桶所在帐号的AK、SK。5.3      运行工具使用命令“nohup java -jar httpUpdateServer.jar &”运行工具,之后工具就会时时监听阿里云发来的http消息并进行处理。6      附录工具下载链接:https://obs-tools.obs.cn-north-1.myhuaweicloud.com/zdh/ObsFetchHttp.zip
  • [技术干货] (JAVA生成可执行文件)利用OBS API配置和查询桶历史对象CRR
    1      工具作用OBS提供跨区域复制(CRR)功能,此功能开通后,可以将同一个账号下一个桶(源桶)中的数据自动、异步地复制到不同区域的另外一个桶(目标桶)中,但启用跨区域复制功能之前上传的对象,不会被复制到目标桶。为了解决这个问题,CRR提供了历史对象CRR功能,开启此功能后,源桶中的所有数据都会自动、异步地复制到目标桶中,此功能的界面还未上线,但可以通过OBS API**送http、https请求来配置历史对象CRR功能,本文工具对API接口进行封装,使用者只需填写简单的配置信息即可启动桶历史对象CRR功能。2      效果展示源桶obs-chongchong-guangzhou中有1000个对象。使用工具启动源桶obs-chongchong-guangzhou到目的桶obs-chongchong-beijing的历史对象CRR,约10分钟后源桶中数据复制到北京region的目的桶obs-chongchong-beijing中。3      使用前准备工具使用前需要做如下准备:1)     运行工具的平台需要安装JAVA(JDK)4      工具使用详细步骤4.1      拷贝工具目录到工具运行平台将本文附录中的工具包链接(testCrrOld.zip)下载到Linux平台指定目录并解压,效果如下:     其中setBucketCrr.jar是工具jar包、application.properties是工具运行的配置文件、replicationOld-open.xml是配置历史对象CRR的XML内容。4.2      配置application.properties、replicationOld-open.xmlapplication.properties是工具运行的配置文件,需要将文件中的信息更新为实际信息。replicationOld-open.xml是配置历史对象CRR的XML内容,需要参考下表中解释将文件中的信息更新为实际信息。名称描述是否必须Agency用户创建的委托名字是ID规则的特殊辨识符否Prefix对象键值名的前缀,适配于一个或者多个对象。否Bucket规则适用的目的桶名称。是StorageClass对象的存储类型。有效值:STANDARD|WARM|COLD否注:XML中字段更详细的配置指导参考链接——https://support.huaweicloud.com/usermanual-obs/obs_03_0003.html4.3      运行工具使用命令“java –jar setBucketCrr.jar”运行工具,工具会**送OBS配置请求,同时还会返回查询配置的结果信息。5      附录工具下载链接:https://obs-tools.obs.cn-north-1.myhuaweicloud.com/crrApi/testCrrOld.zip
  • [技术干货] OBS JAVA SDK 实践2:模拟桶删的功能(删除非空桶)
    1      背景介绍目前OBS只支持删除空桶,如果桶中有数据,需要先删除桶中所有数据(包含多版本),之后才能删除桶。下面的代码模拟桶删的功能,展示如何一步到位删除非空桶。2      效果展示这里桶obs-chongchong-guangzhou桶中有约2000个对象数据,多个文件夹                                                 使用代码进行桶删后,在桶列表中已经找不到此桶3      java代码参考前提:需要先下载OBS最新的JAVA SDK,参考官网链接:https://developer.huaweicloud.com/sdk?OBS,并在自己的项目中导入SDK中的JAR包。import java.io.IOException;import com.obs.services.ObsClient;import com.obs.services.ObsConfiguration;import com.obs.services.exception.Ob**ception;import com.obs.services.model.DeleteObjectsRequest;import com.obs.services.model.DeleteObjectsResult;import com.obs.services.model.ListVersionsRequest;import com.obs.services.model.ListVersionsResult;import com.obs.services.model.VersionOrDeleteMarker; public class BucketDelete {       private static ObsClient obsClient;        public static void main(String[] args) throws InterruptedException       {           try           {               String endPoint = "XXX";        // e.g "https://obs.cn-north-1.myhuaweicloud.com"               String ak = "XXX";                              // 对象所属的帐户ak               String sk = "XXX";                              // 对象所属的帐户sk                                                              String bucketName = "obs-chongchong-beijing";               // 需要填写为实际的桶名               obsClient = new ObsClient(ak, sk, endPoint);                                                               //列举桶中对象并删除               ListVersionsResult result = obsClient.listVersions(bucketName);                                                              if(result.getVersions().length != 0)               {                    ListVersionsRequest request = new ListVersionsRequest(bucketName);                    // 设置每次批量删除500个对象                    request.setMaxKeys(500);                    ListVersionsResult result1;                    do {                         result1 = obsClient.listVersions(request);                         DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest(bucketName);                         for(VersionOrDeleteMarker v  : result1.getVersions()) {                              deleteRequest.addKeyAndVersion(v.getKey(), v.getVersionId());                         }                                                                                                       DeleteObjectsResult deleteResult = obsClient.deleteObjects(deleteRequest);                         // 获取删除成功的对象                         System.out.println(deleteResult.getDeletedObjectResults());                                                                                                 request.setKeyMarker(result1.getNextKeyMarker());                         request.setVersionIdMarker(result1.getNextVersionIdMarker());                    }while(result.isTruncated());               }                                                                                                               //删除桶               obsClient.deleteBucket(bucketName);               System.out.println("\n------------------\nbucket already delete.");         }         catch (Ob**ception e)         {               e.printStackTrace();               System.out.println("Response Code: " + e.getResponseCode());               System.out.println("Error Message: " + e.getErrorMessage());               System.out.println("Error Code:       " + e.getErrorCode());               System.out.println("Request ID:      " + e.getErrorRequestId());               System.out.println("Host ID:           " + e.getErrorHostId());          }          finally          {               if (obsClient != null)                   {                       try                       {                            obsClient.close();                        }                        catch (IOException e)                            {                            }                        }                    }             }                         }   4      附录链接OBS JAVA SDK使用,官网参考链接:https://support.huaweicloud.com/sdkreference-obs/obs_02_0001.html
  • [技术干货] OBS对象下载记录邮件通知工具
    1      工具作用每天定时收集昨日桶中的对象下载记录,整理后发送通知邮件给客户,使客户能直观看到数据下载情况。2      效果展示收到的邮件效果图3      使用前准备工具使用前需要有如下3方面准备:1)     需要给想记录下载情况的桶配置Logging功能(配置到同一桶中,命名日志前缀为“bucketname-log/”,相当于把日志都放到桶根目录“bucketname-log/”文件夹下)2)     需要在console(建议在默认region,cn-north-1)配置SMN下载Topic(邮件),并增加订阅者(即收件人邮箱地址)3)     运行工具的平台需要安装JAVA(JDK)4      工具实现原理工具实现原理流程示意图开发语言:Java(jdk-8.0.1)IDE:Eclipse(Version: 2018-12 (4.10.0))使用到的相关SDK:OBS SDK(eSDK_Storage_OBS_V3.1.2.1_Java)、SMN SDK(smn-sdk-java2.0-2.0.1)5      工具使用详细步骤(以Linux系统运行平台为例)5.1      拷贝工具目录到工具运行平台将本文附录中的工具包(obs-notify-service.zip)下载后解压到Linux平台指定目录,效果如下:     其中obs-notify-service.jar是工具jar包、application.properties是工具运行的配置文件、auto.sh用于指定工具定时运行时间,auto.sh的脚本内容如下:5.2      配置application.properties文件application.properties是工具运行的配置文件,需要将文件中的XXX部分更新为实际信息。5.3      配置crontab定时任务使用crontab –e命令在linux平台增加定时任务,如下定义每天早上8:10运行此工具:10 8 * * * /var/ftp/zoudanhong_local/obs-notify-service/auto.sh配置完成以后,用crontal –l查看定时任务,确保无误。之后工具就会自动在每天8:10准时给客户发送邮件了~6      附录工具下载链接:https://obs-tools.obs.cn-north-1.myhuaweicloud.com/zdh/obs-notify-service.zip
  • [教程] Oracle-Rman对接华为云OBS进行数据库备份恢复指南
    1      概述1.1      背景介绍当前众多客户需要基于云存储实现低成本的数据库备份和恢复。而Oracle中的备份模块实现了和云存储的对接,可以很好的解决这个问题;华为云的对象存储可以作为客户数据库备份的存储池,以低成本,高可靠方式实现数据存储。本文讲述了基于oracle的osb模块将oracle数据库备份到华为云存储OBS桶中,以及从华为云OBS桶恢复数据到oracle。1.2      实验测试环境本文将以Windows 和Linux下 oracle11g 数据库为例进行备份和恢复的演示测试条件准备如下:OBS:华为公有云,华南-广州 Region ECS1:华为公有云,华南-广州 Region,4vCPUs | 8GB | s3.xlarge.2 CentOS 6.9 64bit,Oracle版本:11.2.0.1.0ECS2:华为公有云,华南-广州 Region,4vCPUs | 8GB | s3.xlarge.2 CentOS 6.9 64bit,Oracle版本:11.2.0.4.0WIN1:华为公有云,华南-广州 Region,4vCPUs | 8GB | s3.xlarge.2 Windows Server 2008 R2 64bit,Oracle版本:11.2.0.1.02      当前设备上备份和恢复数据库(Linux)说明:本例演示采用了Rracle-Raman默认无并发的设置,如果需要增加数据库备份和恢复的性能,需要设置并发数,具体参考5.3章节。另外,本例采用指定桶的方式,即将备份数据上传到指定的桶中,备份也可采用不指定桶的方式,具体请参考5.4章节。2.1      创建表和新建数据说明:在正常情况下,客户使用时可以略过本节,本节创建表和数据只为举例说明使用。前提:Oracle数据库安装完成。 创建表和新建数据过程: 1.      切换到oracle用户su - oracle                                              2.      进入数据库控制台,如果数据库还没有启动则需要执行 startup 命令启动数据库sqlplus / as sysdbashow parameter checkpoint      3.      创建表和新建数据,效果如下,其中test为新建的表select * from test    2.2      oracle安装osb模块1.          获取osb模块此插件包可以从oracle官网获取最新版本(参考链接:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/rcmrf/oracle-secure-backup-osb-cloud-module.html#GUID-964AADD2-3405-4476-8698-E9F2133CB5B7),也可从本文档最后的附录中链接获取2018年底的版本。图中把插件osbws_installer.zip的压缩包放到$ORACLE_HOME/lib目录下并解压使用命令unzip osbws_installer.zip解压完成后如下图根据客户自己OBS服务的AK、SK、location和endpoint参数配置,执行OBS插件的安装命令说明:AK、SK获取参考链接:https://support.huaweicloud.com/utiltg-obs/obs_11_0004.html;location、endpoint的获取参考链接:https://developer.huaweicloud.com/endpoint)java -jar osbws_install.jar -AWSID 客户AK -AWSKey 客户SK -walletDir $ORACLE_HOME/osbws_wallet -libDir $ORACLE_HOME/lib -location OBS服务的地域 -awsEndPoint OBS服务的endpoint检查安装结果后进入RMAN进行进行环境配置cat $ORACLE_HOME/dbs/osboracle.ora本例采用指定桶备份上传的方式,下图中指定桶obs-oracle-zoudanhong,桶location为cn-south-1。(即使用者需要保证在OBS平台下已经指定名称的桶,且桶区域与上一步OSB配置参数location一致,如果没有这样的桶,可在OBS平台新建一个桶)2.3      RMAN进行数据库备份到OBS桶以root用户名密码登录数据库所在设备ECS1后连接RMAN(连接命令rman target /),执行如下命令将数据库备份到OBS桶,其中标红的部分与数据库名有关,根据实际值进行修改。run {allocate channel ch1 typesbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsorcl.ora)';backup channel=ch1 database format='ora_%d_%I_%T_%s_%t_%c_%p.dbf' plus archivelog;backup channel=ch1  current controlfile  format='%d_%I_%T_%s_%t_%c_%p.conf';backup channel=ch1 spfile format='ora_%d_%I_%T_%s_%t_%c_%p.spf' ;release channel ch1;} 执行完成后,登陆OBS控制台,将会看指定桶obs-oracle-zoudanhong中已经生成了备份数据。2.4      修改数据库数据说明:本步骤是为了进行数据恢复而做的准备,实际环境运行不需要此步骤进入数据库查看归档信息:archive log list;向原数据库中增加了一条数据b并提交数据insert into test values('b');commit;删除归档数据(由于本机有最新的临时数据,为防止备份后的数据恢复后本地自动添加上最新临时数据,需要手工删除归档;异机恢复时不需要此步骤操作)2.5      RMAN进行数据库从OBS桶中读取数据进行恢复操作执行命令关闭数据库shutdown immediate;执行命令使数据库至nomount状态startup nomount;然后执行如下命令从华为OBS恢复controlfile文件,其中controlfile名称,通过rman命令list backup列举出所有的备份文件(参考4.5章节样例),参考2.3章节中备份命令中的备份文件的命名规则设置,根据自己需要选择需要恢复的文件,记下其Handle名称run {allocate channel ch1 typesbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsorcl.ora)';restore controlfile from 'ORACLE_1880733115_20190507_5_1007656283_1_1.conf';release channel ch1;}切换数据库至mount状态,然后从OBS读取并恢复数据文件。特别注意的是,在执行restore和recover命令后,一定要加入 until sequence xxxx或者until SCN xxxx这个条件,其中 xxxx 为图中执行恢复数据后标红的实际值alter database mount;run {allocate channel ch1 typesbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsorcl.ora)';restore database from tag='TAG20190507T163102';recover database from tag='TAG20190507T163102';release channel ch1;}说明:上图中的tag值相当于每个备份的ID号,通过rman命令list backup列举出所有的备份文件(参考4.5章节样例),根据自己需要选择需要恢复的文件(需要确保与前面恢复的控制文件是一致的),记下其tag值打开数据库,查询2.3中修改后的数据库已经正确恢复到2.1创建时的状态alter database open resetlogs;3      当前设备数据库备份后在另一台设备上恢复(Linux)3.1      创建表和新建数据参考2.1章节。3.2      oracle安装osb模块参考2.2章节。记得要在两台设备上都要安装osb模块。3.3      RMAN进行数据库备份到OBS桶这里使用在2.3章节中备份的文件。3.4      RMAN进行数据库从OBS桶中读取数据进行恢复操作查看2.3章节中ECS1中数据库的dbid,并登录ECS2设备,将dbid设置到设备ECS2中select dbid from v$database;set dbid=XXX;执行命令关闭数据库shutdown immediate;执行命令使数据库至nomount状态startup nomount;然后执行如下命令从华为OBS恢复controlfile文件,其中controlfile名称,通过在ECS1上执行rman命令list backup列举出所有的备份文件(参考4.5章节样例),参考2.3章节中备份命令中的备份文件的命名规则设置,根据自己需要选择需要恢复的文件,记下其Handle名称。其中标红的部分osbwsoracle与数据库名有关,根据ECS2实际值进行修改,注意与ECS1不同。run {allocate channel ch1 typesbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsoracle.ora)';restore controlfile from 'ORACLE_1880733115_20190507_5_1007656283_1_1.conf';release channel ch1;}切换数据库至mount状态,然后从OBS读取并恢复数据文件。特别注意的是,在执行restore和recover命令后,一定要加入 until sequence xxxx或者until SCN xxxx这个条件,其中 xxxx 为图中执行恢复数据后标红的实际值其中标红的部分osbwsoracle与数据库名有关,根据ECS2实际值进行修改,注意与ECS1不同。alter database mount;run {allocate channel ch1 typesbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so,SBT_PARMS=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsoracle.ora)';restore database from tag='TAG20190507T163102';recover database from tag='TAG20190507T163102';release channel ch1;}说明:上图中的tag值相当于每个备份的ID号,通过rman命令list backup列举出所有的备份文件(参考4.5章节样例),根据自己需要选择需要恢复的文件(需要确保与前面恢复的控制文件是一致的),记下其tag值打开数据库,查询2.3中被删除的数据库,已经正确恢复alter database open resetlogs;图中出现的UPGRADE错误,是由于两个设备的数据库版本不一致,相当于从ECS1的11.2.0.1.0的oracle版本恢复到ECS2的11.2.0.4.0的oracle版本,需要执行命令alter database open UPGRADE4      当前设备上备份和恢复数据库(Windows)说明:本例演示采用了Rracle-Raman默认无并发的设置,如果需要增加数据库备份和恢复的性能,需要设置并发数,具体参考5.3章节。另外,本例采用指定桶的方式,即将备份数据上传到指定的桶中,备份也可采用不指定桶的方式,具体请参考5.4章节。4.1      创建表和新建数据说明:在正常情况下,客户使用时可以略过本节,本节创建表和数据只为举例说明使用。前提:Oracle数据库安装完成。 创建表和新建数据过程:1.          oracle数据库安装完成2.          打开cmd命令行3.          进入数据库控制台,如果数据库还没有启动则需要执行 startup 命令启动数据库sqlplus / as sysdbashow parameter checkpoint4.          创建表和新建数据,效果如下,其中test为新建的表select * from test4.2      oracle安装osb模块1.          设置ORACLE_HOME和ORACLE_SID变量            从注册表中找到这两个变量,记下实际值,并通过set命令设置到cmd中2.          获取osb模块此插件包可以从oracle官网获取最新版本(参考链接:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/rcmrf/oracle-secure-backup-osb-cloud-module.html#GUID-964AADD2-3405-4476-8698-E9F2133CB5B7),也可从本文档最后的附录中获取。图中把插件osbws_installer.zip的压缩包解压将解压后的文件osbws_install.jar复制到$ORACLE_HOME\lib目录下根据客户自己OBS服务的AK、SK、location和endpoint参数配置,进入$ORACLE_HOME\lib目录下执行OBS插件的安装命令说明:AK、SK获取参考链接:https://support.huaweicloud.com/utiltg-obs/obs_11_0004.html;location、endpoint的获取参考链接:https://developer.huaweicloud.com/endpoint)java -jar osbws_install.jar -AWSID 客户AK -AWSKey 客户SK -walletDir %ORACLE_HOME%\osbws_wallet -libDir %ORACLE_HOME%\BIN -location OBS服务的地域 -awsEndPoint OBS服务的endpoint本例采用指定桶备份上传的方式,下图中指定桶obs-win-oracle-zoudanhong,桶location为cn-south-1。(即使用者需要保证在OBS平台下已经指定名称的桶,且桶区域与上一步OSB配置参数location一致,如果没有这样的桶,可在OBS平台新建一个桶)4.3      RMAN进行数据库备份到OBS桶登录ECS1设备连接RMAN(连接命令rman target /),执行如下命令将数据库备份到OBS桶,其中标红的部分与数据库名有关,根据实际值进行修改。run {allocate channel ch1 typesbt parms='SBT_LIBRARY=C:\app\Administrator\product\11.2.0\dbhome_1\BIN\oraosbws.dll,SBT_PARMS=(OSB_WS_PFILE=C:\app\Administrator\product\11.2.0\dbhome_1\database\osbwsor.ora)';backup channel=ch1 database format='ora_%d_%I_%T_%s_%t_%c_%p.dbf' plus archivelog;backup channel=ch1  current controlfile  format='%d_%I_%T_%s_%t_%c_%p.conf';backup channel=ch1 spfile format='ora_%d_%I_%T_%s_%t_%c_%p.spf' ;release channel ch1;}执行完成后,登陆OBS控制台,将会看指定桶obs-win-oracle-zoudanhong中已经生成了备份数据。 4.4      修改数据库数据向原数据库中增加了一条数据b并提交数据insert into test values('b');commit;查询下图中的归档数据并删除(由于本机有最新的临时数据,为防止备份后的数据恢复后本地自动添加上最新临时数据,需要手工删除归档;异机恢复时不需要此步骤操作) 4.5      查询备份文件的handle名和TAG值通过rman命令list backup列举出所有的备份文件,参考2.3中备份命令中的备份设置,根据自己需要选择需要备份的文件(需要确保与前面恢复的控制文件是一致的),记下其Handle名称和TAG值。  4.6      RMAN进行数据库从OBS桶中读取数据进行恢复操作执行命令使数据库至nomount状态然后执行如下命令从华为OBS恢复controlfile文件,命令中的标红部分使用实际值,其中controlfile名称参考4.5章节run {allocate channel ch1 typesbt parms='SBT_LIBRARY=C:\app\Administrator\product\11.2.0\dbhome_1\BIN\oraosbws.dll,SBT_PARMS=(OSB_WS_PFILE=C:\app\Administrator\product\11.2.0\dbhome_1\database\osbwsor.ora)';restore controlfile from 'OR_2932857089_20190509_5_1007812302_1_1.conf';release channel ch1;}切换数据库至mount状态,然后从OBS读取并恢复数据文件。命令中的标红部分controlfile使用实际值,参考4.5章节特别注意的是,在执行restore和recover命令后,一定要加入 until sequence xxxx 或者until SCN xxxx这个条件,其中 xxxx 为图中执行恢复数据后标红的实际值alter database mount;run {allocate channel ch1 typesbt parms='SBT_LIBRARY=C:\app\Administrator\product\11.2.0\dbhome_1\BIN\oraosbws.dll,SBT_PARMS=(OSB_WS_PFILE=C:\app\Administrator\product\11.2.0\dbhome_1\database\osbwsor.ora)';restore database from tag='TAG20190509T114912';recover database from tag='TAG20190509T114912';release channel ch1;}打开数据库,查询2.3中修改后的数据库已经正确恢复到2.1创建时的状态alter database open resetlogs;5      注意事项5.1      oracle的自带osb模块在安装时长时间download无反应oracle12以上的版本中自带了osb模块,如果安装时长时间download无反应,可以考虑去官网下载最新osb模块进行安装,或使用代理服务器进行安装。注:通常上午下载速度较快5.2      数据库所在的设备与OBS桶不在一个区域,备份恢复时间长数据库所在的设备与OBS桶不在一个区域,比如数据库安装在华北的虚拟机,而将数据备份到华南的OBS桶,则在备份和恢复时由于网速的关系,耗费时间较长。解决方案:建议数据库和OBS桶在同一个区域,或者是较近的区域。5.3      oracle数据库备份和恢复默认没有并发,如果要提高带宽性能,需要增加并发设置目前实测最高的数据库备份上传带宽性能最高在8Gbit/s,最高的数据库恢复下载带宽性能最高在17Gbit/s,并发数在15并发左右。登录rman,先进行osb对接和并发参数配置,此处以并发数15为例:configure channel device type sbt parms='SBT_LIBRARY=/u01/app/oracle/product/11.2.0/dbhome_1/lib/libosbws.so ENV=(OSB_WS_PFILE=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/osbwsdb.ora)';configure default device type to SBT;configure device type SBT parallelism 15;备份命令如下:backup database format='ora_%d_%I_%T_%s_%t_%c_%p.dbf' plus archivelog;backup current controlfile format='%d_%I_%T_%s_%t_%c_%p.conf';backup spfile format='ora_%d_%I_%T_%s_%t_%c_%p.spf';恢复时命令如下,其中红色部分根据实际情况填写:restore controlfile from 'DB_1771527802_20190513_932_1008137953_1_1.conf';restore database from tag='TAG20190513T035229';recover database from tag='TAG20190513T035229';5.4      oracle数据库备份和恢复优先采用指定OBS桶的方式进行备份和恢复oracle数据库备份和恢复对接OBS桶,可以采用指定已存在的OBS桶进行对接,也可以不指定OBS桶的方式进行对接,如果采用后一种方式,则OSB插件会根据就否存在oracle-data-account为前缀,且桶所在区域与OSB插件配置时的location一致的桶,如果存在就直接使用此OBS桶,如果不存在会根据oracle-data-account前缀和OSB插件配置时的location新创建一个OBS桶。oracle-data-account中的account与OSB插件生成的配置文件中的“CREDENTIAL_ALIAS”有关。注:目前不指定桶的方式可能会出现一些由于OSB插件造成的不可控的问题,建议使用指定桶的方式进行备份和恢复。具体信息还可参考oracle官网对指定桶参数OSB_WS_BUCKET的介绍:https://docs.oracle.com/database/121/RCMRF/web_services.htm#RCMRF90491    6      附录osb模块下载参考链接:https://chongchongbucket005.obs.cn-north-1.myhuaweicloud.com/oracle/osbws_installer.zip
  • [教程] Windows/Linux平台设置OBS obsutil工具定时任务(e.g, 定时同步增量上传指定目录中的文件)
    1      操作场景利用obsutil工具,可以在Windows/Linux平台设置定时任务,完成定时同步增量上传指定目录中的文件,或者定时将成功上传的文件移动另一个本地目录等功能。本文以“定时同步增量上传指定目录中的文件” 功能为例,讲述如何在2种平台上进行定时任务配置。2      前提条件a)     已经从OBS官网上下载了指定版本的obsutil工具包,有Windows 64位版本和Linux 64位版本供选择;b)     Windows平台:需要确认能运行打开任务计划程序(在Windows中搜索任务计划程序并成功打开),如图2.1所示。Linux平台:需要确认已正常开启crond定时任务计划服务(运行 service crond status 命令可查看是否开启该服务),如图2.2所示。图2.1 Windows平台搜索任务计划程序并打开图2.2 Linux平台确认正常开启了crond定时任务计划服务c)     使用obsutil之前,需要配置obsutil与OBS的对接信息,包括OBS终端节点地址(Endpoint)和访问密钥(AK和SK)。获得OBS的认证后,才能使用obsutil执行OBS桶和对象的相关操作。Windows平台:使用配置命令 obsutil config -i=ak -k=sk -e=endpoint,之后使用命令 obsutil ls –s,如果返回结果中包含“Bucket number is:”表明配置正确。Linux平台:使用配置命令 ./obsutil config -i=ak -k=sk -e=endpoint,之后使用命令 ./obsutil ls –s,如果返回结果中包含“Bucket number is:”表明配置正确。3      配置步骤(Windows运行平台)3.1      创建任务右击“任务计划程序库”,选中“创建任务”。添加名称、描述,安全选项根据实际需要进行选择。3.2      配置“触发器”页签高级设置根据实际需要进行选择,下图中选择无限期每隔1小时执行1次任务。 3.3      配置“操作”页签点击“操作”页签,新建操作,操作类型选择“启动程序”。程序或脚本选择的是obutil工具(C:\Users\Administrator\obsutil_windows_amd64\obsutil.exe),根据obsutil工具存放的实际路径进行选择。添加参数为 sync C:\Users\Administrator\Downloads\ obs://chongchong-test-win/upload/Downloads/,此命令实现将C:\Users\Administrator\Downloads\目录下的数据同步增量上传到chongchong-test-win桶的/upload/Downloads/目录下。3.4      配置“条件”页签根据实际需要进行选择配置,此处中采用默认值。3.5      配置“操作”页签根据实际需要进行选择配置,引处采用默认值。按照上述3.1-3.5的配置,Windows平台会每隔1小时,自动将 C:\Users\Administrator\Downloads\ 目录下的数据同步增量上传到chongchong-test-win桶的 /upload/Downloads/ 目录下。 4      配置步骤(Linux运行平台)a)     执行 crontab –e 命令,打开编辑定时任务的配置文件。b)    进入Insert模式开始编辑配置文件。30 21 * * * cd /root && nohup ./obsutil sync /home/Downloads/ obs://bucket-test/Downloads/ &>obsutil_crond.log &假设obsutil工具位于/root目录下,上述配置的定时任务含义为:每天21:30进入/root目录下,执行增量上传/home/Downloads/文件夹到obs://bucket-test/Downloads/桶内并将命令的输出内容重定向到/root下的obsutil_crond.log中。c)     按Esc退出Insert模式,并输入:wq保存并退出。d)    执行命令:crontab -l,查看当前用户已配置的定时任务,确认配置成功。     注:Ø  crontab如何配置,可以参考链接https://www.cnblogs.com/coffy/p/5608095.html。
总条数:1487 到第
上滑加载中