1. 服务介绍
OSS-HDFS服务(JindoFS 服务)是一款云原生数据湖3.0存储产品,基于统一的元数据管理能力,在完全兼容 HDFS 文件系统接口的同时,提供充分的 POSIX 能力支持,能更好的满足大数据和 AI 领域丰富多样的数据湖计算场景。
通过OSS-HDFS服务,无需对现有的 Hadoop/Spark 大数据分析应用做任何修改,通过简单的配置就可以像在原生HDFS中那样管理和访问数据,同时获得OSS无限容量、弹性扩展、更高的安全性、可靠性和可用性支撑。
数据湖HDFS演进路径
1.1 主要特性
1.1.1 HDFS 兼容访问
OSS-HDFS服务(JindoFS服务)完全兼容HDFS接口,同时支持目录层级的操作,用户只需集成JindoSDK,即可为Apache Hadoop的计算分析应用(例如MapReduce、Hive、Spark、Flink等)提供了访问HDFS服务的能力,像使用 Hadoop 分布式文件系统 (HDFS) 一样管理和访问数据,使用详情请参考OSS-HDFS服务快速入门;
1.1.2 POSIX 能力支持
OSS-HDFS服务可以通过JindoFuse提供POSIX支持。可以把OSS-HDFS服务上的文件挂载到本地文件系统中,能够像操作本地文件系统一样操作JindoFS服务中的文件,使用详情请参考使用JindoFuse访问OSS-HDFS服务
1.1.3 高性能、高弹性、低成本
使用自建Haddop集群,严重依赖硬件资源,很难做到资源的弹性伸缩,成本和效益上捉襟见肘,比如规模超过数百台,文件数达到4亿左右时NameNode基本达到瓶颈。随着元数据规模的上涨,其QPS存在下降的趋势。而OSS-HDFS服务是专为多租户、海量数据存储服务设计,元数据管理能力可弹性扩容,可支持更高的并发度、吞吐量和低时延,即使超过10亿文件数依然可以保持服务稳定,提供高性能、高可用的服务。同时采用统一元数据管理能力,可轻松应对超大文件规模,并支持多种分层分级策略,系统的资源利用率更高,更节约成本,能充分满足业务体量快速变化的需求。
1.1.4 数据持久性和服务可用性
OSS-HDFS服务中数据存储在对象存储OSS上,而OSS作为阿里巴巴全集团数据存储的核心基础设施,多年支撑双11业务高峰,历经高可用与高可靠的严苛考验。
-
服务可用性不低于99.995%。
-
数据设计持久性不低于99.9999999999%(12个9)。
-
规模自动扩展,不影响对外服务。
-
数据自动多重冗余备份。
1.2 典型适用场景
OSS-HDFS 服务提供全面的大数据和 AI 生态支持,典型场景如下概述,相关文档请参考链接:阿里云 OSS-HDFS 服务(JindoFS 服务) 用户文档。
1.2.1 Hive/Spark 离线数仓
OSS-HDFS服务原生支持文件/目录语义和操作,支持毫秒级和原子性目录 rename,在能力上对齐 HDFS,擅长和适合用于开源 Hive/Spark 离线数仓。
1.2.2 OLAP
OSS-HDFS服务提供 append、truncate、flush、pwrite 等基础文件操作,通过 JindoFuse 充分支持 POSIX,可以为 ClickHouse 这类 OLAP 场景替换本地磁盘做存/算分离方案,再借助于缓存系统进行加速,达到最佳性价比。
1.2.3 AI 训练/推理
OSS-HDFS服务提供 append、truncate、flush、pwrite 等基础文件操作,通过 JindoFuse 充分支持 POSIX,无缝对接 AI 生态和已有的 Python 训练/推理程序。
1.2.4 HBase 存/算分离
OSS-HDFS服务原生支持文件/目录语义和操作,支持 flush 操作,在能力上对齐 HDFS,可以用于替代 HDFS 做 HBase 存/算分离方案。相较于 HBase + OSS(标准 bucket)方案,HBase + OSS-HDFS服务方案不依赖 HDFS 来存放 WAL 日志,大幅简化整体方案架构。
1.2.5 实时计算
OSS-HDFS服务高效支持 flush 和 truncate 操作,可以用来无缝替代 HDFS 在 Flink 实时计算应用场景下做 sink/checkpoint 存储。
1.2.6 数据迁移
OSS-HDFS 服务作为新一代云原生数据湖存储,支持 IDC HDFS 平迁上云,保证和优化 HDFS 使用体验,同时享受弹性伸缩、按需付费的成本效益,大幅优化存储成本。JindoDistCp 工具提供高效方式支持将 HDFS 文件数据(包括文件属性等元数据)无缝迁入 OSS-HDFS 服务,并基于 HDFS Checksum 支持提供快速比对。
OSS-HDFS 服务作为 JindoFS Block 模式的服务化升级版本,提供升级方案,支持将 EMR 集群内的 JindoFS Block 模式文件元数据(存放于 header 节点上的本地 RocksDB)快速迁入 OSS-HDFS 服务 bucket,保持 OSS 上已有的 JindoFS 文件数据块不变(无须转换、迁移)。
OSS-HDFS 服务也即将支持 OSS 现有 bucket 数据快速导入,方便 OSS 用户体验使用新服务的功能和特性。
1.3 服务特性支持情况
2. 使用步骤
2.1 创建内网访问OSS-HDFS服务的VPC 环境
2.1.1 创建VPC环境
登陆阿里云官网,点击“产品与服务”中的“专有网络VPC”
切换到与即将使用的OSS-HDFS 服务Bucket相同的地域后,点击“创建专有网络”
填入必要信息后点击“确定”
2.1.2 创建云服务器(ECS)
进入新建的vpc管理页面,切换到“资源管理” ,添加云服务器(ECS)
在打开的页面中点击“创建实例”
根据需要填写配置等侯提交确认
如需要访问外网,请选择分配工网IP
2.2 创建Hadoop运行环境
2.2.1 安装Java 环境
ECS创建完成后进入该实例控制台点击远程连接,进入系统
安装JDK并配置环境变量,JDK版本不低于1.8
#卸载已有jdk
rpm -qa | grep java | xargs rpm -e --nodeps
#安装java
yum install java-1.8.0-openjdk* -y
# 配置环境变量
## 临时生效直接export;
## 当前用户生效更新到 ~/.bashrc;
## 所有用户生效更新到/etc/profile 使配置生效; 编辑完. /etc/profile使其生效
vim /etc/profile
# 添加环境变量, 如果提示当前jdk path不存在则到/usr/lib/jvm/ 寻找,java-1.8.0-openjdk
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin
2.2.2 安装SSH
# 安装
yum install -y openssh-clients openssh-server
# 启用服务
systemctl enable sshd && systemctl start sshd
生成 SSH 密钥,并将生成的密钥添加到信任列表:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
2.2.3 安装Hadoop
# 下载
wget https://mirrors.sonic.net/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
# 解压
tar xzf hadoop-3.3.1.tar.gz
# 移动到常用位置
mv hadoop-3.3.1 /usr/local/hadoop
配置环境变量
# 临时生效直接export;
# 当前用户生效更新到 ~/.bashrc;
# 所有用户生效更新到/etc/profile 使配置生效; 编辑完. /etc/profile使其生效
vim /etc/profile
# 设置hadoop环境变量
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
# 更新hadoop配置文件中JAVA_HOME
cd $HADOOP_HOME
vim etc/hadoop/hadoop-env.sh
# 将JAVA_HOME由原来${JAVA_HOME}换成具体路径,这样在集群环境中才不会出现问题
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
更新配置文件
更新两个文件:core-site.xml 和 hdfs-site.xml
#如果提示目录不存在,则执行. /etc/profile,使环境变量生效
cd $HADOOP_HOME/etc/hadoop
更新core-site.xml ,添加属性
fs.defaultFS
hdfs://localhost:9000
hadoop.tmp.dir
/opt/module/hadoop-3.3.1/data/tmp
更新 hdfs-site.xml,添加属性:
dfs.replication
1
格式化文件结构
hdfs namenode -format
启动HDFS
然后启动 HDFS, 启动分三个步骤,分别启动 NameNode、DataNode 和 Secondary NameNode。
cd /usr/local/hadoop/
# 启动
sbin/start-dfs.sh
# 查看进程
jps
到此为止,HDFS 守护进程已经建立,由于 HDFS 本身具备 HTTP 面板,我们可以通过浏览器访问http://172.17.0.4:9870/来查看 HDFS 面板以及详细信息:
2.2.4 Hadoop测试
执行hadoop version命令,如能正常返回version信息表示安装成功
运行一个hadoop 官方示例 - 单词次数计算
# /hello 为输入目录; /hi 为输出目录,必须不存在
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /hello /hi
2.2.5 HDFS 测试
示例
# 显示根目录 / 下的文件和子目录,绝对路径
hadoop fs -ls -R /
# 新建文件夹,绝对路径
hadoop fs -mkdir /hello
# 上传文件
hadoop fs -put hello.txt /hello/
# 下载文件
hadoop fs -get /hello/hello.txt
# 输出文件内容
hadoop fs -cat /hello/hello.txt
2.3 切换本地HDFS到云上OSS-HDFS服务
2.3.1 创建OSS Bucket并开通HDFS服务
-
目前支持华东1(杭州)、华东2(上海)、华南1(深圳)和华北2(北京)地域支持开启HDFS服务。
-
HDFS服务开启后不支持关闭,请谨慎操作。
-
归档以及冷归档存储类型Bucket不支持开启HDFS服务。
-
单击Bucket列表,然后单击创建Bucket。
-
在创建Bucket面板中,切换到支持HDFS服务地域,选择开通HDFS服务
-
单击确定。
2.3.2 授权访问
-
授权服务端管理已开通HDFS服务的Bucket。首次使用HDFS功能时,需要先在RAM控制台完成以下授权,以便OSS服务账号能够管理Bucket中的数据。
-
创建名为 AliyunOSSDlsDefaultRole 的角色。
-
-
在左侧导航栏,选择身份管理 > 角色。
-
单击创建角色,选择可信实体类型为阿里云服务,单击下一步。
-
角色类型选择普通服务角色,角色名称填写为 AliyunOSSDlsDefaultRole ,选择受信服务为对象存储。
-
单击完成。角色创建完成后,单击关闭。
-
-
新建名为AliyunOSSDlsRolePolicy的自定义权限策略。
-
在左侧导航栏,选择权限管理 > 权限策略。
-
单击创建权限策略。
-
在新建自定义权限策略页面,填写策略名称为AliyunOSSDlsRolePolicy,配置模式选择脚本配置,并在策略内容中填写以下权限策略。
-
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:ListObjects",
"Resource": [
"acs:oss:*:*:*"
]
},
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:*/.dlsdata",
"acs:oss:*:*:*/.dlsdata*"
]
}
]
}
-
单击确定。
-
为角色授予自定义权限策略。
-
在左侧导航栏,选择身份管理 > 角色。
-
单击RAM角色 AliyunOSSDlsDefaultRole 右侧的精确授权。
-
在添加权限页面,选择权限类型为自定义策略,输入已创建的自定义权限策略名称AliyunOSSDlsRolePolicy。
-
单击确定。
-
-
授权RAM用户访问已开通HDFS服务的Bucket。如果您使用服务角色(例如EMR服务角色AliyunEMRDefaultRole)访问已开通HDFS服务的Bucket,请参见上述为RAM用户授权的步骤完成服务角色授权。
-
创建自定义策略,策略内容如下:
{
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:*/.dlsdata",
"acs:oss:*:*:*/.dlsdata*"
]
},
{
"Effect": "Allow",
"Action": [
"oss:GetBucketInfo",
"oss:PostDataLakeStorageFileOperation"
],
"Resource": "*"
}
],
"Version": "1"
}
创建自定义策略的具体操作,请参见创建自定义权限策略。
2.3.3 下载JindoSDK并配置
下载最新的 tar.gz 包 jindosdk-x.x.x.tar.gz (下载页面)。
# 切换到目标目录
cd /usr/lib/
# 下载jdk 包
wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/4.1.0/jindosdk-4.1.0.tar.gz
# 解压
tar xzf jindosdk-4.1.0.tar.gz
配置环境变量
# 切换到目标目录
vim /etc/profile
# 文件末尾添加配置后保存
export JINDOSDK_HOME=/usr/lib/jindosdk-4.1.0
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${JINDOSDK_HOME}/lib/*
# 使配置生效
. /etc/profile
配置 OSS-HDFS 服务实现类及 Access Key,基本配置方式如下,除此之外JindoSDK还支持更多的 AccessKey 的配置方式,详情参考 JindoSDK Credential Provider 配置。
cd $HADOOP_HOME/etc/hadoop
将 JindoSDK OSS 实现类配置到 Hadoop 的core-site.xml中。
fs.AbstractFileSystem.oss.impl
com.aliyun.jindodata.oss.JindoOSS
fs.oss.impl
com.aliyun.jindodata.oss.JindoOssFileSystem
将已开启 HDFS 服务的 Bucket 对应的Access Key ID、Access Key Secret等预先配置在 Hadoop 的core-site.xml中。
fs.oss.accessKeyId
xxxx
fs.oss.accessKeySecret
xxxx
2.3.4 配置 OSS-HDFS 服务 Endpoint
访问 OSS Bucket 上 OSS-HDFS服务需要配置 Endpoint(cn-xxx.oss-dls.aliyuncs.com),与 OSS 对象接口的 Endpoint(oss-cn-xxx.aliyuncs.com)不同。JindoSDK 会根据配置的 Endpoint 访问 JindoFS 服务 或 OSS 对象接口。
使用 JindoFS 服务时,推荐访问路径格式为:
oss://