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  


即可完成。

posted @ 2016-10-23 20:40  wangq17  阅读(168)  评论(0)    收藏  举报