问题标签 [tez]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1987 浏览

scala - 具有 ORC 性能的 Tez 上的 Hive 真的比 ETL 的 Spark SQL 更好吗?

我在 Hive 方面几乎没有经验,目前正在使用 Scala 学习 Spark。我很想知道 Tez 上的 Hive 是否真的比 SparkSQL 快。我用测试结果搜索了很多论坛,但他们比较了旧版本的 Spark,其中大部分是在 2015 年编写的。总结以下要点

  • ORC 将与 Spark 中的 parquet 执行相同的操作
  • Tez 引擎将提供更好的性能,如 Spark 引擎
  • Hive 中的连接比 Spark 更好/更快

我觉得 Hortonworks 对 Hive 的支持比对 Spark 和 Cloudera 的支持更多,反之亦然。

示例链接:

链接1

链接2

链接3

最初我认为 Spark 会比任何东西都快,因为它们在内存中执行。在阅读了一些文章之后,我不知何故现有的 Hive 也被即兴创作了新概念,如 Tez、ORC、LLAP 等。

目前使用 PL/SQL Oracle 运行并迁移到大数据,因为数量正在增加。我的要求是一种 ETL 批处理,包括每周批处理运行中涉及的数据详细信息。数据将很快大幅增加。

  • 输入/查找数据为 csv/文本格式并更新为表格

  • 两个输入表,有 500 万行和 30 列

  • 30 个查找表用于生成输出表的每一列,其中包含大约 1000 万行和 220 列。
  • 由于使用了许多查找表,因此涉及多个连接,例如内部和左外部。

请告知我应该选择以下哪一种方法,以获得更好的性能和可读性,并且易于在列上包含用于未来生产部署的小更新。

方法一:

  • 带有 ORC 表的 Tez 上的 Hive
  • Python UDF 通过 TRANSFORM 选项
  • 加入性能调整,如地图加入

方法二:

  • 从 text/csv 转换的 Parquet 格式的 SparkSQL
  • 用于 UDF 的 Scala
  • 希望我们可以在 Spark 中执行多个内连接和左外连接
0 投票
1 回答
2981 浏览

apache - 无法通过 Tez 从 Hive 执行 MapReduce 作业

我正面临 Hive over Tez 的问题。

我可以毫无问题地选择 Hive 上存在的表

SELECT * FROM Transactions;

但是,当尝试在此表上使用聚合函数或计数 (*) 时,例如:

SELECT COUNT(*) FROM Transactions;

我正面临以下登录 Hive.log 文件

2017-08-13T10:04:27,892 INFO [4a5b6a0c-9edb-45ea-8d49-b2f4b0d2b636 main] conf.HiveConf:使用为日志 id 传入的默认值:4a5b6a0c-9edb-45ea-8d49-b2f4b0d2b6310 2017-08-3 :04:27,910 INFO [4a5b6a0c-9edb-45ea-8d49-b2f4b0d2b636 main] session.SessionState: 关闭 tez 会话时出错 java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.tez.dag.api.SessionNotRunning : TezSession 已经关闭。由于 AM Container for appattempt_1498057873641_0017_000002 退出,应用程序 application_1498057873641_0017 失败 2 次,exitCode:-1000 尝试失败。诊断:java.io.FileNotFoundException:文件 /tmp/hadoop-hadoop/nm-local-dir/filecache 不存在输出,查看应用跟踪页面:http://hadoop-master:8090/cluster/app/application_1498057873641_0017然后单击指向每次尝试日志的链接。. 申请失败。在 org.apache.hadoop.hive.ql.exec.tez.TezSessionState.isOpen(TezSessionState.java:173) ~[hive-exec-2.1.1.jar:2.1.1] 在 org.apache.hadoop.hive。 ql.exec.tez.TezSessionState.toString(TezSessionState.java:135) ~[hive-exec-2.1.1.jar:2.1.1] at java.lang.String.valueOf(String.java:2994) ~[? :1.8.0_131] 在 java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_131] 在 org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.closeIfNotDefault(TezSessionPoolManager.java :346) ~[hive-exec-2.1.1.jar:2.1.1] at org.apache.hadoop.hive.ql.session.SessionState.close(SessionState.java:1524) [hive-exec-2.1.1 .jar:2.1.1] 在 org.apache.hadoop.hive.cli.CliSessionState.close(CliSessionState.java:66) [hive-cli-2.1.1.jar:2.1.1] 在 org.apache。0_131] 在 org.apache.hadoop.util.RunJar.run(RunJar.java:234) [hadoop-common-2.8.0.jar:?] 在 org.apache.hadoop.util.RunJar.main(RunJar.java :148) [hadoop-common-2.8.0.jar:?] 引起:java.util.concurrent.ExecutionException:org.apache.tez.dag.api.SessionNotRunning:TezSession 已经关闭。由于 AM Container for appattempt_1498057873641_0017_000002 退出,应用程序 application_1498057873641_0017 失败 2 次,exitCode:-1000 尝试失败。诊断:java.io.FileNotFoundException:文件 /tmp/hadoop-hadoop/nm-local-dir/filecache 不存在输出,查看应用跟踪页面:concurrent.ExecutionException:org.apache.tez.dag.api.SessionNotRunning:TezSession 已经关闭。由于 AM Container for appattempt_1498057873641_0017_000002 退出,应用程序 application_1498057873641_0017 失败 2 次,exitCode:-1000 尝试失败。诊断:java.io.FileNotFoundException:文件 /tmp/hadoop-hadoop/nm-local-dir/filecache 不存在输出,查看应用跟踪页面:concurrent.ExecutionException:org.apache.tez.dag.api.SessionNotRunning:TezSession 已经关闭。由于 AM Container for appattempt_1498057873641_0017_000002 退出,应用程序 application_1498057873641_0017 失败 2 次,exitCode:-1000 尝试失败。诊断:java.io.FileNotFoundException:文件 /tmp/hadoop-hadoop/nm-local-dir/filecache 不存在输出,查看应用跟踪页面:http://hadoop-master:8090/cluster/app/application_1498057873641_0017然后单击指向每次尝试日志的链接。. 申请失败。在 java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[?:1.8.0_131] 在 java.util.concurrent.FutureTask.get(FutureTask.java:206) ~[?:1.8.0_131]在 org.apache.hadoop.hive.ql.exec.tez.TezSessionState.isOpen(TezSessionState.java:168) ~[hive-exec-2.1.1.jar:2.1.1] ... 17 更多原因:org .apache.tez.dag.api.SessionNotRunning:TezSession 已经关闭。由于 AM Container for appattempt_1498057873641_0017_000002 退出,应用程序 application_1498057873641_0017 失败 2 次,exitCode:-1000 尝试失败。诊断:java.io.FileNotFoundException:文件 /tmp/hadoop-hadoop/nm-local-dir/filecache 不存在输出,查看应用跟踪页面:http://hadoop-master:8090/cluster/app/application_1498057873641_0017然后单击指向每次尝试日志的链接。. 申请失败。在 org.apache.tez.client.TezClient.waitTillReady(TezClient.java:914) ~[tez-api-0.8.4.jar:0.8.4] 在 org.apache.tez.client.TezClient.waitTillReady(TezClient. java:883) ~[tez-api-0.8.4.jar:0.8.4] at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.startSessionAndContainers(TezSessionState.java:416) ~[hive-exec -2.1.1.jar:2.1.1] 在 org.apache.hadoop.hive.ql.exec.tez.TezSessionState.access$000(TezSessionState.java:97) ~[hive-exec-2.1.1.jar:2.1 .1] 在 org.apache.hadoop.hive.ql.exec.tez.TezSessionState$1.call(TezSessionState.java:333) ~[hive-exec-2.1.1.jar:2.1.1] 在 org.apache。 hadoop.hive.ql.exec.tez.TezSessionState$1.call(TezSessionState.java:329) ~[hive-exec-2.1.1.jar:2.1.1] at java.util.concurrent.FutureTask.run(FutureTask.爪哇:266)〜[?:

我通过在所有集群节点“/tmp/hadoop-hadoop/nm-local-dir/filecache”上创建丢失的目录解决了这个问题。

然后我在尝试执行时在 Hive.log 出现错误SELECT COUNT(*) FROM Transactions;,如下所示:

2017-08-13T10:06:35,567 INFO [main] optimizer.ColumnPrunerProcFactory: RS 3 oldColExprMap: {VALUE._col0=Column[_col0]} 2017-08-13T10:06:35,568 INFO [main] optimizer.ColumnPrunerProcFactory: RS 3 newColExprMap: {VALUE._col0=Column[_col0]} 2017-08-13T10:06:35,604 INFO [213ea036-8245-4042-a5a1-ccd686ea2465 main] Configuration.deprecation: mapred.input.dir.recursive 已弃用。相反,使用 mapreduce.input.fileinputformat.input.dir.recursive 2017-08-13T10:06:35,658 INFO [main] annotation.StatsRulesProcFactory: STATS-GBY[2]: Equals 0 in number of rows.0 行将被设置到 1 2017-08-13T10:06:35,679 INFO [main] optimizer.SetReducerParallelism:reducer 数量确定为:1 2017-08-13T10:06:35,680 INFO [main] parse.TezCompiler: Cycle free: true 2017- 08-13T10:06:35, 689 INFO [213ea036-8245-4042-a5a1-ccd686ea2465 main] Configuration.deprecation:mapred.job.name 已弃用。相反,使用 mapreduce.job.name 2017-08-13T10:06:35,741 INFO [main] parse.CalcitePlanner: Completed plan generation 2017-08-13T10:06:35,742 INFO [main] ql.Driver: Semantic Analysis Completed 2017- 08-13T10:06:35,742 INFO [main] ql.Driver:返回 Hive 架构:Schema(fieldSchemas:[FieldSchema(name:c0, type:bigint, comment:null)], properties:null) 2017-08-13T10: 06:35,744 INFO [main] exec.ListSinkOperator:初始化运算符 LIST_SINK[7] 2017-08-13T10:06:35,745 INFO [main] ql.Driver:完成编译命令(queryId=hadoop_20170813100633_31ca0425-6aca-434c-8039-48bc07) ; 耗时:2.131 秒 2017-08-13T10:06:35,768 INFO [main] ql.Driver: 不推荐使用需要的。相反,使用 mapreduce.job.committer.setup.cleanup.needed 2017-08-13T10:06:35,840 INFO [main] ql.Context: 新的暂存目录是 hdfs://hadoop-master:8020/tmp/hive/hadoop /213ea036-8245-4042-a5a1-ccd686ea2465/hive_2017-08-13_10-06-33_614_5648783469307420794-1 2017-08-13T10:06:35,845 INFO [main] exec.Task: 会话已经打开 2017-08-13T10:06:35,845 :35,847 INFO [main] tez.DagUtils:本地化资源,因为它不存在:文件:/opt/apache-tez-0.8.4-bin 到目标:hdfs://hadoop-master:8020/tmp/hive/hadoop /_tez_session_dir/213ea036-8245-4042-a5a1-ccd686ea2465/apache-tez-0.8.4-bin 2017-08-13T10:06:35,850 INFO [main] tez.DagUtils:看起来另一个线程或进程正在写入同一个文件2017-08-13T10:06:35,851 INFO [main] tez.DagUtils: 等待文件 hdfs://hadoop-master: 8020/tmp/hive/hadoop/_tez_session_dir/213ea036-8245-4042-a5a1-ccd686ea2465/apache-tez-0.8.4-bin(5 次尝试,间隔 5000 毫秒)2017-08-13T10:07:00,860 错误 [主要] tez.DagUtils:找不到正在上传的 jar 2017-08-13T10:07:00,861 错误 [main] exec.Task:无法执行 tez 图。java.io.IOException:以前的作者可能无法写入 hdfs://hadoop-master:8020/tmp/hive/hadoop/_tez_session_dir/213ea036-8245-4042-a5a1-ccd686ea2465/apache-tez-0.8.4-bin。失败是因为我也不太可能写。在 org.apache.hadoop.hive.ql.exec.tez.DagUtils.localizeResource(DagUtils.java:1022) 在 org.apache.hadoop.hive.ql.exec.tez.DagUtils.addTempResources(DagUtils.java:902)在 org.apache.hadoop.hive.ql.exec.tez 的 org.apache.hadoop.hive.ql.exec.tez.DagUtils.localizeTempFilesFromConf(DagUtils.java:845)。

我检查了 Hive 问题的这个 Jira 问题“ https://issues.apache.org/jira/browse/AMBARI-9821 ”,但在尝试从此表中执行 Count(*) 时仍然遇到此错误。

Tez 会议文件:

Hive 配置文件:

这也是 Yarn 的诊断:

应用程序 application_1498057873641_0018 由于 AM Container for appattempt_1498057873641_0018_000002 退出 2 次,exitCode:-103 尝试失败。诊断:容器 [pid=31779,containerID=container_1498057873641_0018_02_000 运行超出虚拟内存限制。当前使用情况:已使用 1 GB 物理内存中的 169.3 MB;使用了 2.6 GB 的 2.1 GB 虚拟内存。杀死容器。container_1498057873641_0018_02_000001的过程 - contree的转储:| - PID PPID PPID PGRPID SESSID CMD_NAME user_mode_time_time(millis)system_time(MILLIS)SYSTEM_TIME(MILLIS)(MILLIS)VMEM_USAGE(MILLIS)VMEM_USAGE(BYTES)7777777777777777777777777.-PAGES(PEAGES)fult_-cmd_cmd | cmd | cmd | cmd | cmd | -8u131/jdk1.8.0_131/bin/java -Xmx819m -Djava.io。0/logs/userlogs/application_1498057873641_0018/container_1498057873641_0018_02_000001/stderr 容器根据请求被杀死。Exit code is 143 Container exited with a non-zero exit code 143 如需更详细的输出,请查看应用程序跟踪页面:http://hadoop-master:8090/cluster/app/application_1498057873641_0018然后单击指向每次尝试日志的链接。. 申请失败。

0 投票
0 回答
537 浏览

hive - tez 上的 hive,无法在 Tez UI 中监控时间线

我在 tez 上配置了 hive,如下所示。我可以在 HiveServer2 Web UI 中看到我的查询。但是,在我提交 hive 查询后,我在 Tez UI 中看不到 DAG。我缺少什么配置?

  • $HADOOP/etc/hadoop/mapred-site.xml

    • mapreduce.framework.name=yarn-tez
  • $YARN/conf/yarn-site.xml

    • yarn.timeline-service.enabled=true
    • yarn.timeline-service.hostname=localhost
    • yarn.timeline-service.http-cross-origin.enabled=true
    • yarn.resourcemanager.system-metrics-publisher.enabled=true
  • $HIVE/conf/hive-site.xml

    • hive.execution.engine=tez
  • $TEZ/conf/tez-site.xml

    • tez.history.logging.service.class=org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService
    • tez.tez-ui.history-url.base= http://localhost/tez-ui/

我尝试了简单的选择查询和加入查询。连接查询出现此错误。

0 投票
1 回答
647 浏览

hadoop - 如何向 Tez 添加其他库以支持不同的 HDFS 后端?

当我使用 MapReduce 作为 Hive 背后的执行引擎时,我可以使用我的 defaultFS.impl 的备用后端。使用类似于以下的语法:

LOCATION 'protocol://address:port/dir';

我想使用 Tez 执行引擎而不是 MapReduce,但不知道在哪里添加我的 shim 库(jar 文件)以便 Tez 识别我的新协议。

这些在什么目录下?我需要向 tez-site.conf 添加指令吗?

附加输入:

我已将 NFS 连接器 jar 文件添加到 /usr/hdp//hiveserver2/lib 并重新启动了我的 Hive 服务器。我还添加了 hive-conf.xml 的辅助路径:

我想我需要加载类,但不确定如何在 Hive 中加载。在通用 hadoop 中,它加载了:

Hive 有什么等价物吗?

0 投票
1 回答
209 浏览

hadoop - 使用 Tez 执行引擎将文件系统添加到 Hive

使用 Tez 执行引擎对外部 ORC 表执行查询时收到以下错误:

但是,当我使用 MapReduce 引擎运行查询时,它工作正常。我已将正确的行添加到 core-site.xml,我尝试将充当协议驱动程序的 jar 文件添加到 hive-site.xml。

为了让 Hive+Tez 支持额外的文件系统,我需要在哪里添加 jars 或修改配置?

0 投票
0 回答
534 浏览

hive - 使用 Hive 在 Reducer 上分发?

这个问题最令人沮丧的部分是,显而易见的答案是“修复源表!” - 不幸的是我做不到(这是由另一个拒绝提供帮助的工作团队管理和维护的)。

所以我正在寻找一种技术解决方案来做到这一点而不改变源表。

情况是这样的:我有一个源表,我正在尝试编写一个配置单元查询来创建一个新表。查询最终需要花费数小时才能完成,原因是工作在单个 reducer 中遇到了瓶颈。

当我沿着源表找到它在 hdfs 上的位置时,我注意到有 1009 个零件文件。其中 1008 个是 0 字节,其中 1 个是 400 GB。

这就解释了为什么 1 个 reducer 需要这么长时间,因为所有数据都包含在一个文件中。

我试图添加以下设置,试图将工作分配给许多减速器。

所有尝试都以我的新表与源表一模一样结束,其中包含大量 0 字节文件和包含所有数据的单个文件。我能够控制缩减器,它控制文件的总数......但我无法控制数据以使结果均匀分布。

关于如何“修复”我的结果表以具有均匀分布的文件的任何想法?如果我可以在查询过程中解决这个问题,这甚至会增加我的减速器的负载并使查询速度更快,那么我将获得奖励。

源表如下所示:

我的查询是这样的:

0 投票
1 回答
322 浏览

apache-spark - spark sql over hive的目的是什么?

我知道这个问题在几年前就被问过了,但我仍然想知道使用 SparkSQL / HiveContext 的真正目的。

Spark 方法提供了一种比内置 MapReduce 更通用的分布式方式。

我读了很多文章声称 MR 方式已经死了,Spark 是最好的(我知道我可以通过 Spark 实现 MR 方法)。

当推荐使用 HiveContext 查询数据时,我有点困惑。

实际上,从 SparkSQL/HiveContext 运行查询并不意味着运行 MR 作业吗?不是回到主要问题吗?如果我不需要将查询结果封装在更复杂的代码中,TEZ 还不够吗?

我错了吗(我确定我是:-))?

0 投票
1 回答
804 浏览

hadoop - 纱线容器尺寸和 Tez 容器管理

我有一个集群,其纱线资源约为 15 TB。我正在尝试通过 Hive 提交查询。我在 yarn 上的默认容器大小为 4GB。为该查询分配的映射器数量约为 1000。我的纱线队列中总共分配了 10% 的资源。因此,在单个时间点只会分配 430 个容器。每个映射器总共分配了 1 个容器。HDFS 上的块大小为 128 MB。我怎样才能优化查询。

0 投票
0 回答
942 浏览

hadoop - 如何使用 Tez 引擎修复 Hive 中的间歇性文件未找到错误

当我使用 Tez 引擎在 Hive 中运行查询时,出现间歇性FileNotFoundException 错误。

该查询从临时表中选择数据,对其进行重新分区并将其写入报告表。

暂存数据存储在 Avro 文件中,大小为 350GB

我多次对同一组数据运行相同的查询,但故障是间歇性的。

我的纱线设置如下所示:

我对查询的 Tez 设置如下所示:

我已经完成了https://community.hortonworks.com/articles/14309/demystify-tez-tuning-step-by-step.html上的建议,但我仍然看到这个问题。调整容器大小似乎没有帮助。

我可以修改另一组设置来防止这种情况吗?

0 投票
1 回答
1153 浏览

hadoop - Tez - DAGAppMaster - java.lang.IllegalArgumentException: Invalid ContainerId

我尝试启动 mapreduce 作业,但在 shell 或 hive 中执行作业时出现错误:

蜂巢>从员工中选择计数(*);查询 ID = mapr_20171107135114_a574713d-7d69-45e1-aa73-d4de07a3059b 总作业 = 1 启动作业 1 / 1 在编译时确定的缩减任务数:1 为了更改缩减器的平均负载(以字节为单位):设置 hive。 exec.reducers.bytes.per.reducer= 为了限制reducer 的最大数量:set hive.exec.reducers.max= 为了设置一个恒定的reducer 数量:set mapreduce.job.reduces= 开始Job = job_1510052734193_0005 , 跟踪 URL = http://hdpsrvpre2.intranet.darty.fr:8088/proxy/application_1510052734193_0005/ Kill Command = /opt/mapr/hadoop/hadoop-2.7.0/bin/hadoop job -kill job_1510052734193_0005 Stage-1的Hadoop作业信息:映射器数量:0;减速器数量:0 2017-11-07 13:51:25,951 Stage-1 map = 0%,reduce = 0% Ended Job = job_1510052734193_0005 with errors 作业期间出错,获取调试信息... **FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.mr.MapRedTask 返回代码 2 已启动 MapReduce 作业:Stage-Stage-1:MAPRFS 读取:0 MAPRFS 写入:0 FAIL MapReduce CPU 总时间花费:0 mse

在 Ressourcemanager 日志中,我发现了什么:

另外,在我发现的工作系统日志中:

2017-11-07 12:09:46,419 FATAL [main] app.DAGAppMaster:启动 DAGAppMaster java.lang.IllegalArgumentException 时出错:ContainerId 无效:在 org.apache.hadoop.yarn.util.ConverterUtils.toContainerId(ConverterUtils. 182) 在 org.apache.tez.dag.app.DAGAppMaster.main(DAGAppMaster.java:1794) 引起:java.lang.NumberFormatException:对于输入字符串:
java.lang.NumberFormatException.forInputString(NumberFormatException. java:65) 在 java.lang.Long.parseLong(Long.java:441) 在 java.lang.Long.parseLong(Long.java:483) 在 org.apache.hadoop.yarn.util.ConverterUtils.toApplicationAttemptId(ConverterUtils .java:137) 在 org.apache.hadoop.yarn.util.ConverterUtils.toContainerId(ConverterUtils.java:177) ... 还有 1 个

似乎是 Tez 导致了这个问题,有什么解决方案可以解决这个问题吗?谢谢 !