HBase
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> HBase

Hạn chế của Hadoop, Cách giải quyết nhược điểm của Hadoop

Chúng tôi đã thảo luận về Tính năng của Hadoop trong hướng dẫn Hadoop trước đây của chúng tôi. Bây giờ chúng ta sẽ đề cập đến những hạn chế của Hadoop. Có nhiều nhược điểm khác nhau của các khuôn khổ Apache Hadoop.

Ví dụ:Sự cố tệp nhỏ, Xử lý chậm, Chỉ xử lý hàng loạt, Độ trễ, Vấn đề bảo mật, Lỗ hổng bảo mật, Không có bộ nhớ đệm, v.v.

Tất cả những hạn chế này của Hadoop, chúng tôi sẽ thảo luận chi tiết trong hướng dẫn Hadoop này.

Hadoop là gì?

Apache Hadoop là một khung phần mềm mã nguồn mở để lưu trữ phân tán và xử lý số lượng lớn các tập dữ liệu. Mã nguồn mở có nghĩa là nó có sẵn miễn phí và thậm chí chúng ta có thể thay đổi mã nguồn của nó theo yêu cầu.

Apache Hadoop cũng làm cho nó có thể chạy các ứng dụng trên một hệ thống với hàng nghìn nút. Hệ thống tệp phân tán của nó cung cấp tốc độ truyền dữ liệu nhanh chóng giữa các nút.

Nó cũng cho phép hệ thống tiếp tục hoạt động trong trường hợp nút bị lỗi. Các tính năng chính của Hadoop như sau:

  • Trong Apache Hadoop, dữ liệu có sẵn mặc dù máy bị lỗi do nhiều bản sao dữ liệu. Vì vậy, nếu bất kỳ máy nào gặp sự cố, thì người ta có thể truy cập dữ liệu từ một đường dẫn khác.
  • Apache Hadoop có thể mở rộng, vì dễ dàng thêm phần cứng mới vào nút.
  • Hadoop có khả năng chịu lỗi cao, vì theo mặc định, 3 bản sao của mỗi khối được lưu trữ trên toàn bộ cụm. Vì vậy, nếu bất kỳ nút nào trong cụm gặp sự cố, dữ liệu trên nút đó có thể được khôi phục từ nút khác một cách dễ dàng.
  • Apache Hadoop chạy trên một nhóm phần cứng hàng hóa không đắt lắm.
  • Trong Apache Hadoop, dữ liệu được lưu trữ đáng tin cậy trên cụm bất chấp lỗi phần cứng do sao chép dữ liệu trên cụm.

Mặc dù Hadoop là công cụ mạnh mẽ nhất của Dữ liệu lớn, nhưng vẫn có nhiều hạn chế đối với nó. Do những hạn chế của Hadoop, Apache Spark và Apache Flink đã ra đời.

Hạn chế của Hadoop

Các hạn chế khác nhau của Apache Hadoop được đưa ra bên dưới cùng với giải pháp của chúng-

a. Sự cố với tệp nhỏ

Vấn đề chính với Hadoop là nó không phù hợp với dữ liệu nhỏ. HDFS thiếu khả năng hỗ trợ đọc ngẫu nhiên nhỏ do thiết kế dung lượng cao.

Các tệp nhỏ có kích thước nhỏ hơn kích thước Khối HDFS (mặc định 128MB). Nếu bạn đang lưu trữ số lượng lớn các tệp nhỏ này, HDFS không thể xử lý nhiều tệp nhỏ này.

Vì HDFS được thiết kế để hoạt động với một số lượng nhỏ các tệp lớn để lưu trữ các tập dữ liệu lớn hơn là một số lượng lớn các tệp nhỏ. Nếu có nhiều tệp nhỏ, thì Mã tên sẽ bị quá tải vì nó lưu trữ không gian tên của HDFS.

Giải pháp:

Chỉ cần hợp nhất các tệp nhỏ để tạo tệp lớn hơn và sau đó sao chép lớn hơn sang HDFS.

Lưu trữ Hadoop (Tệp HAR) giải quyết vấn đề có nhiều tệp nhỏ. Hadoop Archives hoạt động bằng cách xây dựng một hệ thống tệp phân lớp trên đầu HDFS.

Với lệnh lưu trữ Hadoop trợ giúp, các tệp HAR được tạo; điều này chạy một công việc MapReduce để đóng gói các tệp đang được lưu trữ thành một số lượng nhỏ tệp HDFS. Đọc tệp qua HAR không hiệu quả hơn đọc qua HDFS.

Vì mỗi lần truy cập tệp HAR yêu cầu đọc hai tệp chỉ mục cũng như đọc tệp dữ liệu, điều này sẽ làm cho nó chậm hơn.

Các tệp trình tự cũng khắc phục được sự cố tệp nhỏ. Trong đó chúng tôi sử dụng tên tệp làm khóa và nội dung tệp làm giá trị.

Bằng cách viết chương trình cho các tệp (100 KB), chúng tôi có thể đặt chúng vào một tệp Trình tự duy nhất và sau đó chúng tôi có thể xử lý chúng theo kiểu truyền trực tuyến hoạt động trên tệp Trình tự.

MapReduce trong Hadoop có thể chia tệp Trình tự thành nhiều phần và hoạt động trên từng phần một cách độc lập vì tệp Trình tự có thể chia nhỏ.

Bằng cách lưu trữ tệp trong Hbase, chúng tôi có thể khắc phục sự cố tệp nhỏ. Chúng tôi không thực sự lưu trữ hàng triệu tệp nhỏ vào HBase thay vì thêm nội dung nhị phân của tệp vào một ô.

b. Tốc độ xử lý chậm

MapReduce xử lý một lượng lớn dữ liệu. Trong Hadoop, MapReduce hoạt động bằng cách chia quá trình thành các giai đoạn: Bản đồ Giảm . Vì vậy, MapReduce đòi hỏi nhiều thời gian để thực hiện các tác vụ này, do đó làm tăng độ trễ. Do đó, làm giảm tốc độ xử lý.

Giải pháp:

Bằng cách xử lý dữ liệu trong bộ nhớ, Apache Spark khắc phục được vấn đề này. Giống như trong xử lý trong bộ nhớ, không tốn thời gian để di chuyển dữ liệu / quy trình vào và ra khỏi đĩa, do đó, điều này làm cho nó nhanh hơn.

Apache Spark nhanh hơn 100 lần so với MapReduce vì nó xử lý mọi thứ trong bộ nhớ.

Flink cũng có thể khắc phục vấn đề này. Flink xử lý nhanh hơn Spark vì kiến ​​trúc phát trực tuyến của nó.

c. Chỉ hỗ trợ xử lý hàng loạt

Hadoop chỉ hỗ trợ xử lý hàng loạt, nó không thích hợp để truyền dữ liệu trực tuyến. Do đó, hiệu suất tổng thể chậm hơn. Khung công tác MapReduce không tận dụng tối đa bộ nhớ của cụm Hadoop.

Giải pháp

Apache Spark giải quyết vấn đề này vì nó hỗ trợ xử lý luồng. Nhưng xử lý luồng Spark không hiệu quả bằng Flink vì nó sử dụng xử lý hàng loạt vi mô. Apache Flink cải thiện hiệu suất tổng thể vì nó cung cấp một thời gian chạy duy nhất cho quá trình phát trực tuyến cũng như xử lý hàng loạt.

d. Không xử lý trong thời gian thực

Apache Hadoop là một khung xử lý hàng loạt. Nó có nghĩa là cần một lượng lớn dữ liệu đầu vào, xử lý và tạo ra kết quả.

Xử lý hàng loạt rất hiệu quả để xử lý một khối lượng lớn dữ liệu, nhưng phụ thuộc vào kích thước dữ liệu được xử lý và khả năng tính toán của hệ thống; một đầu ra có thể bị trì hoãn đáng kể. Apache Hadoop không phù hợp với xử lý Thời gian thực.

Giải pháp:

Tia lửa thích hợp để xử lý luồng. Xử lý hấp cung cấp dữ liệu đầu vào / đầu ra liên tục. Nó xử lý dữ liệu trong một khoảng thời gian nhỏ.

Flink cung cấp thời gian chạy duy nhất cho cả luồng cũng như xử lý hàng loạt.

e. Xử lý lặp lại

Apache Hadoop không hiệu quả lắm đối với quá trình xử lý lặp đi lặp lại. Vì Hadoop không được hỗ trợ luồng dữ liệu tuần hoàn (tức là một chuỗi các giai đoạn trong đó mỗi đầu ra của giai đoạn trước là đầu vào cho giai đoạn tiếp theo).

Giải pháp:

Spark khắc phục vấn đề này. Vì Apache Spark truy cập dữ liệu từ RAM thay vì Đĩa. Điều này cải thiện đáng kể hiệu suất của một thuật toán lặp lại truy cập lặp lại cùng một tập dữ liệu.

Trong Apache Spark, để xử lý lặp đi lặp lại, mỗi lần lặp phải được lập lịch và thực thi riêng biệt.

f. Độ trễ

MapReduce trong Hadoop chậm hơn vì nó hỗ trợ định dạng, cấu trúc và lượng dữ liệu khổng lồ khác nhau. Trong MapReduce, Bản đồ lấy một tập dữ liệu và chuyển đổi nó thành một tập dữ liệu khác, trong đó một phần tử riêng lẻ được chia nhỏ thành một cặp khóa-giá trị.

Reduce lấy đầu ra từ bản đồ dưới dạng và Reduce lấy đầu ra từ bản đồ làm đầu vào và xử lý thêm. MapReduce đòi hỏi nhiều thời gian để thực hiện các tác vụ này, do đó làm tăng độ trễ.

Giải pháp:

Apache Spark có thể làm giảm vấn đề này. Mặc dù Spark là hệ thống theo lô, nhưng nó tương đối nhanh hơn, vì nó lưu trữ phần lớn dữ liệu đầu vào trên bộ nhớ bằng RDD. Truyền dữ liệu Apache Flink đạt được độ trễ thấp và thông lượng cao.

g. Không dễ sử dụng

Nhà phát triển MapReduce trong Hadoop cần phải viết tay mã cho mỗi và mọi thao tác, điều này khiến việc làm việc rất khó khăn. Trong Hadoop, MapReduce không có chế độ tương tác, nhưng việc thêm tổ ong và lợn giúp làm việc với MapReduce dễ dàng hơn một chút.

Giải pháp:

Spark đã khắc phục được vấn đề này, vì Spark có chế độ tương tác. Vì vậy, các nhà phát triển và người dùng đều có thể có phản hồi trung gian cho các truy vấn và các hoạt động khác.

Vì tia lửa có hàng tấn người vận hành cấp cao nên việc lập trình Spark rất dễ dàng. Người ta cũng có thể sử dụng Apache Flink vì nó cũng có các toán tử cấp cao.

h. Vấn đề bảo mật

Apache Hadoop đang gặp nhiều thách thức trong việc duy trì các ứng dụng phức tạp. Hadoop thiếu mã hóa ở cấp độ lưu trữ và mạng, đây là một điểm đáng quan tâm chính. Apache Hadoop hỗ trợ xác thực Kerberos, khó quản lý.

Giải pháp:

Apache Spark cung cấp phần thưởng bảo mật. Nếu bạn chạy Apache Spark trong HDFS, nó có thể sử dụng HDFS ACL và quyền cấp tệp.

i. Dễ bị tổn thương bởi Thiên nhiên

Apache Hadoop được viết bằng Java. Java, là ngôn ngữ phổ biến nhất, do đó java bị tội phạm mạng khai thác nhiều nhất.

j. Không có bộ nhớ đệm

Apache Hadoop không hiệu quả cho bộ nhớ đệm. MapReduce không thể lưu vào bộ nhớ đệm dữ liệu trung gian trong bộ nhớ cho yêu cầu thêm và điều này làm giảm hiệu suất của Hadoop.

Giải pháp:

Spark và Flink khắc phục vấn đề này. Dữ liệu bộ nhớ cache Spark và Flink trong bộ nhớ để có các lần lặp lại tiếp theo nhằm nâng cao hiệu suất tổng thể.

k. Mã dài dòng

Apache Hadoop có 1, 20.000 dòng mã. Số dòng tạo ra số lượng lỗi. Do đó, sẽ mất nhiều thời gian hơn để thực thi các chương trình.

Giải pháp:

Spark và Flink được viết bằng Scala và Java. Nhưng việc triển khai là trong Scala, vì vậy số lượng dòng mã ít hơn Hadoop. Do đó, mất ít thời gian hơn để thực thi các chương trình.

Kết luận

Do hạn chế của Hadoop, nhu cầu về Spark và Flink đã xuất hiện. Do đó, làm cho hệ thống thân thiện hơn khi sử dụng một lượng lớn dữ liệu.

Apache Spark cung cấp khả năng xử lý dữ liệu trong bộ nhớ, do đó cải thiện tốc độ xử lý. Flink cải thiện hiệu suất vì nó cung cấp thời gian chạy một lần cho quá trình phát trực tuyến cũng như xử lý hàng loạt.

Spark cung cấp phần thưởng bảo mật. Do đó, người ta có thể giải quyết tất cả những hạn chế này của Hadoop bằng cách sử dụng các công nghệ dữ liệu lớn khác như Apache Spark và Flink.

Nếu bạn tìm thấy những hạn chế khác của Hadoop, Vì vậy, vui lòng cho chúng tôi biết bằng cách để lại nhận xét trong phần đưa ra bên dưới.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tính sẵn sàng cao (Đa AZ) cho Cơ sở dữ liệu hoạt động của CDP

  2. Thực thi đầu cơ trong Hadoop MapReduce

  3. Apache Spark đi kèm với Apache HBase với Mô-đun HBase-Spark

  4. 6 tính năng hàng đầu của HDFS - Hướng dẫn sử dụng Hadoop HDFS

  5. giết zombie chết máy chủ vùng