用 Tez 执行引擎执行 hive sql 语句,打印每个步骤的执行时间。
---------------------------------------------------------------------------------------------- OPERATION DURATION ---------------------------------------------------------------------------------------------- Compile Query 8.55s Prepare Plan 0.96s Get Query Coordinator (AM) 0.02s Submit Plan 0.43s Start DAG 0.98s Run DAG 19.80s
原因是,启动 hive cli,有一个后台线程执行 tez session 的创建工作。如果执行的时候,没有准备好,需要一直等待。
同步方式hive 执行的时候加上--hiveconf hive.cli.tez.session.async=false参数可以看到 Prepare Plan 的时间大大降低。
或者修改 hive-site.xml
hive.cli.tez.session.async false Whether to start Tez session in background when running CLI with Tez, allowing CLI to be available earlier.
设置 hive.cli.tez.session.async=false 后,可以看到从执行 hive 命令,到可以输入 sql 的时间延长了。
在启用安全模式下,Prepare Plan 的时间主要有以下几个部分。
- 初始化 FileSystem,即创建和 Namenode 的连接。2 秒,最长 6 秒。(执行 time hadoop fs -ls / 在启动kerberos 和 不启动kerberos 的集群相差 2.3 秒)
- 创建 session 对应的目录。hdfs scrach dir, local saratch dir, download resources dir, hdfs session path, local session path, hdfs temp table space, tmpErrorOutputFile deng
- 长传本地的各种jar文件,hive-aux jar 文件等。1秒
- 用 mr 的 config 配置 tez config, stripHiddenConfigurations。需要把所有的参数过滤一遍。
- 创建和 RM 的连接,和创建和 Namenode 的连接一样。2 秒。有一次 4 秒
- 创建 Application,上传 application master 。
- 上传 dag 的 conf 文件。(hive 不退出连续执行 SQL 仅需要此步)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)