本文介绍如何通过E-Mapreduce访问LindormDFS。
背景信息
阿里云E-MapReduce是构建在阿里云云服务器ECS上的开源Hadoop、Spark、Hive、Flink生态大数据PaaS产品。提供用户在云上使用开源技术建设数据仓库、离线批处理、在线流式处理、即时查询、机器学习等场景下的大数据解决方案。
E-MapReduce数据迁移
开通LindormDFS,详情请参见开通指南。
准备工作。
开通并创建E-MapRedece集群,详情请参见创建集群。
说明当使用存储引擎替换E-MapReduce HDFS服务时,您可以选择使用高效云盘、SSD云盘或者本地盘作为Shuffle数据的临时本地存储。具体存储规划可以参见存储说明。
E-MapReduce集群的专有网络和交换机必须与LindormDFS保持一致。
数据迁移。
在主机列表界面,选择任一的一台ECS,单击进入云服务器管理控制台界面,在基础信息中单击远程连接,进入控制台。
在服务配置中,单击hdfs-site,查找dfs.nameservices,将LindormDFS的namespace添加到后面。
单击自定义配置添加如下的配置,配置信息在LindormDFS一键生成配置信息中可以找到。
更改配置。选择集群服务 > HDFS,单击部署客户端配置。
验证LindormDFS是否可以正常访问。
在erm的一个节点上执行如下命令,实例ID为LindormDFS的实例ID,根据实际情况修改。
hadoop fs -ls hdfs://${实例ID}/
数据迁移。
建议将/user、/hbase、/spark-history、/apps等服务目录和相关的数据目录全量迁移至LindormDFS。
E-MapReduce HDFS文件系统上的数据,需要使用数据迁移工具hadoop distcp进行数据迁移,详情请参见从自建HDFS迁移数据。
执行下面的指令将E-MapReduce HDFS全部数据迁移到LindormDFS,实例ID为LindormDFS的实例ID,根据实际情况修改。
hadoop distcp /apps hdfs://${实例ID}/ hadoop distcp /emr-flow hdfs://${实例ID}/ hadoop distcp /emr-sparksql-udf hdfs://${实例ID}/ hadoop distcp /hbase hdfs://${实例ID}/ hadoop distcp /spark-history hdfs://${实例ID}/ hadoop distcp /tmp hdfs://${实例ID}/ hadoop distcp /user hdfs://${实例ID}/
修改目录权限。
hadoop fs -chmod 777 hdfs://${实例ID}/tmp
验证数据迁移情况。
执行如下命令,查看数据迁移情况,实例ID为LindormDFS的实例ID,根据实际情况修改。
hadoop fs -ls hdfs://${实例ID}/
如果查询结果如下图,表示迁移成功。
配置E-MapReduce服务使用LindormDFS
配置HDFS服务。
在集群管理页面,找到需要挂载文件存储HDFS的目标E-MapReduce集群,单击管理。
更改配置。
选择集群服务> HDFS,单击配置。
在服务配置中,单击core-site。
找到配置项fs.defaultFS,将其替换为LindormDFS的地址。
单击保存,在确认保存对话框中,输入执行原因,单击确定。
单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定。
重启YARN服务。
选择集群服务> YARN。
在页面右侧的操作栏中,单击重启All Components。
配置HIVE服务。
说明配置HDFS服务完成后,才能配置Hive服务。
在配置Hive服务之前,请确认
/user/hive/
目录中的数据已完成全量迁移,迁移方法请参见从自建HDFS迁移数据。
更改配置。
选择集群管理 >HIVE,单击配置。
在服务配置中,单击hive-site。
找到配置项
hive.metastore.warehouse.dir
,删除其对应值中的E-MapReduce HDFS
文件系统域名,只保留/user/hive/warehouse
。单击保存,在确认保存对话框中,输入执行原因,单击确定。
单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定。
修改元数据。
进入ERM hiveMeta所在的ECS终端,用
cd $HIVE_CONF_DIR
进入hive的配置目录,在hivemetastore-site.xml
中,获取数据库相关信息。在配置项
javax.jdo.option.ConnectionURL
中,获取MySQL服务的主机名和元数据存储的数据库。在配置项
javax.jdo.option.ConnectionUserName
中,获取MySQL服务的用户名。在配置项
javax.jdo.option.ConnectionPassword
中,获取MySQL服务的用户密码。
Hive的元数据存储在MySQL中,进入存储Hive元数据的MySQL数据库hivemeta中,修改DBS表和SDS表,如下所示。
MariaDB [(none)]> use hivemeta; ##修改表“DBS” MariaDB [hivemeta]> select * from DBS; +-------+-----------------------+----------------------------------------------------------------------------------+-------------------+------------+------------+ | DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE | +-------+-----------------------+----------------------------------------------------------------------------------+-------------------+------------+------------+ | 1 | Default Hive database | hdfs://emr-header-1.cluster-190507:9000/user/hive/warehouse | default | public | ROLE | | 2 | NULL | hdfs://emr-header-1.cluster-190507:9000/user/hive/warehouse/emr_presto_init__.db | emr_presto_init__ | has | USER | +-------+-----------------------+----------------------------------------------------------------------------------+-------------------+------------+------------+ 2 rows in set (0.00 sec) MariaDB [hivemeta]> UPDATE DBS -> SET DB_LOCATION_URI = 'hdfs://ld-uf681d0qf7w50f800/user/hive/warehouse' -> WHERE DB_ID = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [hivemeta]> UPDATE DBS -> SET DB_LOCATION_URI = 'hdfs://ld-uf681d0qf7w50f800/user/hive/warehouse/emr_presto_init__.db' -> WHERE DB_ID = 2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 ##修改表“SDS” 由于是新的集群,所以该表没有数据 MariaDB [hivemeta]> select * from SDS ; Empty set (0.00 sec)
在页面右侧的操作栏,单击重启All Components,重启服务。
配置Spark服务。
说明配置HDFS服务完成后,才能配置Spark服务。
配置Spark服务前,请确认
/spark-history
目录中的数据已经完成了全量迁移。迁移方法请参见从自建HDFS迁移数据。
更改配置。
选择集群服务>Spark,单击配置。
在服务配置中,单击spark-defaults。
找到配置项
spark_eventlog_dir
,将其对应的值替换为LindormDFS。单击保存,在确认保存对话框中,输入执行原因,单击确定。
单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定。
在页面右侧的操作栏,单击重启 All Components,重启服务。
配置HBase服务。
说明配置HDFS服务完成后,才能配置HBase服务。
配置HBase服务前,请确认
/hbase
目录中的数据已经完成了全量迁移。迁移方法请参见从自建HDFS迁移数据。
更改配置。
选择集群服务> Hbase,单击配置。
在服务配置中,单击Hbase-site。
找到配置项
hbase.rootdir
,删除其对应值中的E-MapReduce HDFS
文件系统域名,只保留/hbase
。单击保存,在确认保存对话框中,输入执行原因,单击确定。
单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定。
在页面右侧的操作栏,单击重启All Components,重启服务。
关闭HDFS服务。
说明关闭HDFS服务前,请确认原来E-MapReduce HDFS上存储的数据都已经迁移到LindormDFS。迁移方法请参见从自建HDFS迁移数据。
选择集群服务>HDFS。
在页面右侧的操作栏,单击停止All Components,关闭服务。
在执行集群操作对话框中,输入执行原因,单击确定。
验证服务正确性。
hadoop的验证。 使用E-MapReduce hadoop中自带的测试包
hadoop-mapreduce-examples-2.x.x.jar
进行测试。该测试包默认放置在/opt/apps/ecm/service/hadoop/2.x.x-1.x.x/package/hadoop-2.x.x-1.x.x/share/hadoop/mapreduce/
目录下。执行以下命令,在
/tmp/randomtextwriter
目录下生成128 M大小的文件。hadoop jar /opt/apps/ecm/service/hadoop/2.8.5-1.5.3/package/hadoop-2.8.5-1.5.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar randomtextwriter -D mapred uce.randomtextwriter.totalbytes=134217728 -D mapreduce.job.maps=2 -D mapreduce.job.reduces=2 /tmp/randomtextwriter
其中
hadoop-mapreduce-examples-2.8.5.jar
为E-MapReduce的测试包,请根据实际情况修改。执行以下命令验证文件是否生成成功,从而验证文件系统实例的连通性。
hadoop fs -ls hdfs://${实例ID}/tmp/randomtextwriter
其中${实例ID}为您的LindormDFS的实例ID,请根据实际情况修改。
Spark的验证。
使用E-MapReduce Spark中自带的测试包
spark-examples_2.x-2.x.x.jar
进行测试。该测试包默认放置在/opt/apps/ecm/service/spark/2.x.x-1.0.0/package/spark-2.x.x-1.0.0-bin-hadoop2.8/examples/jars
下。执行以下命令,在
/tmp/randomtextwriter
目录下生成128 M大小的文件。hadoop jar /opt/apps/ecm/service/hadoop/2.8.5-1.5.3/package/hadoop-2.8.5-1.5.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar randomtextwriter -D mapred uce.randomtextwriter.totalbytes=134217728 -D mapreduce.job.maps=2 -D mapreduce.job.reduces=2 /tmp/randomtextwriter
其中
hadoop-mapreduce-examples-2.8.5.jar
为E-MapReduce的测试包,请根据实际情况修改。使用Spark测试包从文件存储HDFS上读取测试文件并按照word count的格式展示。
spark-submit --master yarn --executor-memory 2G --executor-cores 2 --class org.apache.spark.examples.JavaWordCount /opt/apps/ecm/service/spark/2.4.5-hadoop2.8-1.1.0/package/spark-2.4.5-hadoop2.8-1.1.0/examples/jars/spark-examples_2.11-2.4.5.jar /tmp/randomtextwriter
如果回显信息类似如下图所示,表示配置成功。
Hive的验证。
执行以下命令进入Hive命令界面。
[hadoop@emr-worker-2 ~]$ hive Logging initialized using configuration in file:/etc/ecm/hive-conf-2.3.5-1.2.0/hive-log4j2.properties Async: true Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. hive>
执行以下命令创建测试表。
hive> create table default.tt(id int , name string ) row format delimited fields terminated by '\t' lines terminated by '\n'; OK Time taken: 2.058 seconds
执行以下命令查看测试表。
如果回显信息中的Location属性对应的值为LindormDFS的路径,则表示配置Hive成功。
ive> desc formatted default.tt ; OK # col_name data_type comment id int name string # Detailed Table Information Database: default Owner: hadoop CreateTime: Mon Sep 28 21:26:14 CST 2020 LastAccessTime: UNKNOWN Retention: 0 Location: hdfs://ld-uf681d0qf7w50f800/user/hive/warehouse/tt Table Type: MANAGED_TABLE Table Parameters: COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} numFiles 0 numRows 0 rawDataSize 0 totalSize 0 transient_lastDdlTime 1601299574 # 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: field.delim \t line.delim \n serialization.format \t Time taken: 0.507 seconds, Fetched: 33 row(s)
HBase的验证。
执行以下命令进入hbase Shell命令界面。
[hadoop@emr-worker-2 ~]$ hbase shell SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/apps/ecm/service/hbase/1.4.9-1.0.0/package/hbase-1.4.9-1.0.0/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/apps/ecm/service/hadoop/2.8.5-1.5.3/package/hadoop-2.8.5-1.5.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.clas s] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] HBase Shell Use "help" to get list of supported commands. Use "exit" to quit this interactive shell. Version 1.4.9, r8214a16c5d80f077abf1aa01bb312851511a2b15, Thu Jan 31 20:35:22 CST 2019 hbase(main):001:0>
在HBase中创建测试表。
hbase(main):001:0> create 'hbase_test','info' 0 row(s) in 1.6700 seconds => Hbase::Table - hbase_test hbase(main):002:0> put 'hbase_test','1', 'info:name' ,'Sariel' 0 row(s) in 0.0960 seconds hbase(main):003:0> put 'hbase_test','1', 'info:aa' ,'33' 0 row(s) in 0.0110 seconds hbase(main):004:0>
执行以下命令查看LindormDFS的
/hbase/data/default/
路径,如果/hbase/data/default/
路径下有hbase_test
目录,则证明配置链接成功。hadoop fs -ls /hbase/data/default
卸载并释放E-MapReduce HDFS使用的云盘
当E-MapReduce已经成功运行在LindormDFS上时,ECS挂载的云盘只用来存储运算中的临时Shuffle文件,可以选择卸载原来用于构建E-MapReduce HDFS服务的云盘,降低集群的拥有成本。具体操作如下: