Home > Programming > Small file problem in Hadoop

Small file problem in Hadoop

Như chúng ta đã biết, file trong HDFS được chia thành nhiều block, mỗi block được lưu thành nhiều bản (mặc định là 3) trên các node khác nhau. Độ lớn của block có thể dùng tham số để điều chỉnh, mặc định là 64MB.

Một file có dung lượng nhỏ hơn độ lớn của 1 block thì được xem là small file. Hadoop được phát triển dựa trên ý tưởng của Google cloud computing system, đặc biệt thích hợp với xử lí massvie data, big file. Trong khi đó, nhiều ứng dụng không thể tránh khỏi làm việc với các small file. Các small file có thể là input data hoặc output data, được sinh ra trong quá trình chạy ứng dụng. Trong trường hợp này, Hadoop bộc lộ một số khuyết điểm.

Quá nhiều small file sẽ dẫn đến tăng độ lớn của metadata trong NameNode, trong khi đó Hadoop cluster lại thường dùng PCs nên lượng tăng này không thể không chú ý đến. Quá nhiều metadata có thể làm cho RAM của NameNode không đủ dùng, còn làm tăng thời gian tìm kiếm. Quá nhiều file cũng làm cho DataNode cần nhiều thời gian hơn để scan các dữ liệu mà nó lưu để tạo heartbeat gởi về NameNode theo định kì. Hơn nữa, nếu input data của một ứng dụng chứa quá nhiều small file sẽ dẫn đến ứng dụng sẽ được chia thành quá nhiều map task, do hệ thống chỉ định 1 map task để xử lí 1 block dữ liệu. Vì vậy, nếu hệ thống có thiết lập cận trên của số lượng task/user, khi số lượng task đã đạt cận trên, ứng dụng sẽ bị abort dù có quan trọng thế nào đi nữa.

Hiện tại, Hadoop cung cấp 2 cách khắc phục vấn đề trên: archives và sequence files.

Hadoop archives là file dạng *.har, chứa metadata (chia thành masterindex và index) với data. Archives thật ra sử dụng 1 file để đại diện cho 2 hoặc nhiều file, do đó có thể giảm được độ lớn của metadata. Tuy nhiên, cách này không hỗ trợ nén dữ liệu, hoặc nối dữ liệu, nên dữ liệu trên DataNode vẫn không hề thay đổi, số lượng small file vẫn nhiều như vậy. Hơn nữa, việc tìm kiếm file sẽ phải qua 2 bước (tìm trong masterindex rồi đến index) mới thấy được data, do vậy cần nhiều thời gian hơn.

Phương pháp sequence files đem nhiều small file nối lại với nhau thành 1 file sequence, file này được xử lí theo kiểu streaming. Khác với archives, cách này hỗ trợ nén dữ liệu giúp giảm dung lượng ổ cứng được sử dụng. Do đó, sequence file đồng thời giảm được metadata mà cũng giảm được số lượng file và dung lượng. Tuy nhiên, xử lí sequence file cần nhiều thời gian hơn, hơn nữa lại phụ thuộc vào java platform, nếu các node cài các version khác nhau của java thì không thể sử dụng được.

Tài liệu []đưa ra một cách giải quyết khác, cho phép cả việc nén dữ liệu và không phụ thuộc platform. Phương pháp này thông qua phán đoán input data block xem có nhỏ hơn block mặc định không, nếu đúng thì tự động giảm số reduce task. Do mỗi reduce task sinh ra 1 file output, nên giảm đi số reduce task sẽ làm giảm đi số output file. Tuy nhiên, tôi cho rằng độ lớn của input data block không liêu quan gì đến số reduce task, small input cũng có thể dẫn đến big output! Tiếc là, tài liệu này chỉ nói là đang test phương pháp này mà không cung cấp một chi tiết kĩ thuật nào, giống như tham phát biểu quá mà quên chất lượng. :D

Tham khảo:

[1]Neethu Mohandas, Sabu M. Thampi. Improving Hadoop Performance in Handling Small Files. ACC 2011, Part IV, CCIS 193, pp. 187–194, 2011

[2]Dean, J., Ghemawat, S.: MapReduce: Simplified Data Processing on Large Clusters.  In: Proceedings  of  the 6th Symposium on Operating Systems Design  and Implementation, San Francisco CA (December 2004)

[3]Mackey, G., Sehrish, S., Wang, J.: Improving Metadata Management for Small Files in HDFS. In: Proceedings of IEEE International Conference on Cluster Computing and Workshops, pp. 1–4 (August 2009)

[4]http://hadoop.apache.org/core/docs/r0.20.0/hadoop_archives.html

Categories: Programming Tags:
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: