华为云对象存储OBSHadoop对接OBS_云淘科技

概述

Hadoop系统提供了分布式存储、计算和资源调度引擎,用于大规模数据处理和分析。OBS服务实现了Hadoop的HDFS协议,在大数据场景中可以替代Hadoop系统中的HDFS服务,实现Spark、MapReduce、Hive等大数据生态与OBS服务的对接,为大数据计算提供“数据湖”存储。

HDFS协议:Hadoop中定义了HDFS协议(通过FileSystem抽象类),其他各类存储系统均可以实现HDFS协议,例如Hadoop中内置的HDFS服务,华为云的对象存储服务OBS。

约束与限制

不支持以下HDFS语义:

Lease
Symbolic link operations
Proxy users
File concat
File checksum
File replication factor
Extended Attributes(XAttrs) operations
Snapshot operations
Storage policy
Quota
POSIX ACL
Delegation token operations

注意事项

为了减少日志输出,在/opt/hadoop-3.1.1/etc/hadoop/log4j.properties文件中增加配置:

log4j.logger.com.obs=ERROR

对接步骤

以Hadoop 3.1.1为例(建议使用最新的版本)。

下载hadoop-3.1.1.tar.gz,并解压到/opt/hadoop-3.1.1目录。
在/etc/profile文件中增加配置内容:

export HADOOP_HOME=/opt/hadoop-3.1.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

安装hadoop-huaweicloud。

在官方Github下载hadoop-huaweicloud:下载地址。

若没有匹配版本的jar包,可自行修改hadoop-huaweicloud目录下pom文件中的hadoop版本重新编译生成。

将hadoop-huaweicloud-x.x.x-hw-y.jar拷贝到/opt/hadoop-3.1.1/share/hadoop/tools/lib和/opt/hadoop-3.1.1/share/hadoop/common/lib目录下。

hadoop-huaweicloud-x.x.x-hw-y.jar包含义:前三位x.x.x为配套hadoop版本号;最后一位y为OBSA版本号,y值最大为最新版本。如:hadoop-huaweicloud-3.1.1-hw-40.jar,3.1.1是配套hadoop版本号,40是OBSA的版本号。

配置hadoop。

修改 /opt/hadoop-3.1.1/etc/hadoop/core-site.xml,增加OBS相关配置信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
fs.obs.impl
org.apache.hadoop.fs.obs.OBSFileSystem


fs.AbstractFileSystem.obs.impl
org.apache.hadoop.fs.obs.OBS


fs.obs.access.key
xxx
HuaweiCloud Access Key Id


fs.obs.secret.key
xxx
HuaweiCloud Secret Access Key


fs.obs.endpoint
xxx
HuaweiCloud Endpoint

验证是否对接成功。

您可以通过命令行和MR程序两种方式进行验证。示例如下:

命令行

hadoop fs -ls obs://obs-bucket/

回显如下信息:

-rw-rw-rw- 1 root root 1087 2018-06-11 07:49 obs://obs-bucket/test1
-rw-rw-rw- 1 root root 1087 2018-06-11 07:49 obs://obs-bucket/test2

MR程序

Hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount obs://example-bucket/input/test.txt obs://obs-bucket/output

【附】hadoop-huaweicloud相关配置

配置项

默认值

是否必填

说明

fs.obs.impl

org.apache.hadoop.fs.obs.OBSFileSystem

fs.AbstractFileSystem.obs.impl

org.apache.hadoop.fs.obs.OBS

fs.obs.endpoint

华为云OBS的终端节点(Endpoint)。

fs.obs.access.key

华为云的AK(Access Key Id),需要具备访问OBS对应桶的权限。

fs.obs.secret.key

华为云的SK(Secret Access Key),需要具备访问OBS对应桶的权限。

fs.obs.session.token

华为云的securitytoken,需要具备访问OBS对应桶的权限。当使用临时AK/SK时需要。

fs.obs.security.provider

实现com.obs.services.IObsCredentialsProvider接口的类,用于获取访问OBS的凭证。

fs.obs.connection.ssl.enabled

FALSE

是否通过HTTPS访问OBS。

fs.obs.threads.keepalivetime

60

控制读写线程池参数keepAliveTime。

fs.obs.threads.max

20

控制读写线程池参数corePoolSize和maximumPoolSize

fs.obs.max.total.tasks

20

控制读写线程池参数BlockingQueue的容量,其等于fs.obs.threads.max+fs.obs.max.total.tasks

fs.obs.multipart.size

104857600

写相关配置,多段上传大小。

fs.obs.fast.upload.buffer

disk

写相关配置,所有数据在写入OBS前都会先缓存然后再上传到OBS,此参数用于设置缓存方式,取值范围:

disk:缓存在磁盘
array:缓存在JVM堆内内存
bytebuffer:缓存在JVM堆外内存

fs.obs.buffer.dir

${hadoop.tmp.dir}

写相关配置,当fs.obs.fast.upload.buffer为disk时的缓存目录,支持多目录并以逗号分隔。

fs.obs.bufferdir.verify.enable

FALSE

写相关配置,当fs.obs.fast.upload.buffer为disk时是否验证缓存目录是否存在以及是否具备写权限。

fs.obs.fast.upload.active.blocks

4

写相关配置,每个流操作最大可以使用的缓存个数(通过多段上传线程池最多可以提交的线程任务个数),从而限制每个流操作最大可以使用的缓存空间fs.obs.fast.upload.active.blocks*fs.obs.multipart.size。

fs.obs.fast.upload.array.first.buffer

1048576

写相关配置,当fs.obs.fast.upload.buffer为array时,此参数控制JVM堆内缓存初始化大小

fs.obs.readahead.range

1048576

写相关配置,预读片段大小。

fs.obs.multiobjectdelete.enable

TRUE

删除相关配置,删除目录时是否启动批量删除。

fs.obs.delete.threads.max

20

删除相关配置,控制线程池参数maximumPoolSize和corePoolSize

fs.obs.multiobjectdelete.maximum

1000

删除相关配置,批量删除时单次OBS批量删除请求中支持的最多可删除对象的个数,最大值为1000。

fs.obs.multiobjectdelete.threshold

3

删除相关配置,批量删除时当对象个数小于此参数值时将不启动批量删除。

fs.obs.list.threads.core

30

List相关配置,控制线程池参数corePoolSize

fs.obs.list.threads.max

60

List相关配置,控制线程池参数maximumPoolSize

fs.obs.list.workqueue.capacity

1024

List相关配置,控制线程池参数BlockingQueue的容量

fs.obs.list.parallel.factor

30

List相关配置,控制并发因子参数。

fs.obs.paging.maximum

1000

List相关配置,单次OBS List请求最多返回的对象个数,最大值为1000。

fs.obs.copy.threads.max

40

对象桶rename相关配置,对象桶rename目录时copy线程池配置参数maximumPoolSize,corePoolSize的值为此参数的一半,BlockingQueue的容量为1024。

fs.obs.copypart.size

104857600

对象桶rename相关配置,单个对象copy时当对象的大小超过了此参数值则进行多段copy,且段大小为此参数值;否则进行简单copy。

fs.obs.copypart.threads.max

5368709120

对象桶rename相关配置,单个对象copy时如果进行了多段copy,多段copy线程池配置参数maximumPoolSize,corePoolSize的值为此参数的一半,BlockingQueue的容量为1024。

fs.obs.getcanonicalservicename.enable

FALSE

控制getCanonicalServiceName()接口的返回值。

TRUE:obs://bucketname
FALSE:null

fs.obs.multipart.purge

FALSE

初始化OBSFilesystem时是否清理桶内的多段上传任务。

fs.obs.multipart.purge.age

86400

初始化OBSFilesystem时清理桶内多久之前的多段上传任务。

fs.obs.trash.enable

FALSE

是否开启垃圾回收功能。

fs.obs.trash.dir

垃圾回收目录。

fs.obs.block.size

134217728

块大小。

父主题: 对接大数据组件

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家