• 沒有找到結果。

16.3 对接大数据组件

16.3.2 Hadoop 对接 OBS

概述

Hadoop系统提供了分布式存储、计算和资源调度引擎,用于大规模数据处理和分析。

OBS服务实现了Hadoop的HDFS协议,在大数据场景中可以替代Hadoop系统中的 HDFS服务,实现Spark、MapReduce、Hive、HBase等大数据生态与OBS服务的对 接,为大数据计算提供“数据湖”存储。

说明

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

约束与限制

不支持以下HDFS语义:

● Lease

● Symbolic link operations

● Proxy users

最佳实践 16 大数据场景下使用 OBS 实现存算分离

● File concat

● File checksum

● File replication factor

● Extended Attributes(XAttrs) operations

● Snapshot operations

● Storage policy

● Quota

● POSIX ACL

● Delegation token operations

注意事项

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

log4j.logger.com.obs=ERROR

对接步骤

以Hadoop 2.8.3为例。

步骤1 下载hadoop-2.8.3.tar.gz,并解压到/opt/hadoop-2.8.3目录。

步骤2 在/etc/profile文件中增加配置内容:

export HADOOP_HOME=/opt/hadoop-2.8.3

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

步骤3 安装hadoop-huaweicloud。

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

说明

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

2. 将hadoop-huaweicloud-x.x.x-hw-y.jar拷贝到/opt/hadoop-2.8.3/share/hadoop/

tools/lib和/opt/hadoop-2.8.3/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的版本号。

步骤4 配置hadoop。

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

<property>

<name>fs.obs.access.key</name>

<value>xxx</value>

<description>huaweicloud access key</description>

</property>

<property>

<name>fs.obs.secret.key</name>

<value>xxx</value>

<description>huaweicloud secret key</description>

</property>

<property>

<name>fs.obs.endpoint</name>

<value>xxx</value>

<description>huaweicloud endpoint</description>

</property>

步骤5 验证是否对接成功。

您可以通过命令行和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-2.8.3.jar wordcount obs://example-bucket/input/test.txt obs://

obs-bucket/output ----结束

【附】hadoop-huaweicloud 相关配置

配置项 默认值 是否

必填

说明

fs.obs.impl org.apache.ha doop.fs.obs.O BSFileSystem

-fs.AbstractFileSyst

em.obs.impl org.apache.ha doop.fs.obs.O BSorg.apache.

hadoop.fs.obs.

OBS

-fs.obs.endpoint 无 是 华为云OBS的Endpoint。

fs.obs.access.key 无 是 华为云的AK,需要具备访问OBS对 应桶的权限。

fs.obs.secret.key 无 是 华为云的SK,需要具备访问OBS对 应桶的权限。

fs.obs.session.toke

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

最佳实践 16 大数据场景下使用 OBS 实现存算分离

配置项 默认值 是否

ssl.enabled FALSE 否 是否通过HTTPS访问OBS。

fs.obs.threads.kee

palivetime 60 否 控制读写线程池参数 keepAliveTime。

fs.obs.threads.ma

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

buffer disk 否 写相关配置,所有数据在写入OBS 前都会先缓存然后再上传到OBS,

此参数用于设置缓存方式,取值范 围:

● disk:缓存在磁盘

● array:缓存在JVM堆内内存

● bytebuffer:缓存在JVM堆外内 存

fs.obs.buffer.dir $

{hadoop.tmp.

rify.enable FALSE 否 写相关配置,当

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

fs.obs.fast.upload.

active.blocks 4 否 写相关配置,每个流操作最大可以 使用的缓存个数(通过多段上传线

配置项 默认值 是否 必填

说明

fs.obs.fast.upload.

array.first.buffer 1048576 否 写相关配置,当

fs.obs.fast.upload.buffer为array

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

fs.obs.delete.threa

ds.max 20 否 删除相关配置,控制线程池参数

maximumPoolSize和corePoolSize fs.obs.multiobject

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

fs.obs.multiobject

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

ue.capacity 1024 否 List相关配置,控制线程池参数 BlockingQueue的容量

fs.obs.list.parallel.

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

fs.obs.paging.max

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

fs.obs.copy.thread

s.max 40 否 对象桶rename相关配置,对象桶 rename目录时copy线程池配置参数 maximumPoolSize,corePoolSize 的值为此参数的一半,

BlockingQueue的容量为1024。

fs.obs.copypart.siz

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

最佳实践 16 大数据场景下使用 OBS 实现存算分离

配置项 默认值 是否 必填

说明

fs.obs.copypart.th

reads.max 5368709120 否 对象桶rename相关配置,单个对象 copy时如果进行了多段copy,多段

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

● TRUE:obs://bucketname

● FALSE:null fs.obs.multipart.p

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

fs.obs.multipart.p

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

fs.obs.trash.enabl

e FALSE 否 是否开启垃圾回收功能。

fs.obs.trash.dir 无 否 垃圾回收目录。

fs.obs.block.size 134217728 否 块大小。