我在运行“标准”pig教程-pig script1-hadoop.pig时遇到了一些困难
但是,由于集群设置(用户),我不得不稍微修改一个示例。标准教程要求所有文件 /
我不能在我的案例中使用hdfs,所以我创建了 /pig
为了这个目的
drwxrwxrwx - hdfs hdfs 0 2014-03-31 11:15 /pig
与上传的内容
-rw-r--r-- 3 jakub hdfs 10408717 2014-03-31 10:41 /pig/excite.log.bz2
我还修改了pig脚本script1-hadoop.pig,以遵循以下更改(主要针对load和store命令):
raw = LOAD '/pig/excite.log.bz2' USING PigStorage('\t') AS (user, time, query);
...
STORE ordered_uniq_frequency INTO '/pig/script1-hadoop-results' USING PigStorage();
我运行Pig脚本:
[jakub@hadooptools pigtmp]$ pig script1-hadoop.pig
但运气不好,又犯了错误:
2014-03-31 10:15:11,896 [main] ERROR org.apache.pig.tools.grunt.Grunt - You don't have permission to perform the operation. Error from the server: Permission denied: user=jakub, access=WRITE, inode="/":hdfs:hdfs:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:234)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:214)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:158)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5202)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5184)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:5158)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:3405)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInt(FSNamesystem.java:3375)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3349)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:724)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:502)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:59598)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2053)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2047)
我不太清楚为什么Pig脚本要写进 /
在hdfs上。我知道pig可以在hdfs上存储一些即时结果,所以我修改了pig.temp.dir属性( /etc/pig/conf/pig.properties
)并在hdfs上创建位置 /pig/tmp
```
drwxrwxrwx - jakub hdfs 0 2014-03-31 11:15 /pig/tmp
你知道怎么了吗?本地模式下的清管器正常。
1条答案
按热度按时间cotxawn71#
已排序。
运行pig脚本的用户必须具有写入创建的tmp目录的权限,并且/user/pig\u user\u running必须存在于集群上,并且具有允许他在其中写入的权限。hdfs上的super user是运行namenode进程的用户,通常是hdfs。