01背景
CubeFS ( https://cubefs.io/ )兼容 Hadoop FileSystem 接口协议,用户可以基于 CubeFS 构建存算分离的大数据存储集群,来替换 Hadoop 文件系统 ( HDFS ),其架构如下:
- 数据存储层:CubeFS 支持多副本及纠删码两种引擎,用户可以根据业务场景灵活选择(均支持 EB 级规模)。
- 接口层:CubeFS 提供兼容 hdfs 协议接口及原生 hdfs 协议接口(目前原生 hdfs 协议接口已经研发完成,内部测试中)。
- 计算层:可兼容常用的大数据计算引擎,如 spark、Flink、hive、presto、hive MR 等。
本文主要介绍使用 CubeFS 提供的兼容 hdfs 协议接口对接 Hadoop 组件。
02资源准备
2.1 CubeFS 环境
可参看前文:单机搭建CubeFS集群
2.2 编译资源包
编译环境版本要求CentOS7Java1.8及以上Go1.16及以上Maven3.8.5及以上
准备以下依赖包:libcfs.so、cubefs-hadoop-0.1.0.jar、jna-5.4.0.jar
编译 libcfs.so
git clone https://github.com/cubefs/cubefs.git cd cubefs/libsdk sh build.sh
编译后会在 libsdk 生成 libcfs.so 动态库
编译 CubeFS Hadoop 客户端插件
git clone https://github.com/cubefs/cubefs-hadoop.git cd cubefs-hadoop/ mvn package -Dmaven.test.skip=true
编译完成后会在 target 目录生成 cubefs-hadoop-0.1.0.jar 包
准备 jna.jar 依赖包
wget https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.4.0/jna-5.4.0.jar
2.3 创建卷
通过 curl 或者 cli 命令创建测试卷
curl -v "http://masterip:17010/admin/createVol?name=test&capacity=100&owner=cfs" #或者./cfs-cli volume create test cfs --capacity 100
具体参考:创建卷 (地址:https://cubefs.io/zh/docs/master/user-guide/volume.html )
03部署
3.1 Hadoop 部署
以单机部署为例:
下载 Hadoop
wget https://downloads.apache.org/hadoop/common/hadoop-2.10.2/hadoop-2.10.2. tar.gz tar -zxvf hadoop-2.10.2.tar.gz mv hadoop-2.10.2 /usr/local/share/
配置环境变量
vim /etc/profile export HADOOP_HOME=/usr/local/share/hadoop-2.10.2 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile
最后执行 hadoop version,能正确返回如下信息:
[root@node1 ~]# hadoop version Hadoop 2.10.2 Subversion Unknown -r 965fd380006fa78b2315668fbc7eb432e1d8200f Compiled by ubuntu on 2022-05-24T22:35Z Compiled with protoc 2.5.0 From source with checksum d3ab737f7788f05d467784f0a86573fe This command was run using /usr/local/share/hadoop-2.10.2/share/hadoop/common/hadoop-common-2.10.2.jar3.2
3.2 CubeFS Hadoop 插件部署
安装资源包
cp cubefs-hadoop-0.1.0.jar $HADOOP_HOME/share/hadoop/common/libcp jna-5.4.0.jar $HADOOP_HOME/share/hadoop/common/lib# 拷贝libcfs.so到 $HADOOP_HOME/lib/nativecp libcfs.so $HADOOP_HOME/lib/native
修改配置
修改 core-site.xml(或者 hdfs-site.xml )添加以下内容:
<configuration> <property> <name>fs.cfs.impl</name> <value>io.cubefs.CubefsFileSystem</value> </property> <property> <name>cfs.master.address</name> <value>ip1:17010,ip2:17010,ip3:17010</value> </property> <property> <name>cfs.log.dir</name> <value>/tmp/cfs-access.log</value> </property> <property> <name>cfs.log.level</name> <value>INFO</value> </property> <property> <name>cfs.access.key</name> <value>cTDDVyiQwEfxlyGK</value> </property> <property> <name>cfs.secret.key</name> <value>b78vn8WaK8bh4Uge5Lsy6C6LNPPsxDK5</value> </property> <property> <name>cfs.min.buffersize</name> <value>67108864</value> </property> </configuration>
配置参数说明:
Property |
Value |
Notes |
fs.cfs.impl |
io.cubefs.CubefsFileSystem |
指定 scheme为cfs:// 的存储实现类 |
cfs.master.address |
CubeFS master 地址,可以是 ip+port 格式,ip:port,ip:port,ip:port,也可以是域名 |
|
cfs.log.dir |
/tmp/cfs-access-log |
日志路径 |
cfs.log.level |
INFO |
日志级别 |
cfs.access.key |
CubeFS 文件系统的所属用户的 accessKey |
|
cfs.secret.key |
CubeFS 文件系统的所属用户的 secretKey |
|
cfs.min.buffersize |
8MB |
写缓存区大小,对于副本卷按默认值就行,EC 卷建议64MB |
cfs.min.read.buffersize |
128KB |
读缓冲区大小,对于副本卷按默认值就行,EC 卷建议4MB |
04WordCount 验证
准备一个单词文件,上传至 CubeFS
cat myword.txt cubefs hdfs hdfs ceph ceph cubefs cephfs cubefs hdfs ceph hadoop fs -put myword.txt cfs://test/
执行 WorkCount
hadoop jar /usr/local/share/hadoop-2.10.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.2.jar wordcount cfs://test/myword.txt cfs://test/output
执行完成后,可在 cfs://test/ouput 查看结果
hadoop fs -cat cfs://test/output/part-r-00000 ceph 3 cephfs 1 cubefs 3 hdfs 3
以上是最简单的 Hadoop 接入教程,对于其他组件请参考官方文档:https://cubefs.io/zh/docs/master/user-guide/hadoop.html
评论留言