阿里云OSS-HDFS/OSS
1. 阿里云OSS基本使用
1.1 配置和初始化
首先,需要配置一些基本的属性,如endpoint、accessKeyId、accessKeySecret和bucketName。这些属性可以在application.yml
中配置,也可以通过代码直接设置。以下是一个示例配置类和配置文件:
AliOssProperties类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
application.yml的配置
sky:
alioss:
access-key-id: xxxxx
access-key-secret: xxxxx
bucket-name: xxxxx
endpoint: xxxxx
1.2 上传文件
使用以下代码可以上传文件到OSS:
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;
@Data
@AllArgsConstructor
public class AliOssUtil {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
public String upload(byte[] bytes, String objectName) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
StringBuilder stringBuilder = new StringBuilder("https://");
stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);
return stringBuilder.toString();
}
}
2. OSS-HDFS服务使用
2.1 基本概念
OSS-HDFS服务(JindoFS服务)是一个云原生数据湖存储功能,完全兼容HDFS文件系统接口,满足大数据和AI等领域的数据湖计算场景。
2.2 功能特性
- 回收站:误删除文件时,文件会转至回收站,支持自定义数据保存时间。
- 导出清单:将文件清单导出为JSON文件,方便元数据统计分析。
- 导出审计日志:记录客户端请求的查询、修改、删除文件元数据的操作审计日志。
- 冷热分层存储:支持数据的冷热分层存储,降低总存储成本。
- 元数据转换:支持将OSS元数据转换为OSS-HDFS元数据。
2.3 使用步骤
- 创建VPC环境:创建专有网络VPC并添加云服务器(ECS)实例。
- 安装Java环境:在ECS实例上安装JDK并配置环境变量。
- 安装SSH:安装并启用SSH服务。
- 安装Hadoop:下载并安装Hadoop。
- 配置Hadoop:配置Hadoop的core-site.xml文件,添加OSS-HDFS服务实现类和AccessKey。
配置示例
<configuration>
<property>
<name>fs.AbstractFileSystem.oss.impl</name>
<value>com.aliyun.jindodata.oss.JindoOSS</value>
</property>
<property>
<name>fs.oss.impl</name>
<value>com.aliyun.jindodata.oss.JindoOssFileSystem</value>
</property>
</configuration>
- 访问OSS-HDFS服务:使用Hadoop命令行工具访问OSS-HDFS服务。
示例命令
# 新建目录
hdfs dfs -mkdir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/
# 上传文件
hdfs dfs -put /root/workspace/examplefile.txt oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt
# 查看目录信息
hdfs dfs -ls oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/
# 查看文件信息
hdfs dfs -ls oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt
# 查看文件内容
hdfs dfs -cat oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt
# 拷贝目录或文件
hdfs dfs -cp oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir1/ oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir2/subdir1/
# 移动目录或文件
hdfs dfs -mv oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/srcdir/ oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destdir/
# 下载文件
hdfs dfs -get oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt /tmp/
# 删除目录或文件
hdfs dfs -rm oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destfolder/