自己在學習14.3節投影變換執行SQL語句hive (default)> SELECT TRANSFORM(col1, col2) USING '/bin/cut -f1' AS newA, newB FROM a;
時出現了這個錯誤
Ended Job = job_local1231989520_0004 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
跟作者的輸出不一樣。
自己一開始時沒有管這個錯誤,直接跳過這個問題,繼續往下看了。
但在執行接下來的語句SELECT TRANSFORM(col1, col2) USING '/bin/cut -f1' AS newA FROM a;
時又出現了這個錯誤
Ended Job = job_local1771018374_0006 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
沒有明確的錯誤信息,自己先是另開了一個終端嘗試了一下:
duxing@duxing-X550JK:~$ /bin/cut
bash: /bin/cut: No such file or directory
duxing@duxing-X550JK:~$ echo "4 5" | /bin/cut -f1
bash: /bin/cut: No such file or directory
duxing@duxing-X550JK:~$ echo "4 5" |cut -f1
4 5
duxing@duxing-X550JK:~$ echo "4 5" |cut -f1
4 5
第一次沒有找的出錯原因。
又在終端嘗試了一下,在執行這行語句的時候SELECT TRANSFORM(col1, col2) USING 'cut -f1' AS newA, newB FROM a;
得到了預期的結果,同時我又執行ls /bin | grep "cut"
并沒有cut文件。
現在看來是因為Ubuntu中cut程序并沒有放在/bin/目錄下導致語句執行出錯。
在執行which cut
后得到驗證,cut放在了/usr/bin/目錄下。
相關命令執行記錄
- Hive終端
hive (default)> SELECT TRANSFORM(col1, col2) USING '/bin/cut -f1' AS newA, newB FROM a;
Ended Job = job_local1231989520_0004 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive (default)> SELECT TRANSFORM(col1, col2) USING '/bin/cut -f1' AS newA, newB FROM a;
Ended Job = job_local1383279613_0005 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive (default)> SELECT TRANSFORM(col1, col2) USING '/bin/cut -f1' AS newA FROM a;
Ended Job = job_local1771018374_0006 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive (default)> SELECT TRANSFORM(col1, col2) USING '/bin/cut -f1' AS newA FROM a;
Ended Job = job_local81582517_0007 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive (default)> SELECT TRANSFORM(col1, col2) USING '/bin/sed s/4/10' AS newA, newB AS a;
NoViableAltException(37@[])at org.apache.hadoop.hive.ql.parse.HiveParser.rowFormat(HiveParser.java:34626)at org.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser.selectTrfmClause(HiveParser_SelectClauseParser.java:2021)at org.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser.selectClause(HiveParser_SelectClauseParser.java:1216)at org.apache.hadoop.hive.ql.parse.HiveParser.selectClause(HiveParser.java:51850)at org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java:45661)at org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:45568)at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:44584)at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:44454)at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1696)at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1178)at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:204)at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:444)at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1242)at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1384)at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1171)at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1161)at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:232)at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:183)at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:399)at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:776)at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:714)at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:641)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.hadoop.util.RunJar.run(RunJar.java:221)at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
FAILED: ParseException line 1:67 cannot recognize input near 'AS' 'a' '<EOF>' in serde specification
hive (default)> SELECT TRANSFORM(col1, col2) USING '/bin/sed s/4/10' AS newA, newB FROM a;
/bin/sed: -e expression #1, char 6: unterminated `s' command
org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script.at org.apache.hadoop.hive.ql.exec.ScriptOperator.close(ScriptOperator.java:585)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.close(ExecMapper.java:189)at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script.at org.apache.hadoop.hive.ql.exec.ScriptOperator.close(ScriptOperator.java:585)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.close(ExecMapper.java:189)at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script.at org.apache.hadoop.hive.ql.exec.ScriptOperator.close(ScriptOperator.java:585)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:697)at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.close(ExecMapper.java:189)at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
Ended Job = job_local1180910273_0008 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive (default)> SELECT TRANSFORM(col1, col2) USING 'cut -f1' AS newA, newB FROM a;
newA newB
4 NULL
3 NULL
hive (default)> SELECT TRANSFORM(col1, col2) USING 'cut -f1' AS newA FROM a;
newA
4
3
終端1:
duxing@duxing-X550JK:~$ /bin/cut
bash: /bin/cut: No such file or directory
duxing@duxing-X550JK:~$ echo "4 5" | /bin/cut -f1
bash: /bin/cut: No such file or directory
duxing@duxing-X550JK:~$ echo "4 5" |cut -f1
4 5
duxing@duxing-X550JK:~$ echo "4 5" |cut -f1
4 5
duxing@duxing-X550JK:~$ echo "4 5" |sed s/4/10
sed: -e expression #1, char 6: unterminated `s' command
duxing@duxing-X550JK:~$ sed s/4/10
sed: -e expression #1, char 6: unterminated `s' command
終端2:
duxing@duxing-X550JK:~$ ls /bin | grep "cut"
duxing@duxing-X550JK:~$ ls /bin
bash bzmore dd fgrep kbd_mode ls nc ntfsfallocate ps sh systemd-inhibit uname zfgrep
bunzip2 cat df findmnt kill lsblk nc.openbsd ntfsfix pwd sh.distrib systemd-machine-id-setup uncompress zforce
busybox cgroups-mount dir fuser kmod lsmod netcat ntfsinfo rbash sleep systemd-notify unicode_start zgrep
bzcat cgroups-umount dmesg fusermount less mkdir netstat ntfsls readlink ss systemd-tmpfiles vdir zless
bzcmp chacl dnsdomainname getfacl lessecho mknod networkctl ntfsmove red static-sh systemd-tty-ask-password-agent vmmouse_detect zmore
bzdiff chgrp domainname grep lessfile mktemp nisdomainname ntfstruncate rm stty tailf wdctl znew
bzegrep chmod dumpkeys gunzip lesskey more ntfs-3g ntfswipe rmdir su tar which
bzexe chown echo gzexe lesspipe mount ntfs-3g.probe open rnano sync tempfile whiptail
bzfgrep chvt ed gzip ln mountpoint ntfs-3g.secaudit openvt run-parts systemctl touch ypdomainname
bzgrep cp efibootmgr hciconfig loadkeys mt ntfs-3g.usermap pidof sed systemd true zcat
bzip2 cpio egrep hostname login mt-gnu ntfscat ping setfacl systemd-ask-password udevadm zcmp
bzip2recover dash false ip loginctl mv ntfscluster ping6 setfont systemd-escape ulockmgr_server zdiff
bzless date fgconsole journalctl lowntfs-3g nano ntfscmp plymouth setupcon systemd-hwdb umount zegrep
duxing@duxing-X550JK:~$ which cut
/usr/bin/cut
duxing@duxing-X550JK:~$ /usr/bin/cut
/usr/bin/cut: you must specify a list of bytes, characters, or fields
Try '/usr/bin/cut --help' for more information.
補充:在寫本文的時候發現其實在終端執行/bin/cut
的時候已經可以得到出錯原因了,bash: /bin/cut: No such file or directory
已經提示了/bin/cut不存在,而執行/usr/bin/cut
的提示是沒有參數。