翼MapReduce产品基于JeekeFS组件服务提供存算分离能力,支持用户将数据存储在天翼云对象存储产品中,同时使用翼MR集群做数据计算处理,从而实现更灵活、低成本的数据分析方式。
集群准备
- 开始配置前,请确保购买的翼MR集群中已部署JeekeFS组件服务。目前,翼MapReduce产品主要支持在数据湖、数据服务和实时数据流场景下可选JeekeFS组件服务。
- 请确认已经在相关资源池区域中,购买开通好天翼云对象存储产品,详细操作流程请参照天翼云对象存储产品帮助文档开通对象存储服务章节内容
初始化文件系统
-
前往对象存储产品的存储控制台获取基础信息:Access Key、Security Key。详细操作流程请参照天翼云对象存储产品帮助文档获取访问密钥(AK/SK)中“获取对象存储AK/SK”章节内容。
-
在对象存储产品中创建Bucket。详细操作流程请参照天翼云对象存储产品帮助文档创建桶章节内容。
-
获取桶名称和内网地址,以下图为例,对象存储完整内网地址是http://100.123.136.65/bucket-ce75。
-
返回翼MapReduce产品控制台,进入待配置存算分离能力目标集群的翼MR Manager页面,并在集群服务-JeekeFS的配置管理中获取元数据地址信息,参见下图:
-
通过参照登录集群节点章节内容,登录翼MR集群中部署JeekeFS组件服务元数据实例角色的节点,基于步骤1~4中获取的信息,手工初始化文件系统。
例:假定文件系统名字是s3fs。
cd /usr/local/jeekefs/bin
./jeekefs format --bucket http://100.123.136.65/bucket-ce75 --access-key xxxxxxx --secret-key xxxxxxx tikv://192.168.0.27:7579/s3fs s3fs
说明需要根据实际的对象存储内网地址及Bucket Name拼接上述语句中“--bucket”参数的Value值。另外,“--access-key”、“--secret-key”和“tikv://192.168.0.27:7579”的值需要同样调整成实际的字符串。
命令执行结果示例:
-
创建成功后,即可在对象存储平台看到和文件系统名字一样的目录:
验证方式
HDFS集群配置
非缓存模式且混合存储的最小配置如下:
<property>
<name>fs.jfs.impl</name>
<value>io.jeekefs.JeekeFileSystem</value>
</property>
<property>
<name>fs.AbstractFileSystem.jfs.impl</name>
<value>io.jeekefs.JeekeFS</value>
</property>
<property>
<name>jeekefs.server-principal</name>
<value>jfs/meta</value>
<description>元数据服务的principle</description>
</property>
<property>
<name>jeekefs.meta</name>
<value>tikv://192.168.0.27:7579/s3fs</value>
</property>
将上述的配置,通过使用翼MR Manager中的配置管理功能增加到翼MR集群HDFS服务core-site.xml配置中,并同步到各个节点。
同步成功后,即可登录机器使用HDFS Shell命令进行测试。
HDFS Shell测试
-
初始化Token
kinit -kt /etc/security/keytabs/hdfs.keytab 获取principalname
-
访问原生的HDFS
hdfs dfs -ls /
-
访问JeekeFS,并进行文件CRUD操作
hdfs dfs -ls jfs://s3fs/
Spark测试
-
准备工作
kinit -kt /etc/security/keytabs/hdfs.keytab 获取到的实际principalname
Hive Metastore收到元数据请求需要识别JeekeFS,需重启YARN-ResourceManager 和 Hive-MetaStore服务。
注意翼MR集群默认都开启kerberos认证。Spark将应用交给YARN之前,应用程序只会初始化defaultFS所指向文件系统的安全认证。如果后续作业需要访问其他安全文件系统,会抛出认证不通过的异常。因此,我们这里需要将其他文件系统显式地提供给Spark客户端侧配置参数spark.kerberos.access.hadoopFileSystems=jfs://s3fs。
-
进入YARN的Shell
spark-sql --master yarn --conf spark.yarn.access.hadoopFileSystems=jfs://s3fs
-
创建一个数据库
create database if not exists jfstest location 'jfs://s3fs/jfstest';
-
创建一个数据表
create table jfstest.orcbtb(name string,age int) USING ORC;
-
执行成功后,查看表详情,关注是否是内部表,路径是否在Jeekefs上
-
执行增删改查操作
insert into jfstest.orcbtb values('tty',3); insert into jfstest.orcbtb values('tty',4); select * from jfstest.orcbtb;
-
清空表
TRUNCATE TABLE jfstest.orcbtb;
-
删除表
drop table jfstest.orcbtb;
说明由于路径是jfs开头,如果直接创建表,Spark会识别为外部表。这里先创建数据库,再创建表,才是内部表。只有内部表,删除数据后,才会最终删除S3。