Hadoop之Pig(1)
--Pig报10020错误解决方法
Apache项目下给出了一个可以较简单地操作hadoop的MapReduce的工具,这就是pig。它在 MapReduce的基础上创建了更简单的过程语言抽象,为 Hadoop应用程序提供了一种更加接近结构化查询语言 (SQL)的接口。不需要编写一个单独的 MapReduce应用程序,可以用 Pig Latin语言写一个脚本,在集群中自动并行处理与分发该脚本。
Pig使用的两种模式:
第一种是 Local(本地)模式,它不需要依赖 Hadoop或 Hadoop分布式文件系统 (HDFS),在该模式中,所有操作都在本地文件系统上下文中的单一 Java虚拟机 (JVM)上执行。另一种模式是 MapReduce模式,它使用了 Hadoop文件系统和集群。我主要是利用hadoop集群对数据进行分析,所以只关注MapReduce模式。
另外,pig与hive的安装及其注意的问题,前面的博客中已经提及。
在master节点上安装pig之后,终端键入:
[plain] view plaincopy
- pig
或者
[plain] view plaincopy
- pig -x mapreduce
如果想以local模式启动,输入:
[plain] view plaincopy
- pig -x local
接下来测试数据,统计Linux系统下passwd的信息,先复制文件到hdfs
grunt> copyFromLocal /etc/passwd passwd
然后执行Pig语句:
[plain] view plaincopy
- grunt>
passwd = LOAD '/test/passwd' USING PigStorage(':') AS
(user:chararray,passwd:chararray, uid:int, gid:int, userinfo:chararray,
home:chararray,shell:chararray);
[plain] view plaincopy
- grunt> DUMP passwd
出现了下面的问题:
Details at logfile: /usr/local/pig/pig_1433189043690.log
查看错误信息可知,10020号端口可能没开,利用下面命令进行查看:[plain] view plaincopy
- lsof | grep 10020
果然没开,然后查看这篇博客hadoop常用端口及定义方法,发现这个10020号端口是mapreduce.jobhistory.address。查看hadoop配置文件mapred-site.xml中已经有了这个定义: </property>
那么服务还没有起来,只可能是在启动hadoop集群时候start-all.sh里面没有包含这一项?那么进行手动启动。
[plain] view plaincopy
- mr-jobhistory-daemon.sh start historyserver
启动pig再次执行上面的过程,即可成功执行。为了方便执行可以将pig命令放入一个脚本,命名为passwd.pig:
DUMP counts;
然后在终端中键入:
[plain] view plaincopy
- pig passwd.pig
即可完成。