兼容工具
所有文档

          对象存储 BOS

          兼容工具

          兼容说明

          大多数基于AWS S3开发的工具都可以设置访问地址。通过设置这些工具的访问地址为BOS的AWS S3服务域名,您就可以使用这些工具访问BOS。下面以一些常用SDK和工具为例,说明如何对接BOS。

          说明:

          字串 含义
          $ACCESS_KEY 百度智能云账号的Access key
          $SECRET_KEY 百度智能云账号的Secret key

          AWS SDK for Python

          1. 安装Boto类库:

            pip install boto3
          2. 使用AWS SDK for python访问Bos

            import boto3
            from botocore.client import Config
            s3 = boto3.client(
                    's3',
                    aws_access_key_id=$ACCESS_KEY,
                    aws_secret_access_key=$SECRET_KEY,
                    endpoint_url='http://s3.bj.bcebos.com',
                    region_name='bj',
                    config = Config(
                        signature_version='s3v4',
                    )
                 )
            # Use S3 client
            s3.create_bucket(...)

          AWS SDK for Java

          1. 添加依赖包到pom.xml

            //添加下面AWS Java SDK依赖包到pom.xml
            <dependency>
              <groupId>com.amazonaws</groupId>
              <artifactId>aws-java-sdk</artifactId>
              <version>1.11.82</version>
            </dependency>
          2. 使用AWS SDK for java访问Bos

            import java.io.IOException;
            import com.amazonaws.services.s3.AmazonS3;
            import com.amazonaws.services.s3.AmazonS3Client;
            import com.amazonaws.services.s3.model.*;
            import com.amazonaws.services.s3.S3ClientOptions;
            import com.amazonaws.auth.BasicAWSCredentials;
            import com.amazonaws.SDKGlobalConfiguration;
              
            public class S3Sample {
                public static void main(String[] args) throws IOException {
                    System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");
                    AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials($ACCESS_KEY,$SECRET_KEY));
                    s3.setEndpoint("s3.bj.bcebos.com");
                    S3ClientOptions options = new S3ClientOptions();
                    options.withChunkedEncodingDisabled(true); // Must to have
                    s3.setS3ClientOptions(options);
                     
                    // Use S3 Client
                    s3.createBucket(...);
                }
              
            }
          3. 编译代码

            mvn package

          AWS PHP SDK

          1. 安装:下载aws.phar,更多安装方式见AWS PHP SDK安装方式
          2. 使用AWS SDK for PHP访问Bos

            <?php    
            require 'aws.phar';                  
            use Aws\S3\S3Client;
            use Aws\Exception\AwsException;     
                           
            $s3Client = new S3Client([          
                'version'     => 'latest',
                'region'      => 'bj',
                'credentials' => [
                    'key'    => $ACCESS_KEY,
                    'secret' => $SECRET_KEY,
                ],
                'endpoint' => 's3.bj.bcebos.com',
                'signature_version' => 'v4',
            ]);
             
            $buckets = $s3Client->listBuckets();
            foreach ($buckets['Buckets'] as $bucket){
                echo $bucket['Name']."\n";
            }

          AWS Golang SDK

          1. 安装

            go get -u github.com/aws/aws-sdk-go
          2. 使用AWS SDK for Golang访问Bos

            import (
                "github.com/aws/aws-sdk-go/aws"                                            
                "github.com/aws/aws-sdk-go/aws/session"
                "github.com/aws/aws-sdk-go/service/s3"
                "github.com/aws/aws-sdk-go/aws/credentials"
            )
            conf := &aws.Config{
                    Region:           aws.String("bj"),
                    Endpoint:         aws.String("s3.bj.bcebos.com"),
                    Credentials:      credentials.NewStaticCredentials($ACCESS_KEY, $SECRET_KEY,, ""),
                }
            sess := session.Must(session.NewSessionWithOptions(session.Options{Config:*conf}))
            svc := s3.New(sess)
            getObjectParams := &s3.GetObjectInput{
                    Bucket:             aws.String("my-bucket"), 
                    Key:                aws.String("my-object"), 
            }
            getObjectResp, err := svc.GetObject(getObjectParams)
            if err != nil {
                fmt.Println(err.Error())
                return
            }

          AWS CLI工具

          1. 安装AWS CLI工具

            pip install awscli
          2. 使用AWS CLI访问BOS
          • 编辑配置文件

            $ cat ~/.aws/config
            [default]
            s3 =
                signature_version = s3v4
            region = bj
                
            $ cat ~/.aws/credentials
            [default]
            aws_access_key_id = $ACCESS_KEY
            aws_secret_access_key = $SECRET_KEY
          • 执行命令

            aws --endpoint-url http://s3.bj.bcebos.com s3 ls

          Hadoop S3A工具

          S3A为hadoop官方提供的在hadoop系统中使用S3的工具包。通过S3A您可以像操作hdfs一样操作S3存储,目前BOS已经支持大部分常用的S3A的功能。关于S3A更为详细的介绍可参见:S3 Support in Apache HadoopHadoop-AWS module: Integration with Amazon Web Services

          1. 下载依赖包

            • 确保hadoop系统中存在如下依赖包:

              • aws-java-sdk-1.11.82.jar
              • aws-java-sdk-core-1.11.82.jar
              • aws-java-sdk-kms-1.11.82.jar
              • aws-java-sdk-s3-1.11.82.jar
            • 使用BOS适用版Jar包:由于目前BOS对S3的部分功能暂未实现兼容,为了更好的产品体验,请务必使用该定制版的工具包。

              BOS适用版Jar包 MD5码
              hadoop-aws-2.8.0.jar 6ffbdc9352b9399e169005aeeb09ee98
          2. 修改S3A的相关配置

            <property>
            	<name>fs.s3a.endpoint</name>
            	<value>http://s3.bj.bcebos.com</value> 
            </property> 
            <property>
            	<name>fs.s3a.signing-algorithm</name>
            	<value>AWSS3V4SignerType</value>
            </property>	
            <!-- 开启bos后端接口-->
            <property>
                <name>fs.s3a.bos.compat.access</name>
            	<value>true</value>
            </property>
            <property>
            <name>fs.s3a.access.key</name>
            <value>$ACCESS_KEY</value>
            </property>
            <property>
            <name>fs.s3a.secret.key</name>
            <value>$SECRET_KEY</value>
            </property>
          3. 使用S3A在hadoop环境下体验BOS服务,执行命令

            hadoop fs -ls s3a://$YOUR_BUCKET_NAME
          4. 如何自行修改hadoop-aws

            (1). 下载hadoop源码 (2). 修改hadoop-2.8.0-src/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3ClientFactory.java文件。由于BOS暂未支持Chunked Upload,而Java sdk默认写操作会使用该方式,所以需要在代码中关闭sdk的这个操作。

            // 找到s3a使用的aws client,例如:
            // 在createAmazonS3Client函数下的
            // AmazonS3 s3 = new AmazonS3Client(credentials, awsConf);
            // 为aws client添加禁止chunkedencoding
            s3.setS3ClientOptions(new S3ClientOptions().withChunkedEncodingDisabled(true));

            (3). 编译得到jar包

            cd hadoop-2.8.0-src/hadoop-tools/hadoop-aws
            mvn package

          CloudBerry Explorer for Amazon S3

          CloudBerry Explorer for Amazon S3是CloudBerry Lab提供的S3图形化数据管理软件,图形化界面非常强大,支持数据从本地到云端的上传、下载、同步、删除等管理操作。

          现在百度智能云也支持通过CloudBerry Explorer来管理BOS上的资源了!

          1. 选择和您操作系统相匹配的软件版本,下载后安装软件。

            说明: 该软件支持免费和付费两个版本。您可以直接使用免费版本。

          2. 安装完成后先配置云存储,选择“S3 Compatible”:

          3. 添加新的S3 Compatible的账号,其中显示名可以填写BOS,服务点即BOS的服务域名,访问密钥和密码Key填写百度智能云的AK/SK。AWS S3兼容服务域名暂时不支持HTTPS,请去掉“使用SSL”的勾选,Signature version选4。

          4. 点击“测试连接”测试连通性,显示“Connection success”表示连通成功。
          5. 下面就可以使用CloudBerry Explorer进行各种数据管理啦!

          上一篇
          兼容接口
          下一篇
          常见问题