Article / 文章中心

如何使用自建Hadoop访问全托管服务化HDFS(OSS-HDFS服务)

发布时间:2022-02-22 点击数:1622
 1. 服务介绍OSS-HDFS服务(JindoFS 服务)是一款云原生数据湖3.0存储产品,根据一致的元数据办理才能,在彻底兼容 HDFS 文件体系接口的一起,供给充沛的 POSIX 才能支撑,能更好的满意大数据和 AI 范畴丰厚多样的数据湖核算场景。经过OSS-HDFS服务,无需对现有的 Hadoop/Spark 大数据剖析运用做任何修正,经过简略的装备就能够像在原生HDFS中那样办理和拜访数据

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 服务特性支撑状况

场景特性

支撑状况

Hive/Spark 数仓

原生支撑文件/目录语义和操作

支撑文件/目录权限

支撑目录原子性/毫秒级 rename

支撑 setTimes 设置时刻

扩展特点(XAttrs)支撑

ACL支撑

本地读缓存加快

Kerberos + Ranger 认证鉴权计划

行将支撑

分层存储和归档

行将支撑

操作审计(audit log)

行将支撑

元数据(fsimage)剖析

行将支撑

OSS 数据快速导入

行将支撑

HDFS 代替

快照(Snapshot)支撑

支撑文件 flush/sync

支撑文件截断 truncate

支撑文件 append

Checksum 支撑

HDFS 回收站自动清理

HDFS 数据加密

行将支撑

POSIX 才能

文件随机写支撑

truncate/append 支撑

flush 支撑

fallocate

行将支撑

flock

行将支撑

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-1.8.0.312.b07-2.el8_5.x86_64

更新装备文件

更新两个文件:core-site.xml 和 hdfs-site.xml

#假如提示目录不存在,则履行. /etc/profile,使环境变量收效 cd $HADOOP_HOME/etc/hadoop

更新core-site.xml ,增加特点

<configuration>      <property>       <name>fs.defaultFSname>              <value>hdfs://localhost:9000value>   property>   
     <property>       <name>hadoop.tmp.dirname>       <value>/opt/module/hadoop-2.6.5/data/tmpvalue>   property> configuration>

更新 hdfs-site.xml,增加特点:

<configuration>      <property>       <name>dfs.replicationname>       <value>1value>   property> configuration>

格局化文件结构

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

运用范围最广,方针:可任何方针

hadoop dfs

只HDFS文件体系相关

hdfs fs

只HDFS文件体系相关(包括与Local FS间的操作),现已Deprecated

hdfs dfs

只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. 联络技术支撑请求试用,运用留意:
  1. 目前支撑华东1(杭州)、华东2(上海)、华南1(深圳)和华北2(北京)地域支撑敞开HDFS服务。
  2. HDFS服务敞开后不支撑关闭,请慎重操作。
  3. 归档以及冷归档存储类型Bucket不支撑敞开HDFS服务。
  1. 单击Bucket列表,然后单击创立Bucket。
  2. 在创立Bucket面板中,切换到支撑HDFS服务地域,挑选注册HDFS服务 
  3. 单击确认。

2.3.2 授权拜访

  1. 授权服务端办理已注册HDFS服务的Bucket。首次运用HDFS功用时,需求先在RAM控制台完结以下授权,以便OSS服务账号能够办理Bucket中的数据。
  1. 创立名为AliyunOSSDlsDefaultRole的人物。
  1. 登录RAM控制台
    1. 在左边导航栏,挑选身份办理 > 人物。
    2. 单击创立人物,挑选可信实体类型为阿里云服务,单击下一步。
    3. 人物类型挑选一般服务人物,人物称号填写为AliyunOSSDlsDefaultRole,挑选受信服务为方针存储。
    4. 单击完结。人物创立完结后,单击关闭。
  1. 新建名为AliyunOSSDlsRolePolicy的自定义权限战略。
  1. 在左边导航栏,挑选权限办理 > 权限战略。
    1. 单击创立权限战略。
    2. 在新建自定义权限战略页面,填写战略称号为AliyunOSSDlsRolePolicy,装备方式挑选脚本装备,并在战略内容中填写以下权限战略。
{
  "Version""1",
  "Statement": [
    {
      "Effect""Allow",
      "Action""oss:ListObjects",
      "Resource": [
        "acs:oss:*:*:*"       ]
    },
    {
      "Effect""Allow",
      "Action""oss:*",
      "Resource": [
        "acs:oss:*:*:*/.dlsdata",
        "acs:oss:*:*:*/.dlsdata*"       ]
    }
  ]
}
  1. 单击确认。
  1. 为人物颁发自定义权限战略。
  1. 在左边导航栏,挑选身份办理 > 人物。
    1. 单击RAM人物AliyunOSSDlsDefaultRole右侧的准确授权。
    2. 在增加权限页面,挑选权限类型为自定义战略,输入已创立的自定义权限战略称号AliyunOSSDlsRolePolicy。
    3. 单击确认。
  1. 授权RAM用户拜访已注册HDFS服务的Bucket。假如您运用服务人物(例如EMR服务人物AliyunEMRDefaultRole)拜访已注册HDFS服务的Bucket,请拜见上述为RAM用户授权的过程完结服务人物授权。
  1. 创立RAM用户。具体操作,请拜见创立RAM用户
  2. 创立自定义战略,战略内容如下:
{
    "Statement": [
        {
            "Effect""Allow",
            "Action""oss:*",
            "Resource": [
                "acs:oss:*:*:*/.dlsdata",
                "acs:oss:*:*:*/.dlsdata*"             ]
        },
        {
            "Effect""Allow",
            "Action": [
                "oss:GetBucketInfo",
                "oss:PostDataLakeStorageFileOperation"             ],
            "Resource""*"         }
    ],
    "Version""1" }

创立自定义战略的具体操作,请拜见创立自定义权限战略

  1. 为RAM用户授权已创立的自定义战略。具体过程,请拜见为RAM用户授权

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中。

<configuration>     <property>         <name>fs.AbstractFileSystem.oss.implname>         <value>com.aliyun.jindodata.oss.JindoOSSvalue>     property>     <property>         <name>fs.oss.implname>         <value>com.aliyun.jindodata.oss.JindoOssFileSystemvalue>     property> configuration>

将已敞开 HDFS 服务的 Bucket 对应的Access Key IDAccess Key Secret等预先装备在 Hadoop 的core-site.xml中。

<configuration>     <property>         <name>fs.oss.accessKeyIdname>         <value>xxxxvalue>     property>     <property>         <name>fs.oss.accessKeySecretname>         <value>xxxxvalue>     property> configuration>

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://./

如: oss://dls-chenshi-test.cn-shanghai.oss-dls.aliyuncs.com/Test

这种方法在拜访途径中包括 OSS-HDFS 服务的 Endpoint,JindoSDK 会根据途径中的 Endpoint 拜访对应的 OSS-HDFS 服务接口。 JindoSDK 还支撑更多的 Endpoint 装备方法,概况参阅JindoFS 服务 Endpoint 装备

2.3.5 开始运用

新建目录

在JindoFS服务上创立目录 用例: hdfs dfs -mkdir oss://./Test/subdir

hdfs dfs -mkdir oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/Test

新建文件

利用hdfs dfs -put指令上传本地文件到JindoFS服务

用例:hdfs dfs -put  oss://./Test

hdfs dfs -put /root/workspace/hello.txt oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/Test

检查文件或许目录信息

在文件或许目录创立完之后,能够检查指定途径下的文件/目录信息。hdfs dfs没有进入某个目录下的概念。在检查目录和文件的信息的时分需求给出文件/目录的绝对途径。 指令:ls 用例:hdfs dfs -ls oss://./Test

hdfs dfs -ls /root/workspace/hello.txt oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/Test

检查文件的内容

有时分咱们需求检查一下在JindoFS服务文件的内容。hdfs dfs指令支撑咱们将文件内容打印在屏幕上。(请留意,文件内容将会以纯文本方式打印出来,假如文件进行了特定格局的编码,请运用HDFS的JavaAPI将文件内容读取并进行相应的解码获取文件内容) 用例:hdfs dfs -cat oss://./Test/helloworld.txt

hdfs dfs -cat /root/workspace/hello.txt oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/Test/hello.txt

仿制目录/文件

有时分咱们需求将JindoFS服务的一个文件/目录拷贝到另一个位置,并且坚持源文件和目录结构和内容不变。 用例:hdfs dfs -cp oss://./Test/subdir oss://./TestTarget/sudir2

移动目录/文件

在许多大数据处理的比如中,咱们会将文件写入一个暂时目录,然后将该目录移动到另一个位置作为终究成果。源文件和目录结构和内容不做保存。下面的指令能够完结这些操作。 用例:hdfs dfs -mv oss://./Test/subdir oss://./Test/subdir1

下载文件到本地文件体系

某些状况下,咱们需求将OSS文件体系中的某些文件下载到本地,再进行处理或许检查内容。这个能够用下面的指令完结。 用例:hdfs dfs -get oss://./Test/helloworld.txt 

删去目录/文件

在许多状况下,咱们在完结工作后,需求删去在JindoFS服务上的某些暂时文件或许抛弃文件。这些能够经过下面的指令完结。 用例:hdfs dfs -rm oss://./Test/helloworld.txt

参阅案例

'''
运用方法:拷贝本脚本到VPC内ECS中目录/root/workspace, 然后履行sh test_hdfs.sh,检查成果是否报错
'''
echo -e "\n\n创立目录lz-test...."
hdfs dfs -mkdir oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/lz-test

echo -e "\n\n检查根目录...."
hdfs dfs -ls oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/

echo -e "\n\n上传文件test.txt...."
echo "hello jack" >> test.txt
hdfs dfs -put test.txt oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/lz-test/test.txt

echo -e "\n\n删去本地测验文件test.txt...."
rm test.txt

echo -e "\n\n检查上传到bucket的文件内容...."
hdfs dfs -cat oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/lz-test/test.txt

echo -e "\n\n下载文件到本地...."
hdfs dfs -get oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/lz-test/test.txt

echo -e "\n\n检查下载到本地的文件内容...."
cat test.txt

echo -e "\n\n删去本地测验文件...."
rm test.txt

echo -e "\n\n删去测验目录lz-test...."
hdfs dfs -rm -R oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/lz-test

echo -e "\n\n检查根目录与子目录...."
hdfs dfs -ls -R oss://luanzhi-hdfs-test-hz.cn-hangzhou.oss-dls.aliyuncs.com/