2012-07-20 36 views

Trả lời

17

Bạn có thể sử dụng lệnh hadoop fs -ls để liệt kê các tệp trong thư mục hiện tại cũng như chi tiết của chúng. Cột thứ 5 trong đầu ra lệnh chứa kích thước tệp theo byte.

Ví dụ: lệnh hadoop fs -ls input cung cấp kết quả sau:

Found 1 items 
-rw-r--r-- 1 hduser supergroup  45956 2012-07-19 20:57 /user/hduser/input/sou 

Kích thước tệp sou là 45956 byte.

+0

Bạn sẽ tạo kích thước như thế nào ở dạng có thể đọc được của con người? -ls - lah không hoạt động ở đây –

27

Tôi cũng thấy mình sử dụng hadoop fs -dus <path> rất nhiều. Ví dụ, nếu một thư mục trên HDFS có tên là "/ user/frylock/input" chứa 100 tập tin và bạn cần có tổng kích thước cho tất cả những dữ liệu mà bạn có thể chạy:

hadoop fs -dus /user/frylock/input 

và bạn sẽ nhận lại tổng kích thước (tính bằng byte) của tất cả các tệp trong thư mục "/ user/frylock/input".

Ngoài ra, hãy lưu ý rằng HDFS lưu trữ dữ liệu dư thừa để lưu trữ vật lý thực tế được sử dụng bởi một tệp có thể gấp 3 lần hoặc nhiều hơn số được báo cáo bởi hadoop fs -lshadoop fs -dus.

+0

Ngoài điểm cuối cùng - yếu tố nhân rộng là số được hiển thị sau cờ quyền và trước chủ sở hữu (cột thứ 2 trong câu trả lời của @ adhunavkulkarni) –

+3

hadoop fs -du -s cho mới hơn phiên bản – serhanbaker

+17

Sử dụng 'hadoop fs -du -s -h/user/frylock/input' để có đầu ra dễ đọc hơn nhiều. – axiom

2

Nếu bạn muốn thực hiện thông qua API, bạn có thể sử dụng phương thức 'getFileStatus()'.

+0

Nó không đúng, nó không trả về kích thước tập tin nó trả về kích thước khối được phân bổ mà sẽ không bằng 0 cho các tệp rỗng. Mặc định là 67108864. – user1613360

10

Tôi đã sử dụng chức năng dưới đây đã giúp tôi nhận được kích thước tệp.

public class GetflStatus 
{ 
    public long getflSize(String args) throws IOException, FileNotFoundException 
    { 
     Configuration config = new Configuration(); 
     Path path = new Path(args); 
     FileSystem hdfs = path.getFileSystem(config); 
     ContentSummary cSummary = hdfs.getContentSummary(path); 
     long length = cSummary.getLength(); 
     return length; 
    } 
} 
+0

Bạn có thể cho tôi biết nếu điều này trả về 7906 thì kích thước của thư mục đó là bao nhiêu? Là nó trong byte hoặc trong kbs? – retiremonk

4

Xem lệnh dưới đây với kịch bản awk để xem kích thước (trong GB) sản lượng lọc trong HDFS:

hadoop fs -du -s /data/ClientDataNew/**A*** | awk '{s+=$1} END {printf "%.3fGB\n", s/1000000000}' 

đầu ra ---> 2.089GB

hadoop fs -du -s /data/ClientDataNew/**B*** | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}' 

đầu ra ---> 1.724GB

hadoop fs -du -s /data/ClientDataNew/**C*** | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}' 

đầu ra ---> 0.986GB

Các vấn đề liên quan