下文首先介绍在 火山引擎EMR 和 自建Hadoop集群 两种场景下,如何使用Proton实现存算分离架构。接着介绍存算分离模式下回收站的配置方式,最后介绍如何在开发环境中引入 proton 依赖。
Assume Role 不需要您显性的将自己账号 AK/SK 配置进集群,集群在运行过程中会自动通过 IAM 获取临时身份凭据。
说明
可直接在 EMR 集群中使用 TOS 服务,例如可使用 HDFS 命令:
hadoop fs -ls tos://{bucket name}/
列出 TOS 桶内的文件,如果需要在计算引擎,例如 Hive 中以表的形式处理 TOS 内的数据,可以在创建 Hive 表的时候将 location 字段值设置成 TOS 地址,即可分析 TOS 的数据,例如:
CREATE EXTERNAL TABLE `palmplay_log_pv_csv`( `meta_id` STRING COMMENT 'from deserializer', `brand` STRING COMMENT 'from deserializer', `channel` STRING COMMENT 'from deserializer', `countrycode` STRING COMMENT 'from deserializer') PARTITIONED BY (dt String) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS TEXTFILE LOCATION 'tos://{tos bucket name}/';
对于 EMR 内的任何组件,您均可以 tos:// 开头的地址去消费 TOS 的数据,关于更多引擎使用 TOS的内容,请查看对应的引擎文档。
静态 AK/SK 会将永久的身份信息记录在集群的配置文件中,不方便管理。
开通 EMR 服务,且创建EMR集群。详见:创建集群。
开通 TOS 服务,且创建 TOS 桶。详见:TOS快速入门。
通过 IAM 访问控制 > 密钥管理获取 Access Key ID 和 Secret Access Key。详见:访问秘钥。
如果TOS桶不是由ak、sk对应的用户创建的,则需要确保ak、sk对要访问的TOS桶有读写权限。可以在 TOS > 桶 > 权限管理 > 存储桶授权策略管理 中为用户授权。
在 EMR 集群详情页的服务管理 > HDFS > 服务参数 > 添加自定义参数配置中给 core-site 新增如下自定义参数。
fs.tos.access-key-id={Access Key ID} fs.tos.secret-access-key={Secret Access Key}
如果您想针对不同 bucket 使用不同的认证密钥,可使用如下配置:
fs.tos.bucket.您的bucket.access.key={Access Key ID} fs.tos.bucket.您的bucket.secret.key={Secret Access Key}
可直接在 EMR 集群中使用 TOS 服务,例如可使用 HDFS 命令:
hadoop fs -ls tos://{bucket name}/
列出 TOS 桶内的文件,如果需要在计算引擎,例如 Hive 中以表的形式处理 TOS 内的数据,可以在创建 Hive 表的时候将 location 字段值设置成 TOS 地址,即可分析 TOS 的数据,例如:
CREATE EXTERNAL TABLE `palmplay_log_pv_csv`( `meta_id` STRING COMMENT 'from deserializer', `brand` STRING COMMENT 'from deserializer', `channel` STRING COMMENT 'from deserializer', `countrycode` STRING COMMENT 'from deserializer') PARTITIONED BY (dt String) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS TEXTFILE LOCATION 'tos://{tos bucket name}/';
对于 EMR 内的任何组件,您均可以 tos:// 开头的地址去消费 TOS 的数据,关于更多引擎使用 TOS 的内容,请查看对应的引擎文档。
开通 EMR 服务,且创建EMR集群。详见:创建集群。
开通 TOS 服务,且创建 TOS 桶。详见:TOS 快速入门。
export TOS_ACCESS_KEY_ID={Access Key ID} export TOS_SECRET_ACCESS_KEY={Secret Access Key} export ENV_TOS_SESSION_TOKEN={Token}
在当前 shell 上下文中使用 export 关键字将对应的 AK/SK 通过环境变量的方式注入。
可直接在 EMR 集群中使用 TOS 服务,例如可使用 HDFS 命令:
hadoop fs -ls tos://{bucket name}/
列出 TOS 桶内的文件。
由于火山 EMR 默认集成了 Proton,且已经在相关组件开启,您无需做额外配置,可通过修改 core-site.xml 配置文件,对参数进行调优设置,具体的参数内容请参考 Proton 参数配置 的参数调优部分。
请参考 Proton 发行版本 中的版本信息,选择您对应的 Proton 版本,下载对应的 Proton 包,解压后将plugins/hadoop3/proton-hadoop3-bundle-*.jar放入 HDFS 安装目录下的 share/hadoop/hdfs/ 中。
修改 core-site.xml,新增如下内容:
<configuration> <!--Required properties--> <!--Filesystem implementation class for TOS--> <property> <name>fs.AbstractFileSystem.tos.impl</name> <value>io.proton.fs.ProtonFS</value> </property> <property> <name>fs.tos.impl</name> <value>io.proton.fs.ProtonFileSystem</value> </property> <property> <name>fs.tos.endpoint</name> <value>http://tos-cn-beijing.ivolces.com</value> </property> <property> <name>proton.cache.enable</name> <value>false</value> </property> <!--Optional properties--> <!--Job Commiter implementation class--> <property> <name>mapreduce.outputcommitter.factory.class</name> <value>io.proton.commit.CommitterFactory</value> <description>The job committer implementation class accelerate read and write data to TOS object storage via MPU instead of rename.</description> </property> <property> <name>fs.tos.credentials.provider</name> <value>io.proton.common.object.tos.auth.DefaultCredentialsProviderChain</value> </property> <!-- Credential provider mode 2: static AK/SK for all buckets --> <property> <name>fs.tos.credentials.provider</name> <value>io.proton.common.object.tos.auth.SimpleCredentialsProvider</value> </property> <property> <name>fs.tos.access-key-id</name> <value>yourAk</value> </property> <property> <name>fs.tos.secret-access-key</name> <value>yourSk</value> </property> <!--TOS Client configuration--> <!--we can overwrite these properties to optimize TOS read and write performance--> <property> <name>fs.tos.http.maxConnections</name> <value>1024</value> </property> </configuration>
请参考 Proton 发行版本中的版本信息,选择您对应的 Proton 版本,下载对应的 Proton 包,解压后将plugins/hadoop2/proton-hadoop2-bundle-*.jar放入 HDFS 安装目录下的 share/hadoop/hdfs/ 中。
Hadoop2 下的配置与 Hadoop3 相同,请参考 Hadoop3 关于 Job committer 的配置,由于开源 Hadoop2 中的 HDFS 默认不支持外部 Job Committer 接口,因此如果要使用 JobComitter,需要下载火山修改过后的 HDFS 依赖包。具体的下载方式,您可通过提工单的方式联系 EMR 技术同学进行支持。
自建集群参数调优与火山 EMR 相同,请参考使用 4 参数调优。
HDFS删除文件后,文件并不会立即删除,而是会将文件移入回收站,默认地址为 hdfs://cluster/user/用户名/.Trash/
,可在core-site中使用如下参数配置回收站中的文件的生命周期时间:
<property> <name>fs.trash.interval</name> <value>1440</value> <description>Number of minutes after which the checkpoint gets deleted. If zero, the trash feature is disabled.</description> </property>
NameNode将会基于配置的值,定期的清理回收站中的文件,在存算分离架构下,使用对象存储后,EMR成为了一个无状态的计算引擎,因此并不会存在一个常驻的回收站管理服务,需要用户自行管理,可通过如下两种方式,控制回收站的生命周期。
如果不存在回收站的诉求,可在 EMR的服务列表-hdfs-配置管理中修改core-site的fs.trash.interval配置项,将其对应的值设置为0。
如果对回收站存在诉求,希望保留回收站功能,则可在对象存储页面中,进入对应的bucket,创建对应的生命周期管理规则:
选择使用指定前缀方式,且基于当前使用的bucket和用户,确定对应回收站的地址,进行生命周期的配置,更多使用方式,请参考:设置生命周期规则
如果用户在本地开发类似代码,需要调试测试 TOS 且使用 Committer,可下载对应的 Job committer bundle 依赖包,放入工程根目录,再在 pom.xml 中新增:
<dependency> <groupId>io.proton/groupId> <artifactId>proton-hadoop您的Hadoop版本-bundle</artifactId> <version>1.1</version> <scope>system</scope> <systemPath>${project.basedir}/Name_Your_JAR.jar</systemPath> </dependency>