Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2022-06-30, 04:03

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 5 篇文章 ] 
發表人 內容
 文章主題 : 用php的passthru執行hadoop會有錯誤出現?
文章發表於 : 2013-10-31, 18:15 
離線

註冊時間: 2013-03-22, 20:28
文章: 26
我使用php的passthru來執行hadoop裡的jar檔,網路找好久發現好像是沒有權限?
有用了http://forum.hadoop.tw/viewtopic.php?f=7&t=2413&start=0這篇的作法,但還是發生錯誤...
但我有把www-data加入到hadoop群組裡才對,不曉得錯誤到底是? 是我還漏掉了甚麼嗎?

jar指令如下:
代碼:
passthru("/opt/hadoop/bin/hadoop jar /var/www/123.jar /user/n4540/test /user/n4540/output 2>&1 1> /dev/null");

但其他的hadoop指令像-ls或-cat都是可以用的。
代碼:
passthru('/opt/hadoop/bin/hadoop fs -cat /user/n4540/test/123.txt');
passthru("/opt/hadoop/bin/hadoop fs -ls /user/n4540");

錯誤代碼如下:
代碼:
13/10/31 17:49:30 ERROR security.UserGroupInformation: PriviledgedActionException as:www-data cause:org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=www-data, access=WRITE, inode="mapred":n4540:supergroup:rwxr-xr-x
Exception in thread "main" org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=www-data, access=WRITE, inode="mapred":n4540:supergroup:rwxr-xr-x
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
   at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:95)
   at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:57)
   at org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:1459)
   at org.apache.hadoop.hdfs.DistributedFileSystem.mkdirs(DistributedFileSystem.java:362)
   at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:126)
   at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:942)
   at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)
   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:1190)
   at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:936)
   at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:910)
   at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1353)
   at wordcount.WordCount.main(WordCount.java:56)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.apache.hadoop.util.RunJar.main(RunJar.java:160)
Caused by: org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.security.AccessControlException: Permission denied: user=www-data, access=WRITE, inode="mapred":n4540:supergroup:rwxr-xr-x
   at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:217)
   at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:197)
   at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:141)
   at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5758)
   at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:5731)
   at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:2502)
   at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:2469)
   at org.apache.hadoop.hdfs.server.namenode.NameNode.mkdirs(NameNode.java:911)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:587)
   at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1432)
   at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1428)
   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:1190)
   at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1426)

   at org.apache.hadoop.ipc.Client.call(Client.java:1113)
   at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)
   at com.sun.proxy.$Proxy1.mkdirs(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
   at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
   at com.sun.proxy.$Proxy1.mkdirs(Unknown Source)
   at org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:1457)
   ... 16 more


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 用php的passthru執行hadoop會有錯誤出現?
文章發表於 : 2013-10-31, 23:34 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
先跑 hadoop fs -chmod -R 775 /user/n4540 試試看~

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 用php的passthru執行hadoop會有錯誤出現?
文章發表於 : 2013-11-01, 08:09 
離線

註冊時間: 2013-11-01, 07:15
文章: 2
先按照jazz说的做。如果还是不行就修改hdfs-site.xml文件,增加如下内容:
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
再重启hadoop


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 用php的passthru執行hadoop會有錯誤出現?
文章發表於 : 2013-11-01, 18:54 
離線

註冊時間: 2013-03-22, 20:28
文章: 26
太感謝了! jazz大提供的辦法之前也用過了還是不行,
結果就像jack大提供的修改hdfs-site.xml就可以了。萬分感謝!!


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 用php的passthru執行hadoop會有錯誤出現?
文章發表於 : 2013-11-02, 03:39 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
RED 寫:
太感謝了! jazz大提供的辦法之前也用過了還是不行,
結果就像jack大提供的修改hdfs-site.xml就可以了。萬分感謝!!


呵,我錯了~因為 www-data 並沒有加入 supergroup,所以要設成 777 才行。
意思同 jack 將權限的支援關閉,當然啦~實驗可以,如果真的是線上服務的話,這樣是很大的資安漏洞。

這個權限的問題我有想過,有幾種解法:
(1) 用 www-data 啟動 Hadoop - 這樣更危險 XD
(2) 將 www-data 身份加入 supergroup 群組 + chmod 775
(3) 看能否讓 php 切換身份成其他身份(ex. mapred)

- Jazz


回頂端
 個人資料 E-mail  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 5 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
正體中文語系由 竹貓星球 維護製作