pig版本的选择非常重要!!!
因为pig不同版本支持的hadoop版本不同,很容易因为版本不同导致错误。直接上图说明
上图可以看到,官网针对每个pig适用的hadoop版本都做了说明,所以版本选择很重要。
我用的是hadoop1.0.0。按照官网的说法,最新的pig0.17.0都是可以使用的,但是我下载下来安装后,就直接报错,经过一番尝试,最高能用的版本是pig0.12.0。坑爹!!!!
pig官网:http://pig.apache.org/ 进去后,按照下面的步骤:
进去后就是一些下载的镜像网站,随便选一个,如果发现下载速度太慢就换一个。
这里只能看到最新的pig0.16.0和pig0.17.0版本,但是1标记的地方是旧版本的链接
解压:
tar -zxvf pig-0.12.0.tar.gz
移动到合适的位置,你自己觉得哪里合适放哪里
我是放在/usr/local下
mv pig-0.12.0 /usr/local/pig-0.12.0
配置环境变量,pig安装的前提是你成功的安装hadoop,当然也可以不安装,pig会使用自己捆绑的hadoop,不过我没试过,我是自己安装了hadoop1.0.0。
pig要配置的环境变量不多,写在/etc/profile或者~/.bashrc中都可以,我是写在~/.bashrc中的,内容如下:
# pig
export PIG_HOME=/usr/local/pig-0.12.0
export PIG_CLASSPATH=$HADOOP_HOME/conf
export PATH=$PATH:$PIG_HOME/bin
PIG_HOME当然就是你的pig的路径了,HADOOP_HOME是你的hadoop的路径。其他的配置就没有了。
完成后,先启动hadoop,输入:
start-all.sh
成功启动hadoop后才能启动pig。输入:
pig
第一个红色框中指出了你的pig的版本;
第二个红色框指出了错误日志的存放目录(这个位置默认是在~/下,所以最好改一下,不然会有很多日志文件)
修改错误日志的存放路径:打开你的pig目录conf目录下的pig.properties文件。
找到pig.logfile变量,先取消注释,然后后面加上你想要存放错误日志的路径,错误日志能查看错误信息,很适合调试问题。
第三个红色框表明了pig连接hadoop的hdfs;
第四个红色框表明了pig连接hadoop的mapreduce。
至此,pig的安装配置和启动都完成了。
这里有一个英文的配置教程:https://wiki.apache.org/pig/PigPen
1)先要下载这个插件:https://issues.apache.org/jira/browse/PIG-366
选择一个版本下载即可。我用的是0.04的版本,0.7.5和0.7.4我试过了,不能用,只能看到一个图标,所以替换成了0.04的版本。
2)下载完成后,将插件放到eclipse/plugins/下,然后重启eclipse
若能看到PigPen的选项,说明插件成功导入了。
修改Pig jar location项,点击Browse,在你的pig目录下找到pig-x.x.x.jar
点击“New”添加key:ConfigurationPath ; value:你的pig的conf目录路径
点击“Apply”,点击“ok”。
3)新建一个project(最简单的project)
然后新建一个文件,以.pig作为后缀
添加如下内容:
records = load 'PigData/testsmall' using PigStorage(',')
as(year:chararray,temperature:int,quality:int);
dump records;
到这里就出现问题了,点击那三个按钮的第一个按钮:
点击第二个按钮:
这里提示ConfigurationPath没有配置,但是我确实已经配置过了,不知道为什么会报错,而且Failed to create DataStorage也不知道是什么错误,网上的资料太少了。
点击第三个按钮:
Launching the job!
Using the configuration from /usr/local/pig-0.12.0/conf
2017-10-27 16:49:31,683 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:9000
java.lang.RuntimeException: Failed to create DataStorage
at org.apache.pig.backend.hadoop.datastorage.HDataStorage.init(HDataStorage.java:74)
at org.apache.pig.backend.hadoop.datastorage.HDataStorage.(HDataStorage.java:57)
at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.init(HExecutionEngine.java:184)
at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.init(HExecutionEngine.java:132)
at org.apache.pig.impl.PigContext.connect(PigContext.java:172)
at org.apache.pig.PigServer.(PigServer.java:137)
at org.apache.pig.tools.grunt.Grunt.(Grunt.java:43)
at org.apache.pig.Main.main(Main.java:241)
Caused by: java.io.IOException: Call failed on local exception
at org.apache.hadoop.ipc.Client.call(Client.java:718)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:216)
at org.apache.hadoop.dfs.$Proxy0.getProtocolVersion(Unknown Source)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:319)
at org.apache.hadoop.dfs.DFSClient.createRPCNamenode(DFSClient.java:104)
at org.apache.hadoop.dfs.DFSClient.(DFSClient.java:174)
at org.apache.hadoop.dfs.DistributedFileSystem.initialize(DistributedFileSystem.java:67)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1339)
at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:56)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1351)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:213)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:118)
at org.apache.pig.backend.hadoop.datastorage.HDataStorage.init(HDataStorage.java:71)
... 7 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:499)
at org.apache.hadoop.ipc.Client$Connection.run(Client.java:441)
报这个错误,也查不到相关的资料。