Pig On Tez, Pig 换 Tez 执行引擎

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

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

安装 Pig

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

下载后直接解压到本地目录,若是安装了 Hadoop 则能够直接使用。oop

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 的方式优先选择执行引擎,忽略配置文件。ui

开始Pig Helloword

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

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;

而后能够运行:code

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 具备很是大的优点。server

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 便可。

相关文章
相关标签/搜索