Pig On Tez, Pig 换 Tez 执行引擎

Tez 安装件上一篇文章: https://my.oschina.net/zhzhenqin/blog/781670

Tez On Yarn 安装成功后,是为了给 Hive 或者 Pig 提供执行引擎。

安装 Pig

下载地址: http://apache.fayea.com/pig/pig-0.15.0/pig-0.15.0.tar.gz

下载后直接解压到本地目录,如果安装了 Hadoop 则可以直接使用。

Pig 默认的执行引擎是 mr,pig 可选的几种引擎如下:


# Execution Mode. Local mode is much faster, but only suitable for small amounts
# of data. Local mode interprets paths on the local file system; Mapreduce mode
# on the HDFS. Read more under 'Execution Modes' within the Getting Started
# documentation.
#
# * mapreduce (default): use the Hadoop cluster defined in your Hadoop config files
# * local: use local mode
# * tez: use Tez on Hadoop cluster
# * tez_local: use Tez local mode
#
exectype=tez

执行时可以使用 pig -x local script.pig 的方式优先选择执行引擎,忽略配置文件。

开始Pig Helloword

和前两篇文章一样,nie 是 Apache Lisence 的文本文件。

group-limit-word.pig

words = load '/user/hadoop/nie.txt' using PigStorage(' ') as (line); --以空格作为分隔符把内容分词读入
grpd = group words by line;     --以每个单词Group
cntd = foreach grpd generate group, COUNT(words); -- Group Count
cous = order cntd by $1 desc; --以 count 倒排序
dump cous;

然后可以运行:

pig group-limit-word.pig
pig -x tez group-limit-word.pig

我分别使用 local, tez_local,tez,mapreduce 执行,对于几十 kb 的文本文件,当然local 模式都是比较快的。 同样的如 hive 的 tez 一样,tez 还是比 mapreduce 要快很多,及时其它复杂的 pig script 同样是 tez 比 mapreduce 快。如果是复杂script,大数据量的,tez 应该比 mapreduce 具有非常大的优势。

Tez UI,执行 Pig 的界面

image

问题总结

  1. 执行后,Yarn 上 Tez Job 执行成功,但是没有任何输出。

本地日志有如下输出如下:

[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2117: Unexpected error when launching Tez job.

Details at logfile: /opt/software/pig/pig_1479783397791.log

查看该 pig_1479783397791.log Log,有如下错误:


Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 2117: Unexpected error when launching Tez job.
	at org.apache.pig.backend.hadoop.executionengine.tez.TezLauncher.handleUnCaughtException(TezLauncher.java:282)
	at org.apache.pig.backend.hadoop.executionengine.tez.TezLauncher.launchPig(TezLauncher.java:235)
	at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.launchPig(HExecutionEngine.java:304)
	at org.apache.pig.PigServer.launchPlan(PigServer.java:1390)
	at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1375)
	at org.apache.pig.PigServer.storeEx(PigServer.java:1034)
	... 15 more
Caused by: java.lang.IllegalArgumentException: No enum constant org.apache.tez.common.counters.TaskCounter.SHUFFLE_CHUNK_COUNT

显然是 Tez 的版本不匹配造成的。pig 的 lib/h2 下默认的 tez 是 0.7.0,而我安装的是他的 bug 修复版本0.7.1。 删除 lib/h2下的 tez jar,copy tez0.7.1的 jar 到该目录下:

rm -v lib/h2/tez-*.jar
cp -v tez/tez-*.jar lib/h2/

成功后执行 pig 脚本,输出成功。

  1. 使用 mapreduce 执行 pig 脚本,报错。内部 rpc 链接不到10020

    [main] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

这是因为 yarn 需要 historyserver,在 hadoop home 下启动:

sbin/mr-jobhistory-daemon.sh start historyserver

启动一个 mr 的 historyserver 即可。

转载于:https://my.oschina.net/zhzhenqin/blog/791383

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值