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
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 APIGraphframe
. 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ếpGraphX
.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ởiGraphframes
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
vertices
vàedges
DataFrames
bởiid
vàsrc
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. Spark joinWithCassandraTable() trên bản đồ nhiều chìa khóa phân vùng LỖI
- 2. Bản đồ phân tán trong Scala Spark
- 3. Spark quyết định cách phân vùng RDD như thế nào?
- 4. Spark 1.0.2 (cũng 1.1.0) treo trên một phân vùng
- 5. Spark: Tìm Mỗi Kích thước Phân vùng cho RDD
- 6. Thả phân vùng DataFrame trống trong Apache Spark
- 7. Số phân vùng trong RDD và hiệu suất trong Spark
- 8. Phân vùng một đồ thị có hướng trọng (trên cơ sở dữ liệu/giá trị key)
- 9. Spark: lưu DataFrame được phân đoạn bằng cột "ảo"
- 10. Ứng dụng Spark - Java.lang.OutOfMemoryError: Vùng heap Java
- 11. Spark: chiến lược phân vùng lại sau khi đọc file văn bản
- 12. Phân vùng bảng bằng 2 cột
- 13. Đồ thị loại phân tán trong Dygraphs?
- 14. R, đồ thị phân phối nhị thức
- 15. Spark: tăng số lượng phân vùng mà không gây ra ngẫu nhiên?
- 16. Đồ thị phân lớp trong d3.js
- 17. spark - filter trong bản đồ
- 18. Làm cách nào để phân vùng lại tệp nén trong Apache Spark?
- 19. Phân vùng quá mức (quá nhiều tác vụ) trên cụm Apache Spark/Cassandra
- 20. Trong Apache Spark, tại sao RDD.union không bảo vệ trình phân vùng?
- 21. Tại sao phân vùng Spark RDD có giới hạn 2 GB cho HDFS?
- 22. Làm thế nào để kích hoạt tính năng tỉa phân vùng trong spark
- 23. Phân vùng tích phân Python với phân vùng k đã cho
- 24. Hiển thị sai trục y trong biểu đồ phân cực
- 25. phân vùng và UPDATE
- 26. tập hợp 'bản đồ' bên trong Spark
- 27. Loại bỏ trùng lặp bằng phân vùng bởi SQL Server
- 28. Cố gắng để hiểu hơn() và phân vùng bằng cách
- 29. Tôi có thể phân vùng một vector bằng cách nào?
- 30. Tạo phân vùng khối SSAS 2008 bằng Powershell?
Đá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
@ 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? –
@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? –