本文介绍如何配置E-MapReduce上的Hadoop-Common服务、Hive服务、Spark服务、Tez服务来使用文件存储 HDFS 版。
前提条件
已完成数据迁移。具体操作,请参见E-MapReduce数据迁移。
配置Hadoop-Common服务
在顶部菜单栏,单击地域。
在概览页面,找到需要挂载文件存储 HDFS 版的目标E-MapReduce集群,单击集群服务。
在集群服务页签,将光标移至Hadoop-Common卡片,单击配置。
在配置项名称框中输入
fs.defaultFS
配置项,将其值修改为您的文件存储 HDFS 版挂载点域名。格式为dfs://f--xxxxxxxx.cn-xxxxx.dfs.aliyuncs.com:10290/
。单击保存,在保存对话框中确认已修改的配置并输入执行原因,单击保存。
单击部署客户端配置,输入执行原因,单击确定。
重启YARN服务。
单击左上角的返回,返回集群服务页签。
在集群服务页签,将光标移至YARN卡片,选择图标>重启。
在弹出的对话框输入执行原因,并单击确定。
配置Spark服务
配置Hadoop-Common服务完成后,才能配置Spark服务。本文以Spark3服务为例,介绍配置方法。
登录EMR on ECS的master节点,将文件存储HDFS版的Java SDK放置到EMR集群各节点的
${SPARK_HOME}/jars/
目录下。# 请将aliyun-sdk-dfs-x.y.z.jar替换为您下载的文件存储HDFS版 Java SDK sudo cp aliyun-sdk-dfs-x.y.z.jar ${SPARK_HOME}/jars/
修改Spark服务配置。
在集群服务页签,将光标移至Spark3卡片,单击配置。
单击搜索框左侧按钮,选择配置项值。输入
spark-history
搜索,然后将配置项中的原文件存储系统域名替换为您文件存储HDFS版的挂载点域名。如下图所示。挂载点域名格式为:
dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290
。单击保存,在对话框中确认已修改的配置并输入执行原因,单击保存。
单击部署客户端配置,输入执行原因,单击确定。
在集群服务页签的右上方,选择
。启动Spark服务。
配置Hive服务
配置Hadoop-Common服务完成后,才能配置Hive服务。
在配置Hive服务之前,请确认/user/hive/目录中的数据已完成全量迁移。具体操作,请参见迁移开源HDFS的数据到文件存储 HDFS 版。
检查配置并启动Hive服务。
在集群服务页签,将光标移至Hive卡片,单击配置。
选择配置项名称,搜索
hive.metastore.warehouse.dir
配置项,确认其对应值中只有从根目录开始的路径(例如:/user/hive/warehouse
)。在集群服务页签的右上方,选择
。启动Hive服务。
修改Hive元数据。
本文以DLF统一元数据为例,介绍Hive元数据的修改方法。文档中提到的MySQL均为EMR集群master节点的本地MySQL。
导出元数据到MySQL。
将Hive元数据从DLF导出到MySQL。具体操作,请参见元数据导出。
导出MySQL中的元数据到
metastore.sql
文件。# 请将DATABASENAME替换为您要导出的数据库名称 # 请将USERNAME替换为您本地MySQL的用户名 mysqldump DATABASENAME -u USERNAME -p > ./metastore.sql
备份元数据文件。
cp ./metastore.sql ./metastore.sql.bak
修改元数据文件。
# 请将xxx:\/\/xxxx.xxxxx.xxx替换为原数据路径,注意转义符“\” # 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名 sed -i 's/xxx:\/\/xxxx.xxxxx.xxx/dfs:\/\/f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/g' ./metastore.sql
导入修改过的元数据文件到MySQL。
登录MySQL数据库。
# 请将DATABASENAME替换为您要导出的数据库名称 # 请将USERNAME替换为您本地MySQL的用户名 mysql DATABASENAME -u USERNAME -p
导入数据。
# 请将/path/to/metastore.sql替换为元数据文件真实路径 source /path/to/metastore.sql;
导入修改过的元数据到DLF。
将修改过的Hive元数据从MySQL导入DLF。具体操作,请参见元数据迁移。
验证服务正确性
YARN服务验证
提交MapReduce任务在/tmp/randomtextwriter
目录下生成文件,示例命令如下:
yarn jar \
${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
randomtextwriter \
-D mapreduce.randomtextwriter.totalbytes=134217728 \
/tmp/randomtextwriter
执行以下命令验证文件是否存在。hadoop fs -ls dfs://f-095d7371deh55.cn-hangzhou.dfs.aliyuncs.com:10290/tmp/randomtextwriter
# 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名
hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/randomtextwriter
Spark服务验证
使用Spark自带的测试包,以本地
/etc/profile
作为输入文件,运行DFSReadWriteTest任务。spark-submit \ --master yarn \ --executor-memory 2G \ --executor-cores 2 \ --class org.apache.spark.examples.DFSReadWriteTest \ ${SPARK_HOME}/examples/jars/spark-examples_*.jar \ /etc/profile /tmp/spark_output
执行以下命令验证。
# 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名 hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/spark_output/dfs_read_write_test
如果返回以下类似信息,则表示Spark服务配置成功。能正常使用文件存储 HDFS 版文件系统。
Tez服务验证
使用Tez自带的测试包,以YARN服务验证生成的数据作为输入数据,执行Word Count任务。
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_HOME}/*:${TEZ_HOME}/lib/*
hadoop jar \ ${TEZ_HOME}/tez-examples-*.jar \ orderedwordcount /tmp/randomtextwriter /tmp/tez/orderedwordcount_output
执行以下命令验证。
# 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名 hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/tez/orderedwordcount_output
如果返回以下类似信息,则表示Tez服务能正常使用文件存储 HDFS 版文件系统。
Hive的验证
进入Hive命令界面。
hive
创建测试表(例如,user_info_test)。
CREATE TABLE user_info_test(user_id BIGINT, firstname STRING, lastname STRING, country STRING);
向测试表(user_info_test)插入数据。
INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');
查看测试表。
如果回显信息中的Location属性对应的值为文件存储 HDFS 版的路径,则表示配置Hive成功。如果不是,请重新配置。具体操作,请参见配置Hive服务。
执行命令
desc formatted default.user_info_test;
返回信息
OK # col_name data_type comment user_id bigint firstname string lastname string country string # Detailed Table Information Database: default Owner: emr-user CreateTime: Fri Aug 15 17:29:38 CST 2024 LastAccessTime: UNKNOWN Retention: 0 Location: dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/user/hive/warehouse/user_info_test Table Type: MANAGED_TABLE Table Parameters: COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} last_modified_time 1723803920 numFiles 1 numRows 3 rawDataSize 40 totalSize 43 transient_lastDdlTime 1723803920 # Storage Information SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] Sort Columns: [] Storage Desc Params: serialization.format 1 Time taken: 0.199 seconds, Fetched: 34 row(s)
测试Hive计算引擎。
测试Hive on MapReduce。
设置Hive计算引擎为MapReduce。
SET hive.execution.engine=mr;
提交计算任务。
SELECT country,count(*) FROM user_info_test GROUP BY country;
测试Hive on Spark。
设置Hive计算引擎为Spark。
SET hive.execution.engine=spark;
提交计算任务。
SELECT country,count(*) FROM user_info_test GROUP BY country;
测试Hive on Tez。
设置Hive计算引擎为Tez。
SET hive.execution.engine=tez;
提交计算任务。
SELECT country,count(*) FROM user_info_test GROUP BY country;
在文件存储HDFS版上查看是否有新测试表的数据生成。
# 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名 hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/user/hive/warehouse
如果返回以下类似信息,则表示Hive服务能正常访问文件存储 HDFS 版文件系统。