• [技术干货] OBS JAVA SDK 实践8:批量下载文件(e.g 下载文件夹)
    1      背景介绍 & 效果展示通过OBS JAVA SDK可以实现批量下载文件,如下载文件夹,效果如下。注:有关标准存储、低频访问、归档存储三种存储类型的更多信息,参考链接:https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0050321036.html图1 桶下面有“FunctionGraphDemo-VideoConvert/”为前缀的文件夹图2 把上图中的文件夹下载到本地"C:/software/"目录下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 fileLocatePrefix = "C:/software/";    // 需要下载到本地哪个目录,这里面举例"C:/software/"                                       ListObjectsRequest request = new ListObjectsRequest(bucketName);                                       // 指定下载"FunctionGraphDemo-VideoConvert/"文件夹                                       request.setPrefix("FunctionGraphDemo-VideoConvert/");                                       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());                                                 DownloadFileRequest requestDownload = new DownloadFileRequest(bucketName, obsObject.getObjectKey());                                                 requestDownload.setDownloadFile(fileLocatePrefix+obsObject.getObjectKey());                                                 // 设置分段下载时的最大并发数                                                 requestDownload.setTaskNum(5);                                                 // 设置分段大小为10MB                                                 requestDownload.setPartSize(10 * 1024 * 1024);                                                 // 开启断点续传模式                                                 requestDownload.setEnableCheckpoint(true);                                                  try{                                                           // 进行断点续传下载                                                           DownloadFileResult resultDownload = obsClient.downloadFile(requestDownload);                                                  }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());                                                  }                                                   }                                                  System.out.println("------------------------------");                                                  request.setMarker(result.getNextMarker());                                       }while(result.isTruncated());                 }}3      附录链接OBS JAVA SDK使用方法,官网参考链接:https://support.huaweicloud.com/sdk-java-devg-obs/zh-cn_topic_0142815558.html
  • [教程] 利用函数服务对新上传的OBS对象进行视频转码
    1      简介利用华为云的媒体转码(MPC)服务可以对OBS桶中的视频对象转码为适应各种终端(PC、TC、Phone等)播放的格式,同时华为云的函数工作流(FunctionGraph)服务,通过设定新对象上传事件触发视频转码函数。2      效果展示新建一个北京区域的OBS桶obs-chongchong-mpc,并新建两个文件夹,video-input1/ 存放新上传的源视频,video-output1/ 存放转码后的目标视频(目标格式为m3u8)。然后向video-input1/ 中上传两个mp4结尾的源视频文件。约1分钟后,会在video-output1/ 中生成这两个源视频文件转码后的目标视频文件夹(子目录为源视频对象的文件路径命名)。3      详细操作步骤3.1      创建北京一区域的OBS桶目前媒体转码MPC服务中视频转码功能只支持北京一,所以目前暂时只能使用北京一区域的OBS桶。登录华为云OBS控制台界面,这里举例新建obs-chongchong-mpc为名称的北京一区域OBS桶,并在上面新建两个文件夹,video-input1/ 存放新上传的源视频,video-output1/ 存放转码后的目标视频。注:如果需要转换多种格式的源视频,需要添加多个后缀不同的事件通知。 3.2      配置媒体转码MPC服务登录华为云MPC控制台界面,选择北京一区域,在“云资源授权---桶授权”页签下找到3.1中新建的obs-chongchong-mpc 桶,并点击授权,使之变成已授权的状态。3.3      配置消息通知SMN服务登录华为云SMN控制台界面,选择北京一区域,在“主题管理---主题”页签点击“创建主题”按钮生成名称为TestTopicMsg 的主题。     创建好以后,点击TestTopicMsg主题,进入到该“主题详情”页面。      点击“设置主题策略”按钮,选中“可发布消息的服务”列表中的OBS服务和MPC服务,并点击确定,这样这两个服务才可以触发此消息通知主题。之后回到3.1中创建的OBS桶中,创建消息通知事件,进入到桶详情界面,在“事件通知”页签下点击“创建”按钮,在弹出的“创建事件通知”对话框中填写消息信息:事件通知名称输入:(自定义)事件选择:“ObjectCreated”前缀输入:“video-input1/”(步骤3.1中video-input1定义的源视频上传目录)后缀输入:“.mp4”(设定自己需要进行转码的视频格式后缀)通知类型中SMN主题,选择刚创建的北京一TestTopicMsg的SMN主题。     同理再创建后缀为.avi的事件通知,如下图所示:注:如果需要转换多种格式的源视频,需要添加多个后缀不同的事件通知。3.4      创建统一身份认证IAM服务委托登录华为云IAM控制台界面,在“委托”页签点击“创建委托”按钮,弹出“创建委托”界面。填写委托信息:委托名称输入:“fgs_trust” (自定义)委托类型选择:“云服务”云服务选择:“FunctionGraph”持续时间选择:“永久”权限选择:分别修改“全局服务>全局”、“全局服务>对象存储服务”、“华北-北京一>cn-north-1”的权限集,选择“基本”。信息填写完毕后,点击“确定”按钮即创建成功。3.5      创建函数工作流FunctionGraph服务函数登录华为云FunctionGraph控制台界面,选择北京一区域,在“函数---函数列表”页签点击“创建函数”按钮,弹出“创建委托”界面。填写函数信息:函数名称输入:“JavaTest”所属应用选择:“default”委托名称选择:“fg-trust”(选择3.4章节创建的IAM委托名称)运行时语言选择:“Java8”函数执行入口输入:com.huawei.demo.Transcoding.smnTest代码上传方式,选择文件本地MPCTest.zip进行上传(MPCTest.zip为编译后的JAVA包,需要先下载到本地再上传,下载地址:https://obs-tools.obs.cn-north-1.myhuaweicloud.com/zdh/MPCTest.zip)。信息填写完毕后,点击“创建函数”按钮即创建成功。     创建好以后,在“函数列表”页面,点击JavaTest函数,进入到该详情页面。      选择“配置”页面,配置相关参数,内存选择256M,执行超时时间填写10,环境变量需要填写2个键:pathDst键的值为3.1中配置的存放转码后目标视频目录video-output1/,templateID键的值为MPC媒体转码平台的模板ID,此处填写模板ID为7000570的MPC预置视频转码模板,更多的模板设置请参考4.1章节。     选择“触发器”页面,订阅SMN消息主题,触发器类型选择“消息队列服务(SMN)”,主题名称选择3.3创建的TestTopicMsg 消息主题,点击“确定按钮”,最终再点击下右上角的“保存”按钮,将所有的函数配置进行保存。     之后向3.1中的OBS桶video-input1目录中上传mp4和avi为结尾的视频对象时,都会相应转换到目标目录video-output1中,效果查看2章节的展示。4      注意事项4.1      MPC媒体转码平台的模板ID的选择3.5章节中的templateID键的值为MPC媒体转码平台的模板ID,模板ID来自两种,一种是系统预置模板(由于系统预置模板是根据分辨率、码率等做的最佳配置,所以建议优先使用系统预置模板),另一各是自定义模板和模板组(如何创建,参考链接:https://support.huaweicloud.com/usermanual-mpc/mpc010008.html)。本文3章节中采用的是系统预置模板,模板ID为7000570。5      附录相关控制台链接:OBS控制台:https://storage.huaweicloud.com/obsMPC控制台:https://console.huaweicloud.com/mpcSMN控制台:https://console.huaweicloud.com/smnIAM控制台:https://console.huaweicloud.com/iamFunctionGraph控制台:https://console.huaweicloud.com/ functiongraph  
  • [技术干货] OBS JAVA SDK Demo:设置桶策略
    1      背景介绍OBS桶策略可以给特定用户设置特定的权限。下面代码展示通过JAVA SDK给用户桶设置高级桶策略。2      代码展示需要先下载OBS最新的JAVA SDK,参考官网链接:https://developer.huaweicloud.com/sdk?OBS,并在自己的项目中导入SDK中的JAR包。前提条件:已创建OBS桶,例如my-bucket123设置的桶策略为:给用户userB给予桶的所有权限和桶内所有对象的读权限桶策略格式如下,其中domain和user请根据实际账号ID和用户ID进行配置:{  "Statement": [    {      "Sid": "Stmt1375240018062",      "Action": [        "*"      ],      "Effect": "Allow",      "Resource": "my-bucket123",      "Principal": {        "ID": [          "domain/c41**************************8cf:user/053**************************2c4 "        ]      }    },    {      "Sid": "Stmt1375240018063",      "Action": [        "Get*"      ],      "Effect": "Allow",      "Resource": "my-bucket123/*",      "Principal": {        "ID": [          "domain/c41**************************8cf:user/053**************************2c4 "        ]      }    }  ]}Demo代码如下:package samples_java;import com.obs.services.ObsClient;import com.obs.services.ObsConfiguration;import com.obs.services.exception.Ob**ception;import java.io.IOException;public class BucketTestSample {     private static final String endPoint = "XXX";     private static final String ak = "XXX";     private static final String sk = "XXX";     private static ObsClient obsClient;     private static String bucketName = "my-bucket123";         public static void main(String[] args)             throws IOException {         ObsConfiguration config = new ObsConfiguration();         config.setSocketTimeout(30000);         config.setConnectionTimeout(10000);         config.setEndPoint(endPoint);         try {             obsClient = new ObsClient(ak, sk, config);             String  Policy = "{\"Statement\":[{\"Sid\":\"Stmt1375240018062\",\"Action\":[\"*\"],\"Effect\":\"Allow\",\"Resource\":\"my-bucket123\",\"Principal\":{\"ID\":[\"domain/c41**************************8cf:user/053**************************2c4\"]}},{\"Sid\":\"Stmt1375240018063\",\"Action\":[\"Get*\"],\"Effect\":\"Allow\",\"Resource\":\"my-bucket123/*\",\"Principal\":{\"ID\":[\"domain/c41**************************8cf:user/053**************************2c4\"]}}]}";             obsClient.setBucketPolicy(bucketName,Policy);         } 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());         } finally {             if (obsClient != null) {                 try {                     obsClient.close();                 } catch (IOException e) {                     System.out.println(e);                 }             }         }     } }3      效果展示设置后的桶策略如下:userB在桶内上传文件失败(没有权限),下载文件成功4      附录OBS JAVA SDK使用,官网参考链接:https://support.huaweicloud.com/sdkreference-obs/obs_02_0001.html更多桶策略的具体格式(JSON格式字符串)请参考《对象存储服务API参考》:https://support.huaweicloud.com/api-obs/zh-cn_topic_0100846742.html
  • [教程] 开源大数据平台Hadoop和Spark对接OBS操作指南
    1      背景介绍华为云对象存储服务可以提供稳定、安全、高效、易用的云存储服务。当前,华为云OBS可以与Hadoop和Spark大数据生态进行对接,为用户提供计算存储分离的大数据解决方案。该方案具有高性能、低成本的优势,且无扩容问题,使用维护更加方便简洁。本操作指导书旨在帮助华为云用户在开源大数据平台Hadoop和Spark上**速对接OBSFileSystem组件,更好的使用华为云对象存储OBS进行大数据计算。2      部署视图2.1      安装版本硬件:1master+3core(配置:8U32G,操作系统:Centos7.5)软件:Hadoop 2.8.3、Spark 2.3.02.2      部署视图开源大数据平台已安装完成,本文主要介绍在Hadoop和Spark平台中通过OBSFileSystem组件与OBS进行对接的操作步骤。对接OBS后,用户的数据即可存储在OBS平台,通过Hadoop和Spark进行大数据计算,实现计算存储分离。 3      开源大数据平台对接OBS操作步骤3.1      Hadoop平台更新OBSFileSystem3.1.1        上传obs的jar包1、  从网址https://bbs.huaweicloud.com/forum/thread-12142-1-1.html 中下载OBSFileSystem后进行解压缩,其中Package目录中包含obs所需要的jar包,列表如下:2、  将obs所需要的jar包放在/mnt/obsjar目录中3.1.2        增加hadoop-huaweicloud的jar包1、  将hadoop-huaweicloud的jar包拷贝到如下各个目录中(/home/modules/hadoop-2.8.3/share/hadoop/common/lib;/home/modules/hadoop-2.8.3/share/hadoop/tools/lib)命令:cp /mnt/obsjar/hadoop-huaweicloud-2.8.3.13.jar /home/modules/hadoop-2.8.3/share/hadoop/common/lib/.cp /mnt/obsjar/hadoop-huaweicloud-2.8.3.13.jar /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/.3.1.3        增加esdk-obs-java的jar包1、  将esdk-obs-java的jar包拷贝到如下各个目录中(/home/modules/hadoop-2.8.3/share/hadoop/common/lib;/home/modules/hadoop-2.8.3/share/hadoop/tools/lib)命令:cp /mnt/obsjar/esdk-obs-java-3.0.1.jar /home/modules/hadoop-2.8.3/share/hadoop/common/lib/.cp /mnt/obsjar/esdk-obs-java-3.0.1.jar /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/.3.1.4        更换java-xmlbuilder的jar包1、  备份并删除hadoop-2.8.3所有目录中原有的java-xmlbuilder-0.4.jar(通过find查找后删除)。命令:rm -rf /home/modules/hadoop-2.8.3/share/hadoop/common/lib/java-xmlbuilder-0.4.jarrm -rf /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/java-xmlbuilder-0.4.jar2、  将java-xmlbuider-1.1.jar包拷贝到如下各个目录中进行替换命令:cp /mnt/obsjar/java-xmlbuider-1.1.jar /home/modules/hadoop-2.8.3/share/hadoop/common/lib/.cp /mnt/obsjar/java-xmlbuider-1.1.jar /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/.3.1.5        更换okhttp的jar包1、  备份并删除hadoop-2.8.3所有目录中原有的okhttp-2.4.0.jar(通过find查找后删除)。命令:rm -rf /home/modules/hadoop-2.8.3/share/hadoop/common/lib/okhttp-2.4.0.jarrm -rf /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/okhttp-2.4.0.jarrm -rf /home/modules/hadoop-2.8.3/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/okhttp-2.4.0.jarrm -rf /home/modules/hadoop-2.8.3/share/hadoop/hdfs/lib/okhttp-2.4.0.jar2、  将java-xmlbuider-1.1.jar包拷贝到如下各个目录中进行替换命令:cp /mnt/obsjar/okhttp-3.10.0.jar /home/modules/hadoop-2.8.3/share/hadoop/common/lib/.cp /mnt/obsjar/okhttp-3.10.0.jar /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/.cp /mnt/obsjar/ okhttp-3.10.0.jar /home/modules/hadoop-2.8.3/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/.cp /mnt/obsjar/okhttp-3.10.0.jar /home/modules/hadoop-2.8.3/share/hadoop/hdfs/lib/.3.1.6        更换okio的jar包1、  备份并删除hadoop-2.8.3所有目录中原有的okio-1.4.0.jar(通过find查找后删除)。命令:rm -rf /home/modules/hadoop-2.8.3/share/hadoop/common/lib/okio-1.4.0.jarrm -rf /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/okio-1.4.0.jarrm -rf /home/modules/hadoop-2.8.3/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/okio-1.4.0.jarrm -rf /home/modules/hadoop-2.8.3/share/hadoop/hdfs/lib/okio-1.4.0.jar2、  将java-xmlbuider-1.1.jar包拷贝到如下各个目录中进行替换命令:cp /mnt/obsjar/okio-1.14.0.jar /home/modules/hadoop-2.8.3/share/hadoop/common/lib/.cp /mnt/obsjar/okio-1.14.0.jar /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/.cp /mnt/obsjar/ okio-1.14.0.jar /home/modules/hadoop-2.8.3/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/.cp /mnt/obsjar/okio-1.14.0.jar /home/modules/hadoop-2.8.3/share/hadoop/hdfs/lib/.3.2      Hadoop平台更新配置文件操作步骤在/home/modules/hadoop-2.8.3/etc/hadoop目录中配置core-site.xml。注:fs.defaultFS 、fs.obs.access.key、fs.obs.secret.key、fs.obs.endpoint请根据实际情况进行修改。<property>   <name>fs.defaultFS</name>   <value>hdfs://ecs-bigdata-hdtest-0000.novalocal:8020</value> </property><property>   <name>hadoop.tmp.dir</name>   <value>/home/modules/hadoop-2.8.3/tmp</value> </property> <property>   <name>fs.obs.access.key</name>   <value>myaccesskey</value> </property> <property>   <name>fs.obs.secret.key</name>   <value>mysecretkey</value> </property> <property>   <name>fs.obs.endpoint</name>   <value>myendpoint</value> </property> <property>   <name>fs.obs.buffer.dir</name>   <value>/home/modules/data/buf</value> </property> <property>   <name>fs.obs.impl</name>   <value>org.apache.hadoop.fs.obs.OBSFileSystem</value> </property> <property>   <name>fs.obs.connection.ssl.enabled</name>   <value>false</value> </property> <property>   <name>fs.obs.fast.upload</name>   <value>true</value> </property>配置成功后即可执行hadoop命令3.3      Spark平台更新OBSFileSystem3.3.1        增加obs的jar包1、  备份并删除spark-2.3.0所有目录中原有的版本较低的java-xmlbuilder-X.X.jar、okhttp-X.X.X.jar和okio-X.X.X.jar(通过find查找后删除)。命令:rm -rf /home/modules/spark-2.3.0/jars/java-xmlbuilder*rm -rf /home/modules/spark-2.3.0/jars/okhttp*rm -rf /home/modules/spark-2.3.0/jars/okio*2、  将obs的jar包(hadoop-huaweicloud-2.8.3.13.jar、esdk-obs-java-3.0.1.jar、java-xmlbuilder-1.1.jar、okhttp-3.10.0.jar和okio-1.14.0.jar)拷贝到如下各个目录(/home/modules/spark-2.3.0/jars/)后即可启动spark使用OBS进行大数据计算。命令:cp /mnt/obsjar/hadoop-huaweicloud-2.8.3.13.jar /home/modules/spark-2.3.0/jars/.cp /mnt/obsjar/esdk-obs-java-3.0.1.jar /home/modules/spark-2.3.0/jars/.cp /mnt/obsjar/java-xmlbuilder-1.1.jar /home/modules/spark-2.3.0/jars/.cp /mnt/obsjar/okhttp-3.10.0.jar /home/modules/spark-2.3.0/jars/.cp /mnt/obsjar/okio-1.14.0.jar /home/modules/spark-2.3.0/jars/.
  • [教程] 采用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
总条数:1625 到第 页
上滑加载中