使用E-Mapreduce访问

本文介绍如何通过E-Mapreduce访问LindormDFS。

背景信息

阿里云E-MapReduce是构建在阿里云云服务器ECS上的开源Hadoop、Spark、Hive、Flink生态大数据PaaS产品。提供用户在云上使用开源技术建设数据仓库、离线批处理、在线流式处理、即时查询、机器学习等场景下的大数据解决方案。

E-MapReduce数据迁移

  1. 开通LindormDFS,详情请参见开通指南

  2. 准备工作。

    1. 开通并创建E-MapRedece集群,详情请参见创建集群

      说明
      • 当使用存储引擎替换E-MapReduce HDFS服务时,您可以选择使用高效云盘、SSD云盘或者本地盘作为Shuffle数据的临时本地存储。具体存储规划可以参见存储说明

      • E-MapReduce集群的专有网络和交换机必须与LindormDFS保持一致。

    2. 数据迁移。

      1. 登录阿里云E-MapReduce控制台

      2. 在主机列表界面,选择任一的一台ECS,单击进入云服务器管理控制台界面,在基础信息中单击远程连接,进入控制台。

      3. 在服务配置中,单击hdfs-site,查找dfs.nameservices,将LindormDFS的namespace添加到后面。

      4. 单击自定义配置添加如下的配置,配置信息在LindormDFS一键生成配置信息中可以找到。

      5. 更改配置。选择集群服务 > HDFS,单击部署客户端配置

      6. 验证LindormDFS是否可以正常访问。

        在erm的一个节点上执行如下命令,实例ID为LindormDFS的实例ID,根据实际情况修改。

        hadoop fs -ls hdfs://${实例ID}/

        查询结果

      7. 数据迁移。

        建议将/user、/hbase、/spark-history、/apps等服务目录和相关的数据目录全量迁移至LindormDFS。

        1. E-MapReduce HDFS文件系统上的数据,需要使用数据迁移工具hadoop distcp进行数据迁移,详情请参见从自建HDFS迁移数据

        2. 执行下面的指令将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
        3. 验证数据迁移情况。

          执行如下命令,查看数据迁移情况,实例ID为LindormDFS的实例ID,根据实际情况修改。

          hadoop fs -ls hdfs://${实例ID}/

          如果查询结果如下图,表示迁移成功。

          查询结果

配置E-MapReduce服务使用LindormDFS

  1. 配置HDFS服务。

    1. 登录阿里云E-MapReduce控制台

    2. 集群管理页面,找到需要挂载文件存储HDFS的目标E-MapReduce集群,单击管理

    3. 更改配置。

      1. 选择集群服务HDFS,单击配置

      2. 服务配置中,单击core-site

      3. 找到配置项fs.defaultFS,将其替换为LindormDFS的地址。

      4. 单击保存,在确认保存对话框中,输入执行原因,单击确定

      5. 单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定

    4. 重启YARN服务。

      1. 选择集群服务YARN

      2. 在页面右侧的操作栏中,单击重启All Components

  2. 配置HIVE服务。

    说明

    • 配置HDFS服务完成后,才能配置Hive服务。

    • 在配置Hive服务之前,请确认/user/hive/目录中的数据已完成全量迁移,迁移方法请参见从自建HDFS迁移数据

    1. 更改配置。

      1. 选择集群管理 >HIVE,单击配置

      2. 服务配置中,单击hive-site

      3. 找到配置项hive.metastore.warehouse.dir,删除其对应值中的E-MapReduce HDFS文件系统域名,只保留/user/hive/warehouse

        hive 配置信息

      4. 单击保存,在确认保存对话框中,输入执行原因,单击确定

      5. 单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定

    2. 修改元数据。

      1. 进入ERM hiveMeta所在的ECS终端,用cd $HIVE_CONF_DIR进入hive的配置目录,在hivemetastore-site.xml中,获取数据库相关信息。

        1. 在配置项javax.jdo.option.ConnectionURL中,获取MySQL服务的主机名和元数据存储的数据库。

        2. 在配置项javax.jdo.option.ConnectionUserName中,获取MySQL服务的用户名。

        3. 在配置项javax.jdo.option.ConnectionPassword中,获取MySQL服务的用户密码。

      2. 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)
        
      3. 在页面右侧的操作栏,单击重启All Components,重启服务。

  3. 配置Spark服务。

    说明

    • 配置HDFS服务完成后,才能配置Spark服务。

    • 配置Spark服务前,请确认/spark-history目录中的数据已经完成了全量迁移。迁移方法请参见从自建HDFS迁移数据

    1. 更改配置。

      1. 选择集群服务>Spark,单击配置

      2. 服务配置中,单击spark-defaults

      3. 找到配置项spark_eventlog_dir,将其对应的值替换为LindormDFS。

        修改

      4. 单击保存,在确认保存对话框中,输入执行原因,单击确定

      5. 单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定

    2. 在页面右侧的操作栏,单击重启 All Components,重启服务。

  4. 配置HBase服务。

    说明

    • 配置HDFS服务完成后,才能配置HBase服务。

    • 配置HBase服务前,请确认/hbase目录中的数据已经完成了全量迁移。迁移方法请参见从自建HDFS迁移数据

    1. 更改配置。

      1. 选择集群服务Hbase,单击配置。

      2. 服务配置中,单击Hbase-site

      3. 找到配置项hbase.rootdir,删除其对应值中的E-MapReduce HDFS文件系统域名,只保留/hbase

        hbase 配置信息

      4. 单击保存,在确认保存对话框中,输入执行原因,单击确定

      5. 单击部署客户端配置,在确认保存对话框中,输入执行原因,单击确定

    2. 在页面右侧的操作栏,单击重启All Components,重启服务。

  5. 关闭HDFS服务。

    说明

    关闭HDFS服务前,请确认原来E-MapReduce HDFS上存储的数据都已经迁移到LindormDFS。迁移方法请参见从自建HDFS迁移数据

    1. 选择集群服务>HDFS

    2. 在页面右侧的操作栏,单击停止All Components,关闭服务。

    3. 执行集群操作对话框中,输入执行原因,单击确定

  6. 验证服务正确性。

    1. 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/目录下。

      1. 执行以下命令,在/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的测试包,请根据实际情况修改。

      2. 执行以下命令验证文件是否生成成功,从而验证文件系统实例的连通性。

        hadoop fs -ls hdfs://${实例ID}/tmp/randomtextwriter

        其中${实例ID}为您的LindormDFS的实例ID,请根据实际情况修改。

  7. Spark的验证。

    1. 使用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下。

      1. 执行以下命令,在/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的测试包,请根据实际情况修改。

      2. 使用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

        如果回显信息类似如下图所示,表示配置成功。

        结果

  8. Hive的验证。

    1. 执行以下命令进入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> 
    2. 执行以下命令创建测试表。

      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
    3. 执行以下命令查看测试表。

      如果回显信息中的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)
  9. HBase的验证。

    1. 执行以下命令进入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> 
    2. 在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> 
    3. 执行以下命令查看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服务的云盘,降低集群的拥有成本。具体操作如下:

  1. 卸载数据盘,详情请参见卸载数据盘

  2. 释放云盘,详情请参见释放云盘