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 的界面
问题总结
- 执行后,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 脚本,输出成功。
-
使用 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 即可。