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

6 xuất sắc nhất MapReduce nghề Kỹ thuật Tối ưu hóa

Hiệu suất điều chỉnh sẽ giúp đỡ trong việc tối ưu hóa của bạn Hadoop màn biểu diễn. Trong blog này, chúng ta sẽ thảo luận về tất cả những kỹ thuật cho việc tối ưu MapReduce Job.

Trong MapReduce hướng dẫn này, chúng tôi sẽ cung cấp cho bạn 6 lời khuyên quan trọng đối với MapReduce Job Tối ưu hóa như cấu hình đúng cách cluster của bạn, LZO sử dụng nén, điều chỉnh đúng số lượng các nhiệm vụ MapReduce vv.

Lời khuyên cho việc MapReduce Job Tối ưu hóa

Dưới đây là một số công việc MapReduce kỹ thuật tối ưu hóa mà có thể giúp bạn trong việc tối ưu hóa hiệu suất công việc MapReduce.

1. cấu hình thích hợp của bạn cụm

  • Với -noatime tùy chọn Dfs và lưu trữ MapReduce được gắn kết. Điều này sẽ vô hiệu hóa thời gian truy cập. Do đó cải thiện I / O thực hiện.
  • Cố gắng tránh RAID trên TaskTracker và datanode máy. Điều này thường làm giảm hiệu suất.
  • Đảm bảo rằng bạn đã cấu hình mapred.local.dir dfs.data.dir để trỏ đến một thư mục trên mỗi đĩa của bạn. Điều này là để đảm bảo rằng tất cả các khả năng I / O của bạn được sử dụng.
  • Bạn nên theo dõi biểu đồ của việc sử dụng trao đổi và sử dụng mạng với phần mềm. Nếu bạn thấy swap đang được sử dụng, bạn nên giảm lượng RAM phân bổ cho từng nhiệm vụ trong mapred.child.java.opts .
  • Hãy chắc chắn rằng bạn nên có giám sát thông minh để tình trạng sức khỏe của ổ đĩa của bạn. Đây là một trong những hoạt động quan trọng đối với MapReduce điều chỉnh hiệu suất.

2. sử dụng nén LZO

Đối với dữ liệu trung gian, điều này luôn luôn là một ý tưởng tốt. Mỗi công việc Hadoop mà tạo ra một lượng không đáng kể sản lượng bản đồ sẽ nhận được lợi ích từ nén dữ liệu trung gian với LZO.

Mặc dù LZO cho biết thêm một chút chi phí để CPU, nó tiết kiệm thời gian bằng cách giảm số lượng đĩa IO trong shuffle.

Set mapred.compress.map.output true để cho phép LZO nén

3. điều chỉnh hợp lý của số nhiệm vụ MapReduce

  • Trong MapReduce công việc, nếu mỗi công việc phải mất 30-40 giây hoặc lâu hơn, sau đó nó sẽ giảm số lượng các nhiệm vụ. mapper hoặc giảm quá trình liên quan đến những điều sau đây:thứ nhất, bạn cần phải bắt đầu JVM (JVM nạp vào bộ nhớ). Sau đó, bạn cần phải khởi tạo JVM. Và sau khi xử lý (mapper / giảm), bạn cần phải de-khởi JVM. Và những công việc JVM là rất tốn kém. Giả sử một trường hợp trong đó mapper chạy một nhiệm vụ chỉ dành riêng cho 20-30 giây. Đối với điều này, chúng ta cần phải bắt đầu / khởi tạo / stop JVM. Điều này có thể mất một số lượng đáng kể thời gian. Vì vậy, nó đều bị nghiêm nên chạy công nhiệm vụ trong ít nhất 1 phút.
  • Nếu một công việc có hơn 1TB đầu vào. Sau đó, bạn nên cân nhắc việc tăng kích thước khối của bộ dữ liệu đầu vào đến 256M hoặc 512M chẵn. Vì vậy, số lượng các nhiệm vụ sẽ nhỏ hơn. Bạn có thể thay đổi kích thước khối bằng cách sử dụng lệnh Hadoop distcp -Hdfs.block.size =$ [256 * 1024 * 1024] / path / to / inputdata / path / to / inputdata-với-largeblocks
  • Như chúng ta đã biết rằng mỗi nhiệm vụ chạy trong ít nhất 30-40 giây. Bạn nên tăng số lượng các nhiệm vụ mapper một số bội số của số lượng khe mapper trong cluster.
  • Không chạy quá nhiều làm giảm nhiệm vụ - cho hầu hết các công việc. Số lượng giảm nhiệm vụ tương đương hoặc một chút ít so với số lượng giảm khe trong cluster.

4. Combiner giữa Mapper và Giảm

Nếu thuật toán liên quan đến uẩn của bất kỳ loại máy tính, sau đó chúng ta nên sử dụng một Combiner. Thực hiện Combiner một số tập hợp trước khi dữ liệu số truy cập là sản phẩm giảm.

Khung chạy Hadoop MapReduce kết hợp một cách thông minh để giảm số lượng dữ liệu được ghi vào đĩa. Và dữ liệu mà đã được chuyển giao giữa các Map và Giảm giai đoạn tính toán.

5. Cách sử dụng của hầu hết phù hợp và loại có thể ghi nhỏ gọn cho dữ liệu

Big người dùng dữ liệu sử dụng các văn bản loại ghi không cần thiết để chuyển đổi từ Hadoop Streaming cho Java MapReduce. Văn bản có thể được thuận tiện. Đó là hiệu quả để chuyển đổi dữ liệu số đến và đi từ các chuỗi UTF8. Và trên thực tế có thể bù đắp một phần đáng kể trong thời gian CPU.

6. Reusage của Writables

Nhiều người sử dụng MapReduce làm cho một sai lầm rất phổ biến mà là để phân bổ một đối tượng Có thể ghi được mới cho mỗi đầu ra từ một mapper / giảm tốc. Giả sử, ví dụ, word-count thực hiện ánh xạ như sau:

public void map(...) {
...
for (String word: words) {
output.collect(new Text(word), new IntWritable(1));
}

thực hiện điều này gây ra việc phân bổ của hàng ngàn đối tượng ngắn ngủi. Trong khi nhà sưu tập Java rác làm một công việc hợp lý đối phó với điều này, đó là hiệu quả hơn để ghi:

class MyMapper ... {
Text wordText = new Text();
IntWritable one = new IntWritable(1);
public void map(...) {
... for (String word: words)
{
wordText.set(word);
output.collect(word, one); }
}
}

Kết luận

Do đó, có rất nhiều kỹ thuật tối ưu hóa công việc MapReduce đó giúp đỡ bạn trong việc tối ưu hóa MapReduce công việc. Như sử dụng bộ kết hợp giữa ánh xạ và giảm, bởi sử dụng nén LZO, điều chỉnh hợp lý của số nhiệm vụ MapReduce, Reusage của phép ghi.

Nếu bạn tìm thấy kỹ thuật khác ant cho MapReduce tối ưu hóa công việc, do đó, cho chúng tôi biết trong phần bình luận đưa ra dưới đây.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách Scaling thực sự hoạt động trong Apache HBase

  2. Hướng dẫn HDFS - Giới thiệu đầy đủ về HDFS cho người mới bắt đầu

  3. Bên trong Kiến trúc nhập dữ liệu gần thời gian thực của Santander

  4. Tính sẵn sàng cao (Đa AZ) cho Cơ sở dữ liệu hoạt động của CDP

  5. Cách thực hiện:Thêm Tìm kiếm Cloudera vào Cụm của bạn bằng Trình quản lý Cloudera