2016-12-27 28 views
6

Tôi đang làm việc với biểu đồ lớn (?) (60 triệu đỉnh và 9,5 tỷ cạnh) sử dụng Biểu đồ Spark. Các dữ liệu cơ bản là không lớn - các đỉnh mất khoảng 500MB trên đĩa và các cạnh là khoảng 40GB. Thùng chứa của tôi thường xuyên bị tắt do vấn đề bộ nhớ java, nhưng tôi nghĩ rằng vấn đề cơ bản là đồ thị liên tục xáo trộn dữ liệu xung quanh (tôi thấy shuffle đọc/ghi lên đến 150GB). Có cách nào để phân vùng hiệu quả một Graphframe hoặc các cạnh/đỉnh bên dưới để giảm shuffle không?Phân vùng bằng đồ thị Spark

Trả lời

6

TL; DR Không thể phân vùng hiệu quả Graphframe.

Graphframe thuật toán có thể được tách ra thành hai loại:

  • Phương pháp mà xử lý đại biểu để GraphX đối tác. GraphX ​​hỗ trợ một số phương pháp phân vùng nhưng chúng không được hiển thị qua API Graphframe. Nếu bạn sử dụng một trong những điều này, có lẽ tốt hơn nên sử dụng trực tiếp GraphX.

    Thật không may khi phát triển GraphX dừng gần như hoàn toàn chỉ với một vài bản sửa lỗi nhỏ trong hai năm qua và hiệu suất tổng thể rất đáng thất vọng so với cả thư viện nội bộ và out-of-core libraries.

  • Phương pháp được triển khai thực sự sử dụng Spark Datasets, xem xét mô hình lập trình giới hạn và chỉ một chế độ phân vùng đơn lẻ, không phù hợp để xử lý biểu đồ phức tạp.

    Trong khi lưu trữ cột quan hệ có thể được sử dụng để xử lý đồ thị hiệu quả cách tiếp cận ngây thơ join phương pháp được sử dụng bởi Graphframes chỉ không quy mô (nhưng nó là OK cho đi ngang nông với một hoặc hai bước nhảy).

    Bạn có thể thử để phân vùng lại verticesedgesDataFrames bởi idsrc tương ứng:

    val nPart: Int = ??? 
    
    GraphFrame(v.repartition(nPart, v("id")), e.repartition(e(nPart, "src"))) 
    

    những gì cần giúp đỡ trong một số trường hợp.

Nhìn chung, tại trạng thái hiện tại (tháng 12 năm 2016), Spark không phải là lựa chọn tốt cho phân tích đồ thị chuyên sâu.

+1

Đánh giá cao thông tin chi tiết. Tôi thấy rằng tôi có thể tăng hiệu suất bằng cách tạo cột tùy chỉnh trong khung dữ liệu cạnh bằng cách sử dụng GraphX ​​[lược đồ phân vùng] (http://note.yuhc.me/2015/03/graphx-partition-strategy/) và phân vùng trên đó. – John

+0

@ John Tôi không thể tìm ra, bạn có ví dụ về cách thực hiện phân vùng trên cột tùy chỉnh không? –

+0

@John Bạn có thể chia sẻ cập nhật về Cách bạn giải quyết vấn đề hiệu suất này không? –

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