配置E-MapReduce服務(wù)使用文件存儲(chǔ) HDFS 版
本文介紹如何配置E-MapReduce上的Hadoop-Common服務(wù)、Hive服務(wù)、Spark服務(wù)、Tez服務(wù)來(lái)使用文件存儲(chǔ) HDFS 版。
前提條件
已完成數(shù)據(jù)遷移。具體操作,請(qǐng)參見(jiàn)E-MapReduce數(shù)據(jù)遷移。
配置Hadoop-Common服務(wù)
在頂部菜單欄,單擊地域。
在概覽頁(yè)面,找到需要掛載文件存儲(chǔ) HDFS 版的目標(biāo)E-MapReduce集群,單擊集群服務(wù)。
在集群服務(wù)頁(yè)簽,將光標(biāo)移至Hadoop-Common卡片,單擊配置。
在配置項(xiàng)名稱框中輸入
fs.defaultFS
配置項(xiàng),將其值修改為您的文件存儲(chǔ) HDFS 版掛載點(diǎn)域名。格式為dfs://f--xxxxxxxx.cn-xxxxx.dfs.aliyuncs.com:10290/
。單擊保存,在保存對(duì)話框中確認(rèn)已修改的配置并輸入執(zhí)行原因,單擊保存。
單擊部署客戶端配置,輸入執(zhí)行原因,單擊確定。
重啟YARN服務(wù)。
單擊左上角的返回,返回集群服務(wù)頁(yè)簽。
在集群服務(wù)頁(yè)簽,將光標(biāo)移至YARN卡片,選擇圖標(biāo)>重啟。
在彈出的對(duì)話框輸入執(zhí)行原因,并單擊確定。
配置Spark服務(wù)
配置Hadoop-Common服務(wù)完成后,才能配置Spark服務(wù)。本文以Spark3服務(wù)為例,介紹配置方法。
登錄EMR on ECS的master節(jié)點(diǎn),將文件存儲(chǔ)HDFS版的Java SDK放置到EMR集群各節(jié)點(diǎn)的
${SPARK_HOME}/jars/
目錄下。# 請(qǐng)將aliyun-sdk-dfs-x.y.z.jar替換為您下載的文件存儲(chǔ)HDFS版 Java SDK sudo cp aliyun-sdk-dfs-x.y.z.jar ${SPARK_HOME}/jars/
修改Spark服務(wù)配置。
在集群服務(wù)頁(yè)簽,將光標(biāo)移至Spark3卡片,單擊配置。
單擊搜索框左側(cè)按鈕,選擇配置項(xiàng)值。輸入
spark-history
搜索,然后將配置項(xiàng)中的原文件存儲(chǔ)系統(tǒng)域名替換為您文件存儲(chǔ)HDFS版的掛載點(diǎn)域名。如下圖所示。掛載點(diǎn)域名格式為:
dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290
。單擊保存,在對(duì)話框中確認(rèn)已修改的配置并輸入執(zhí)行原因,單擊保存。
單擊部署客戶端配置,輸入執(zhí)行原因,單擊確定。
在集群服務(wù)頁(yè)簽的右上方,選擇
。啟動(dòng)Spark服務(wù)。
配置Hive服務(wù)
配置Hadoop-Common服務(wù)完成后,才能配置Hive服務(wù)。
在配置Hive服務(wù)之前,請(qǐng)確認(rèn)/user/hive/目錄中的數(shù)據(jù)已完成全量遷移。具體操作,請(qǐng)參見(jiàn)遷移開(kāi)源HDFS的數(shù)據(jù)到文件存儲(chǔ) HDFS 版。
檢查配置并啟動(dòng)Hive服務(wù)。
在集群服務(wù)頁(yè)簽,將光標(biāo)移至Hive卡片,單擊配置。
選擇配置項(xiàng)名稱,搜索
hive.metastore.warehouse.dir
配置項(xiàng),確認(rèn)其對(duì)應(yīng)值中只有從根目錄開(kāi)始的路徑(例如:/user/hive/warehouse
)。在集群服務(wù)頁(yè)簽的右上方,選擇
。啟動(dòng)Hive服務(wù)。
修改Hive元數(shù)據(jù)。
本文以DLF統(tǒng)一元數(shù)據(jù)為例,介紹Hive元數(shù)據(jù)的修改方法。文檔中提到的MySQL均為EMR集群master節(jié)點(diǎn)的本地MySQL。
導(dǎo)出元數(shù)據(jù)到MySQL。
將Hive元數(shù)據(jù)從DLF導(dǎo)出到MySQL。具體操作,請(qǐng)參見(jiàn)元數(shù)據(jù)導(dǎo)出。
導(dǎo)出MySQL中的元數(shù)據(jù)到
metastore.sql
文件。# 請(qǐng)將DATABASENAME替換為您要導(dǎo)出的數(shù)據(jù)庫(kù)名稱 # 請(qǐng)將USERNAME替換為您本地MySQL的用戶名 mysqldump DATABASENAME -u USERNAME -p > ./metastore.sql
備份元數(shù)據(jù)文件。
cp ./metastore.sql ./metastore.sql.bak
修改元數(shù)據(jù)文件。
# 請(qǐng)將xxx:\/\/xxxx.xxxxx.xxx替換為原數(shù)據(jù)路徑,注意轉(zhuǎn)義符“\” # 請(qǐng)將f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替換為您的文件存儲(chǔ)HDFS版掛載點(diǎn)域名 sed -i 's/xxx:\/\/xxxx.xxxxx.xxx/dfs:\/\/f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/g' ./metastore.sql
導(dǎo)入修改過(guò)的元數(shù)據(jù)文件到MySQL。
登錄MySQL數(shù)據(jù)庫(kù)。
# 請(qǐng)將DATABASENAME替換為您要導(dǎo)出的數(shù)據(jù)庫(kù)名稱 # 請(qǐng)將USERNAME替換為您本地MySQL的用戶名 mysql DATABASENAME -u USERNAME -p
導(dǎo)入數(shù)據(jù)。
# 請(qǐng)將/path/to/metastore.sql替換為元數(shù)據(jù)文件真實(shí)路徑 source /path/to/metastore.sql;
導(dǎo)入修改過(guò)的元數(shù)據(jù)到DLF。
將修改過(guò)的Hive元數(shù)據(jù)從MySQL導(dǎo)入DLF。具體操作,請(qǐng)參見(jiàn)元數(shù)據(jù)遷移。
驗(yàn)證服務(wù)正確性
YARN服務(wù)驗(yàn)證
提交MapReduce任務(wù)在/tmp/randomtextwriter
目錄下生成文件,示例命令如下:
yarn jar \
${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
randomtextwriter \
-D mapreduce.randomtextwriter.totalbytes=134217728 \
/tmp/randomtextwriter
執(zhí)行以下命令驗(yàn)證文件是否存在。hadoop fs -ls dfs://f-095d7371deh55.cn-hangzhou.dfs.aliyuncs.com:10290/tmp/randomtextwriter
# 請(qǐng)將f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替換為您的文件存儲(chǔ)HDFS版掛載點(diǎn)域名
hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/randomtextwriter
Spark服務(wù)驗(yàn)證
使用Spark自帶的測(cè)試包,以本地
/etc/profile
作為輸入文件,運(yùn)行DFSReadWriteTest任務(wù)。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
執(zhí)行以下命令驗(yàn)證。
# 請(qǐng)將f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替換為您的文件存儲(chǔ)HDFS版掛載點(diǎn)域名 hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/spark_output/dfs_read_write_test
如果返回以下類似信息,則表示Spark服務(wù)配置成功。能正常使用文件存儲(chǔ) HDFS 版文件系統(tǒng)。
Tez服務(wù)驗(yàn)證
使用Tez自帶的測(cè)試包,以YARN服務(wù)驗(yàn)證生成的數(shù)據(jù)作為輸入數(shù)據(jù),執(zhí)行Word Count任務(wù)。
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
執(zhí)行以下命令驗(yàn)證。
# 請(qǐng)將f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替換為您的文件存儲(chǔ)HDFS版掛載點(diǎn)域名 hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/tez/orderedwordcount_output
如果返回以下類似信息,則表示Tez服務(wù)能正常使用文件存儲(chǔ) HDFS 版文件系統(tǒng)。
Hive的驗(yàn)證
進(jìn)入Hive命令界面。
hive
創(chuàng)建測(cè)試表(例如,user_info_test)。
CREATE TABLE user_info_test(user_id BIGINT, firstname STRING, lastname STRING, country STRING);
向測(cè)試表(user_info_test)插入數(shù)據(jù)。
INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');
查看測(cè)試表。
如果回顯信息中的Location屬性對(duì)應(yīng)的值為文件存儲(chǔ) HDFS 版的路徑,則表示配置Hive成功。如果不是,請(qǐng)重新配置。具體操作,請(qǐng)參見(jiàn)配置Hive服務(wù)。
執(zhí)行命令
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)
測(cè)試Hive計(jì)算引擎。
測(cè)試Hive on MapReduce。
設(shè)置Hive計(jì)算引擎為MapReduce。
SET hive.execution.engine=mr;
提交計(jì)算任務(wù)。
SELECT country,count(*) FROM user_info_test GROUP BY country;
測(cè)試Hive on Spark。
設(shè)置Hive計(jì)算引擎為Spark。
SET hive.execution.engine=spark;
提交計(jì)算任務(wù)。
SELECT country,count(*) FROM user_info_test GROUP BY country;
測(cè)試Hive on Tez。
設(shè)置Hive計(jì)算引擎為Tez。
SET hive.execution.engine=tez;
提交計(jì)算任務(wù)。
SELECT country,count(*) FROM user_info_test GROUP BY country;
在文件存儲(chǔ)HDFS版上查看是否有新測(cè)試表的數(shù)據(jù)生成。
# 請(qǐng)將f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替換為您的文件存儲(chǔ)HDFS版掛載點(diǎn)域名 hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/user/hive/warehouse
如果返回以下類似信息,則表示Hive服務(wù)能正常訪問(wèn)文件存儲(chǔ) HDFS 版文件系統(tǒng)。