Windows10配置运行Hive on tez

举报
BUG开发工程师 发表于 2021/04/13 20:44:06 2021/04/13
【摘要】 背景前面博客已经介绍了如何配置Hadoop和Hive运行环境。即本文开始前,本地已经顺利运行Hive,并可以提交hive on mr任务。在hive领域中,tez是其中一款比较常用的执行引擎。其支持DAG作业模式,可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。Hive也有一部分优化特性基于tez实现。本文介绍如何让hive能够启动执行tez任务。下面内容有一部分依赖WS...

背景

前面博客已经介绍了如何配置Hadoop和Hive运行环境。即本文开始前,本地已经顺利运行Hive,并可以提交hive on mr任务。
在hive领域中,tez是其中一款比较常用的执行引擎。其支持DAG作业模式,可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。Hive也有一部分优化特性基于tez实现。
本文介绍如何让hive启动执行tez任务。步骤主要的执行环境是Windows PowerShell,但组件对Windows的支持实在不友好,有部分内容不得不使用WSL。WSL下使用Hadoop和Hive方式基本类似,后续有需要再补充。

版本

OS:Windows 10 Pro 1903
Java:1.8.0_261
Tez:apache-tez-0.9.2-bin.tar.gz
(可以在 官方主页 找到下载,也可以在 Apache Backup Site 中下载)
tomcat:8.5.60,官网下载

前置依赖

  1. tez版本选择
    • 经过测试,3.1.0支持使用tez-0.9.2
    • 其他版本需要自行测试,如发现不合适可以稍作调整
  2. 启动HDFS,以便上传tez lib
  3. WSL环境
    • 支持tez ui运行,支持tar打包命令
    • 如果没有WSL环境,则不必执行配置步骤6、7,影响是不能使用tez的日志web页面,看任务执行细节不太方便

配置步骤

目的:配置 tez.lib.uris

  1. 解压,apache-tez-0.9.2-bin.tar.gz
    • 目录结构
apache-tez-0.9.2-bin
|- share
|- |- tez.tar.gz
|- conf
|- |- tez-default-template.xml
|- |- tez-runtime-default-template.xml
|- lib
|- tez-ui-0.9.2.war
|- ...
  1. 准备apache-tez-0.9.2-bin/share目录下的tez.tar.gz

  2. 上传hdfs

# PowerShell下执行
hadoop fs -mkdir -p /apps/tez
hadoop fs -put tez.tar.gz /apps/tez
hadoop fs -ls /apps/tez

# WSL模式安装的Hadoop, 执行命令类似
  1. 新建配置tez-site.xml

先放在 apache-tez-0.9.2-bin/conf 目录下

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
    <name>tez.use.cluster.hadoop-libs</name>
    <value>false</value>
</property>
<property>
    <name>tez.lib.uris</name>
    <value>hdfs:///apps/tez/tez.tar.gz</value>
</property>
<!-- Optional: tez ui related -->
<property>
    <name>tez.history.logging.service.class</name>
    <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
</property>
<property>
    <name>tez.tez-ui.history-url.base</name>
    <value>http://localhost:9999/</value>
</property>
</configuration>
  1. 修改配置yarn-site.xml

$HADOOP_HOME/etc/hadoop 目录下

<!-- Optional: tez ui related -->
<!-- timeline server, allow tez ui visit -->
<property>
    <name>yarn.timeline-service.enabled</name>
    <value>true</value>
</property>

<property>
    <name>yarn.timeline-service.hostname</name>
    <value>localhost</value>
</property>

<property>
    <name>yarn.timeline-service.http-cross-origin.enabled</name>
    <value>true</value>
</property>

<property>
    <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
    <value>true</value>
</property>

<!-- log aggregation, collect for timeline server -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

<!-- jobhistory server url, for log proxy -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://localhost:19888/jobhistory/logs</value>
</property>

<!-- unchecked virtual memory limits -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>
  1. 可选配置:要求WSL环境支持
./sbin/yarn-daemon.sh start timelineserver
./sbin/mr-jobhistory-daemon.sh start historyserver
  1. 可选启动tez ui:要求WSL环境支持
  • 准备tez目录下的tez-ui-0.9.2.war
  • 解压apache-tomcat-8.5.60
  • 配置:conf/server.xml
<Connector port="9999" protocol="HTTP/1.1"
  • 添加到webapps

    • 清空webapps(先备份再清空)
    • cp tez-ui-0.9.2.war ROOT.war
  • 启动

./bin/startup.sh  # 启动第一次,以解压war
./bin/shutdown.sh # 停止,以便修改配置
  • 修改配置:webapps/ROOT/config

默认端口就是rm 8088和timeline 8188
如实际端口不对,需要自行调整

  1. 配置hive on tez
  • 复制配置文件到hive conf
cp apache-tez-0.9.2-bin/conf/tez-site.xml $HIVE_HOME/conf/

这就不必修改HADOOP_CLASSPATH来添加tez-site.xml文件,因为启动hive时默认会加载hive conf目录

  • 添加配置(tez-site.xml)
<property>
    <name>hive.tez.container.size</name>
    <value>4</value>
</property>
  • 添加配置(mapred-site.xml)
<property>
    <name>mapreduce.job.counters.max</name>
    <value>12000</value>
</property>

可用性测试

Windows10非WSL环境下,无tez ui

  1. D:\install\apache-tez-0.9.2-bin目录下

  2. 环境变量

$env:TEZ_CONF_DIR="D:\install\apache-tez-0.9.2-bin\conf"
$env:TEZ_JARS="D:\install\apache-tez-0.9.2-bin"
$env:HADOOP_CLASSPATH="$env:TEZ_CONF_DIR;$env:TEZ_JARS\*;$env:TEZ_JARS\lib\*"
  1. 测试数据
hadoop fs -put LICENSE /tmp
  1. 执行样例
hadoop jar tez-examples-0.9.2.jar orderedwordcount /tmp/LICENSE /tmp/result
  1. 通过hdfs查看结果
hadoop fs -cat /tmp/result/part-v002-o000-r-00000
  1. 可选:已启动tez ui
    http://localhost:8088/cluster 可以看到运行记录

  2. 启动时添加环境变量

export TEZ_HOME=/mnt/d/install/apache-tez-0.9.2-bin
for jar in `ls $TEZ_HOME | grep jar`; do
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/$jar
done
for jar in `ls $TEZ_HOME/lib`; do
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/lib/$jar
done

hive
  1. 测试语句
set hive.execution.engine=tez;

-- SQL1
select a.wr_returned_date_sk, a.cnt, b.cnt
from (select wr_returned_date_sk, count(1) as cnt
      from web_returns
      where wr_returned_date_sk between 2452977 and 2452979
      group by wr_returned_date_sk) a
 join (
    select wr_returned_date_sk, count(1) as cnt
    from web_returns
    where wr_returned_date_sk between 2452977 and 2452979
    group by wr_returned_date_sk
) b on a.wr_returned_date_sk = b.wr_returned_date_sk;

-- SQL2
select *
from (select wr_returned_date_sk
      from web_returns
      where wr_returned_date_sk between 2452977 and 2452979
) a join (
    select wr_returned_date_sk
    from web_returns
    where wr_returned_date_sk between 2452977 and 2452979
) b on a.wr_returned_date_sk = b.wr_returned_date_sk;

后续启动或停止

  1. 可选启动tez ui:要求WSL环境支持
cd $HADOOP_HOME

./sbin/start-yarn.sh
./sbin/yarn-daemon.sh start timelineserver
./sbin/mr-jobhistory-daemon.sh start historyserver

cd /mnt/d/install/apache-tomcat-tez-ui
./bin/startup.sh
  1. 环境变量设置
export TEZ_HOME=/mnt/d/install/apache-tez-0.9.2-bin
for jar in `ls $TEZ_HOME |grep jar`; do
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/$jar
done
for jar in `ls $TEZ_HOME/lib`; do
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/lib/$jar
done
  1. 启动hive
hive

其他问题

  1. java.lang.IllegalArgumentException: Illegal Capacity: -10444

参考文档

  1. http://tez.apache.org/install.html
  2. https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-Tez
  3. http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/TimelineServer.html
  4. https://issues.apache.org/jira/browse/YARN-9517
  5. https://issues.apache.org/jira/browse/YARN-4037
  6. https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/ClusterSetup.html
  7. https://stackoverflow.com/questions/43441437/container-is-running-beyond-virtual-memory-limits
  8. https://tez.apache.org/tez-ui.html
  9. https://support.datameer.com/hc/en-us/articles/115005289466-How-to-Enable-Tez-History-UI-for-Hadoop-
  10. https://cwiki.apache.org/confluence/display/Hive/Hive+on+Tez#HiveonTez-InstallationandConfiguration
  11. https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.5.3/bk_command-line-installation/content/ref-a80115dc-6300-4372-9c8e-6f7c0f902b92.1.html
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。