全部产品

使用E-Mapreduce访问

更新时间:2020-09-29 18:32

本章节介绍如何通过E-Mapreduce访问文件引擎。

背景信息

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

E-MapReduce数据迁移

  1. 准备工作。

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

      说明

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

    1. 数据迁移。

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

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

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

        namespaces

        点击 自定义配置 添加如下的配置(配置信息在文件引擎一键生成配置信息中可以找到) 。

        hdfs新增配置

      4. 更改配置。

        选择集群服务 > HDFS,点击部署客户端配置

      5. 验证文件引擎是否可以正常访问。

        在erm 的人一个节点上执行如下命令(实例ID为文件引擎的实例ID,根据实际情况修改)。

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

        查询结果

      6. 数据迁移。

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

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

        2. 具体操作,可以执行下面的指令将E-MapReduce HDFS 全部数据迁移到文件引擎(实例ID为文件引擎的实例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. 验证数据迁移情况。

          1. 执行如下执行,查看数据迁移情况(实例ID为文件引擎的实例ID,根据实际情况修改)。

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

            如果查询结果如下图,便是迁移成功。

            查询结果

  2. 开通文件引擎服务,详情请参见开通指南

    说明

    文件引擎的专有网络和交换机必须与E-MapReduce集群侧的配置保持一致。您可以通过以下方法获取:

    • 单击集群基础信息,在网络信息区域中获取专有网络和交换机信息。

配置E-MapReduce服务使用文件引擎

  1. 配置HDFS服务。

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

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

    3. 更改配置。

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

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

      3. 找到配置项 fs.defaultFS,将其替换为您的文件引擎的地址。

        修改默认的存储引擎

      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,将其对应的值替换为文件引擎。

        修改

      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上存储的数据都已经迁移到文件引擎。迁移方法请参见 从自建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目录下生成128M大小的文件。

        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} 为您的文件引擎的实例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目录下生成128M大小的文件。

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

      1. 如果回显信息中的Location属性对应的值为文件引擎的路径,则表示配置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. 执行以下命令查看文件引擎的/hbase/data/default/路径,如果/hbase/data/default/路径下有hbase_test目录,则证明配置链接成功。

      hadoop fs -ls /hbase/data/default

      结果

卸载并释放E-MapReduce HDFS使用的云盘

当E-MapReduce已经成功运行在文件引擎上时,ECS挂载的云盘只用来存储运算中的临时Shuffle文件,可以选择卸载原来用于构建E-MapReduce HDFS服务的云盘,降低集群的拥有成本。

操作步骤。

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

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