Pig 0.16本地模式加载JSON时Elephant Bird Jar不存在报错求助
解决Pig 0.16本地模式下注册Elephant Bird Jar文件找不到的问题
我来帮你搞定这个报错,咱们一步步排查和解决:
先确认文件是否真的存在于指定路径
别着急改REGISTER语句,先手动验证路径的正确性。打开终端执行以下命令,检查两个Jar文件是否存在:ls /home/shanky/Downloads/elephant-bird-hadoop-compat-4.1.jar ls /home/shanky/Downloads/elephant-bird-pig-4.1.jar如果命令返回
No such file or directory,说明要么你下载的Jar文件名有误(比如版本号不是4.1,或者文件名拼写错误),要么文件根本没在这个目录下。先把文件路径和名称核对准确,这是最常见的问题。本地模式下不要加hdfs://前缀
Pig本地模式是直接读取本地文件系统,不是HDFS,所以加hdfs://前缀反而会让Pig去HDFS里找文件,自然找不到。正确的REGISTER写法就是直接用本地绝对路径,比如:REGISTER /home/shanky/Downloads/elephant-bird-hadoop-compat-4.1.jar; REGISTER /home/shanky/Downloads/elephant-bird-pig-4.1.jar;要是路径里有空格才需要加引号,没有空格的话加不加引号都没问题,重点还是路径本身要对。
检查文件访问权限
有时候文件虽然存在,但Pig运行的用户没有访问这个目录的权限。比如如果你用sudo pig启动本地模式,root用户可能没有访问/home/shanky/Downloads的权限。这时候可以把Jar文件复制到一个公共目录(比如/tmp),再修改REGISTER语句:cp /home/shanky/Downloads/elephant-bird-*.jar /tmp/然后在Pig里执行:
REGISTER /tmp/elephant-bird-hadoop-compat-4.1.jar; REGISTER /tmp/elephant-bird-pig-4.1.jar;偷懒的替代方案:把Jar放到Pig的lib目录
如果你不想每次都手动REGISTER,可以把这两个Jar文件复制到Pig安装目录下的lib文件夹里,比如:cp /home/shanky/Downloads/elephant-bird-*.jar /path/to/your/pig/lib/这样启动Pig本地模式时,系统会自动加载这些Jar文件,不用再写REGISTER语句了。
内容的提问来源于stack exchange,提问作者Shashank Tripathi
相关产品推荐
相关产品推荐

