Amazon EMR
Amazon EMR 版本指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Apache Tez

Apache Tez 是一个框架,用于为任务创建复杂的有向无环图 (DAG) 来处理数据。在某些情况下,它用作 Hadoop MapReduce 的替代方案。例如,Pig 和 Hive 工作流可通过 Hadoop MapReduce 运行,也可使用 Tez 作为执行引擎。有关更多信息,请参阅 https://tez.apache.org/

适用于此版本 Amazon EMR 的 Tez 版本信息

应用程序 Amazon EMR 发行版标签 随此应用程序安装的组件

Tez 0.8.4

emr-5.4.0

emrfs、emr-goodies、hadoop-client、hadoop-mapred、hadoop-hdfs-datanode、hadoop-hdfs-library、hadoop-hdfs-namenode、hadoop-kms-server、hadoop-yarn-nodemanager、hadoop-yarn-resourcemanager、hadoop-yarn-timeline-server、tez-on-yarn

使用 Tez 创建集群

通过在创建集群时选择 Tez 来安装此应用程序。

使用控制台启动安装了 Tez 的集群

以下过程创建一个安装了 Tez 的集群。有关使用控制台启动集群的更多信息,请参阅 Amazon EMR 管理指南 中的步骤 3:启动 Amazon EMR 集群

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 选择 Create cluster 以使用 Quick Create

  3. 对于 Software Configuration,选择 Amazon Release Version emr-4.7.0 或更高版本。

  4. 对于 Select Applications,选择 All ApplicationsTez

  5. 根据需要选择其他选项,然后选择 Create cluster

使用 AWS CLI 启动带 Tez 的集群

  • 使用下面的命令创建集群:

    aws emr create-cluster --name "Cluster with Tez" --release-label emr-5.4.0 \ --applications Name=Tez --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 --use-default-roles

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

配置 Tez

通过在创建集群时使用 tez-site.xml 配置分类在 tez-site 中设置值来配置 Tez。如果要将 Hive 与 Tez 结合使用,您还必须修改 hive-site 配置分类。

更改 Tez 中的根日志记录级别

  • 使用以下命令创建一个安装了 Tez 的集群并将 tez.am.log.level 设为 DEBUG:

    aws emr create-cluster --release-label emr-5.4.0 --applications Name=Tez \ --instance-type m3.xlarge --instance-count 2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

    myConfig.json

    [ { "Classification": "tez-site", "Properties": { "tez.am.log.level": "DEBUG" } } ]

    注意

    如果您打算将配置存储在 Amazon S3 中,则必须指定对象的 URL 位置。例如:

    aws emr create-cluster --release-label emr-5.4.0 --applications Name=Tez Name=Hive \ --instance-type m3.xlarge --instance-count 3 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json

将 Hive 或 Pig 执行引擎更改为 Tez

  1. 使用以下命令创建一个安装了 Hive 和 Tez 的集群并将 hive.execution.engine 设置为 tez

    aws emr create-cluster --release-label emr-5.4.0 --applications Name=Tez Name=Hive \ --instance-type m3.xlarge --instance-count 2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

    myConfig.json

    [ { "Classification": "hive-site", "Properties": { "hive.execution.engine": "tez" } } ]
  2. 要为 Pig 设置执行引擎,可通过将 pig.properties 设置为以下值来修改 myConfig.json

    [ { "Classification": "hive-site", "Properties": { "hive.execution.engine": "tez" } }, { "Classification": "pig-properties", "Properties": { "exectype": "tez" } } ]
  3. 创建上述集群,但将 Pig 添加为应用程序。

使用 Tez

以下示例为您演示如何对名为入门:使用 Amazon EMR 分析大数据的教程中使用的数据和脚本 (如步骤 3 中所示) 使用 Tez。

比较 MapReduce 与 Tez 的 Hive 运行时

  1. 按照名为使用控制台启动安装了 Tez 的集群的过程创建集群。除了 Tez 之外,选择 Hive 作为应用程序。

  2. 使用 SSH 连接到集群. 有关更多信息,请参阅使用 SSH 连接到主节点

  3. 通过以下命令使用 MapReduce 运行 Hive_CloudFront.q 脚本,其中 region 是您的集群所在的区域:

    hive -f s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q \ -d INPUT=s3://region.elasticmapreduce.samples -d OUTPUT=s3://myBucket/mr-test/

    输出应与以下内容类似:

    <snip> Starting Job = job_1464200677872_0002, Tracking URL = http://ec2-host:20888/proxy/application_1464200677872_0002/ Kill Command = /usr/lib/hadoop/bin/hadoop job -kill job_1464200677872_0002 Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1 2016-05-27 04:53:11,258 Stage-1 map = 0%, reduce = 0% 2016-05-27 04:53:25,820 Stage-1 map = 13%, reduce = 0%, Cumulative CPU 10.45 sec 2016-05-27 04:53:32,034 Stage-1 map = 33%, reduce = 0%, Cumulative CPU 16.06 sec 2016-05-27 04:53:35,139 Stage-1 map = 40%, reduce = 0%, Cumulative CPU 18.9 sec 2016-05-27 04:53:37,211 Stage-1 map = 53%, reduce = 0%, Cumulative CPU 21.6 sec 2016-05-27 04:53:41,371 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 25.08 sec 2016-05-27 04:53:49,675 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 29.93 sec MapReduce Total cumulative CPU time: 29 seconds 930 msec Ended Job = job_1464200677872_0002 Moving data to: s3://myBucket/mr-test/os_requests MapReduce Jobs Launched: Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 29.93 sec HDFS Read: 599 HDFS Write: 0 SUCCESS Total MapReduce CPU Time Spent: 29 seconds 930 msec OK Time taken: 49.699 seconds
  4. 使用文本编辑器,将 /etc/hive/conf/hive-site.xml 中的hive.execution.engine 值替换为 tez

  5. 使用以下命令结束 HiveServer2 进程:

    sudo kill -9 $(pgrep -f HiveServer2)

    Upstart 将自动重新启动 Hive 服务器,并加载您的配置更改。

  6. 现在使用以下命令通过 Tez 执行引擎运行此作业:

    hive -f s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q \ -d INPUT=s3://region.elasticmapreduce.samples -d OUTPUT=s3://myBucket/tez-test/

    输出应与以下内容类似:

    Time taken: 0.517 seconds Query ID = hadoop_20160527050505_dcdc075f-8338-4041-adc3-d2ffe69dfcdd Total jobs = 1 Launching Job 1 out of 1 Status: Running (Executing on YARN cluster with App id application_1464200677872_0003) -------------------------------------------------------------------------------- VERTICES STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED -------------------------------------------------------------------------------- Map 1 .......... SUCCEEDED 1 1 0 0 0 0 Reducer 2 ...... SUCCEEDED 1 1 0 0 0 0 -------------------------------------------------------------------------------- VERTICES: 02/02 [==========================>>] 100% ELAPSED TIME: 27.61 s -------------------------------------------------------------------------------- Moving data to: s3://myBucket/tez-test/os_requests OK Time taken: 30.711 seconds

    运行同一应用程序所需的时间比使用 Tez 少约 20 秒 (40%)。

Tez Web UI

Tez 具有其自己的 Web 用户界面。要查看 Web UI,请参阅:

http://masterDNS:8080/tez-ui

时间线服务器

YARN Timeline Service 配置为在安装 Tez 时运行。要查看通过使用时间表服务的 Tez 或 MapReduce 执行引擎提交的作业,请查看 Web UI:

http://masterDNS:8188

有关更多信息,请参阅 Amazon EMR 管理指南 中的 查看 Amazon EMR 集群上托管的 Web 界面