2012-07-21 73 views
32

Tôi mới dùng hệ thống tệp phân tán hadoop, tôi đã hoàn tất cài đặt nút đơn hadoop trên máy của tôi. Nhưng sau đó khi tôi sẽ tải dữ liệu lên hdfs, nó sẽ hiển thị thông báo lỗi Permission Denied.Quyền bị từ chối tại hdfs

Thông điệp từ thiết bị đầu cuối với lệnh:

[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input 
put: /usr/local/input-data (Permission denied) 

[email protected]:/usr/local/hadoop$ 

Sau khi sử dụng sudo và thêm hduser để sudouser:

[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe 
put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 

[email protected]:/usr/local/hadoop$ 
+1

làm bạn có quyền truy cập vào các thư mục - bạn đang sử dụng sudo? –

+0

Có, sau khi sử dụng sudo ,,,, hduser @ ubuntu:/usr/local/hadoop $ sudo bin/hadoop fs -put/usr/local/input-data// inwe đặt: org.apache.hadoop.security. AccessControlException: Quyền bị từ chối: user = root, access = WRITE, inode = "": hduser: supergroup: rwxr-xr-x hduser @ ubuntu:/usr/local/hadoop $ –

+0

Trong trường hợp của tôi, đó là vì tôi đã cố gắng để tải xuống tệp ở một vị trí trong hệ thống tệp của tôi nơi tôi không có quyền. – optimist

Trả lời

51

tôi giải quyết vấn đề này tạm thời bằng cách tắt các dfs permission.By thêm bên dưới mã đặc tính để conf/HDFS-site.xml

<property> 
    <name>dfs.permissions</name> 
    <value>false</value> 
</property> 
+2

Đây là điều đầu tiên tôi đặt trong một cụm mới ;-) –

+0

thư mục 'conf' ở đâu? –

+1

Thư mục conf là cấu hình của nút tên. Trong trường hợp của tôi sử dụng hadeb cài sẵn homebrew, tuy nhiên nó nằm trong /usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop/hdfs-site.xml –

14

Bạn đang gặp hai vấn đề riêng biệt ở đây:


[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) 

Ở đây, người dùng hduser không có quyền truy cập vào thư mục địa phương /usr/local/input-data. Đó là, các quyền cục bộ của bạn quá hạn chế. Bạn nên thay đổi nó.


[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x 

Ở đây, người dùng root (kể từ khi bạn đang sử dụng sudo) không có quyền truy cập vào thư mục HDFS /input. Như bạn có thể thấy: hduser:supergroup:rwxr-xr-x chỉ nói hduser có quyền ghi. Hadoop không thực sự tôn trọng root là một người dùng đặc biệt.


Để sửa lỗi này, tôi đề nghị bạn thay đổi các điều khoản trên dữ liệu địa phương:

sudo chmod -R og+rx /usr/local/input-data/ 

Sau đó, hãy thử các lệnh put lại như hduser.

+0

copyFromLocal: org.apache.hadoop.security.AccessControlException: Quyền bị từ chối: user = root, truy cập = WRITE, inode = "": hduser: supergroup: rwxr-xr-x Sau khi thay đổi quyền trên, lỗi được nhắc. –

+2

không làm 'put' là' sudo'. Làm nó như 'hduser'. –

42

Tôi có tình huống tương tự và đây là cách tiếp cận của tôi mà là hơi khác nhau:

HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt/

gì bạn thực sự làm là bạn đọc tập tin địa phương phù hợp với quyền địa phương của bạn, nhưng khi đặt file trên HDFS bạn được chứng thực như sử dụng hdfs. Bạn có thể làm điều này với ID khác (hãy cẩn thận với cấu hình lược đồ auth thực nhưng điều này thường không phải là một trường hợp).

Ưu điểm:

  1. Quyền được lưu giữ trên HDFS.
  2. Bạn không cần sudo.
  3. Bạn không cần thực sự thích hợp cho người dùng cục bộ 'hdfs'.
  4. Bạn không cần sao chép bất kỳ thứ gì hoặc thay đổi quyền vì các điểm trước đó.
4

Khởi chạy tiện ích như hduser (từ gốc) và chạy lệnh của bạn

sudo -u hduser bash 
hadoop fs -put /usr/local/input-data/ /input 

[cập nhật] Cũng lưu ý rằng người dùng hdfs là siêu người dùng và có tất cả r/w đặc quyền.

+0

Không bắt buộc phải bắt đầu trình bao. 'sudo -u hdfs hadoop fs -chmod 777/hbase' cũng hoạt động. – 030

+0

Điểm tốt, tôi cho rằng bạn sẽ muốn chạy nhiều lệnh dưới dạng hduser. –

3

Tôi đã giải quyết vấn đề này bằng cách sử dụng các bước sau

su hdfs 
hadoop fs -put /usr/local/input-data/ /input 
exit 
Các vấn đề liên quan