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 否 块大小。