2014-04-20 30 views
3

我已經設置了AWS EMR。我SSH進入主節點。我想將文件複製到hdfs系統中。在我的程序中這樣做的小代碼行是:添加ec2用戶使用hadoop

os.system('/home/hadoop/bin/hdfs dfs -put %s PATH_to_HADOOP' % tmp_output) 

我想輸入我的hdfs文件系統的路徑。

[[email protected] input]$ /home/hadoop/bin/hdfs dfs -ls/
Found 2 items 
drwxr-xr-x - hadoop supergroup   0 2014-04-14 22:21 /hbase 
drwxrwx--- - hadoop supergroup   0 2014-04-14 22:19 /tmp 

我嘗試

[[email protected] input]$ /home/hadoop/bin/hdfs dfs -mkdir /tmp/stockmarkets 
mkdir: Permission denied: user=ec2-user, access=EXECUTE, inode="/tmp":hadoop:supergroup:drwxrwx--- 

因此,添加EC2用戶使用Hadoop的我跟着這些指示:

http://cloudcelebrity.wordpress.com/2013/06/05/handling-permission-denied-error-on-hdfs/

但是在我寫的(用ubuntu代替ec2用戶)

sudo adduser ec2-user hadoop 

不是得到一個附加消息,我得到:

Usage: useradd [options] LOGIN 
Options: 
    -b, --base-dir BASE_DIR  base directory for the home directory of the 
           new account 
    -c, --comment COMMENT   GECOS field of the new account 
    -d, --home-dir HOME_DIR  home directory of the new account 
    -D, --defaults    print or change default useradd configuration 
    -e, --expiredate EXPIRE_DATE expiration date of the new account 
    -f, --inactive INACTIVE  password inactivity period of the new account 
    -g, --gid GROUP    name or ID of the primary group of the new 
           account 
    -G, --groups GROUPS   list of supplementary groups of the new 
           account 
    -h, --help     display this help message and exit 
    -k, --skel SKEL_DIR   use this alternative skeleton directory 
    -K, --key KEY=VALUE   override /etc/login.defs defaults 
    -l, --no-log-init    do not add the user to the lastlog and 
           faillog databases 
    -m, --create-home    create the user's home directory 
    -M, --no-create-home   do not create the user's home directory 
    -N, --no-user-group   do not create a group with the same name as 
           the user 
    -o, --non-unique    allow to create users with duplicate 
           (non-unique) UID 
    -p, --password PASSWORD  encrypted password of the new account 
    -r, --system     create a system account 
    -s, --shell SHELL    login shell of the new account 
    -u, --uid UID     user ID of the new account 
    -U, --user-group    create a group with the same name as the user 
    -Z, --selinux-user SEUSER  use a specific SEUSER for the SELinux user mapping 

所以我所有的困惑和擰..請幫助> ....

回答

5

SSH。

從那裏你可以做任何你喜歡的HDFS,而不必「su」。我只是做了一個mkdir並運行distcp和一個流式作業。按照EMR說明,我按照hadoop @執行所有操作。

+0

這個簡單的解決方案確實讓我工作。雖然很高興能夠找到如何以ec2用戶的身份完成它。所以我會等待幾天的洗脫,然後接受你的答案..儘管..謝謝.. –

+1

在他們的文檔中亞馬遜竟然說:重要 你必須使用登錄名hadoop當您連接到Amazon EMR羣集節點時,否則類似於服務器的錯誤可能會發生我們的密鑰錯誤。 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-connect-master-node-ssh.html –

0

如果你看的許可HDFS目錄/ tmp,您可以看到/ tmp由用戶hadoop擁有,而ec2-user沒有在/ tmp中創建文件/目錄的權限

爲目錄/ tmp分配正確權限,請使用以下命令

[[email protected] input]$ sudo -su hadoop /home/hadoop/bin/hdfs dfs -chmod 777 /tmp 

現在嘗試在爲Hadoop的@(publicIP)亞馬遜EMR創建目錄內的/ tmp HDFS位置

[[email protected] input]$ /home/hadoop/bin/hdfs dfs -mkdir /tmp/stockmarkets 
+0

嗨我試過我得到這個消息:'抱歉,用戶ec2用戶不允許執行'/ bin/bash -c/home/hadoop/bin/hdfs dfs -chmod 777/tmp'作爲hadoop on ip- 172-31-0-185.us-west-2.compute.internal' –

+0

你可以執行命令併發布它的輸出:「cat/etc/passwd | grep hadoop」 – sachin

+0

確定這裏是'hadoop:x:220: 501 ::/home/hadoop:/ bin/bash' –