11

Đối với đoạn mã của tôi như sau:Spark Caching: RDD Chỉ có 8% cache

val levelsFile = sc.textFile(levelsFilePath) 
val levelsSplitedFile = levelsFile.map(line => line.split(fileDelimiter, -1)) 
val levelPairRddtemp = levelsSplitedFile 
           .filter(linearr => (linearr(pogIndex).length!=0)) 
           .map(linearr => (linearr(pogIndex).toLong, levelsIndexes.map(x => linearr(x)) 
           .filter(value => (!value.equalsIgnoreCase("") && !value.equalsIgnoreCase(" ") && !value.equalsIgnoreCase("null"))))) 
           .mapValues(value => value.mkString(",")) 
           .partitionBy(new HashPartitioner(24)) 
           .persist(StorageLevel.MEMORY_ONLY_SER) 

levelPairRddtemp.count // just to trigger rdd creation 

Thông tin

  1. Kích thước của tập tin là ~ 4G
  2. Tôi đang sử dụng 2 executors (Mỗi 5G) và 12 lõi.
  3. Spark phiên bản: 1.5.2

Vấn đề

Khi tôi nhìn vào SparkUI trong Storage tab, Những gì tôi thấy là:

enter image description here

Nhìn bên trong RDD, dường như chỉ có 2 trong số 24 partitions được lưu trong bộ nhớ cache.

enter image description here

Bất kỳ giải thích nào về hành vi này và cách khắc phục điều này.

EDIT 1: Tôi chỉ cố gắng với 60 phân vùng cho HashPartitioner như:

.. 
.partitionBy(new HashPartitioner(60)) 
.. 

Và nó Làm việc. Bây giờ tôi nhận được toàn bộ số RDD được lưu trong bộ nhớ cache. Có đoán xem chuyện gì đã xảy ra ở đây không? Liệu độ lệch dữ liệu có thể gây ra hành vi này?

Chỉnh sửa-2: Nhật ký chứa BlockManagerInfo khi tôi chạy lại với 24 partitions. Lần này 3/24 partitions được lưu trữ:

16/03/17 14:15:28 INFO BlockManagerInfo: Added rdd_294_14 in memory on ip-10-1-34-66.ec2.internal:47526 (size: 107.3 MB, free: 2.6 GB) 
16/03/17 14:15:30 INFO BlockManagerInfo: Added rdd_294_17 in memory on ip-10-1-34-65.ec2.internal:57300 (size: 107.3 MB, free: 2.6 GB) 
16/03/17 14:15:30 INFO BlockManagerInfo: Added rdd_294_21 in memory on ip-10-1-34-65.ec2.internal:57300 (size: 107.4 MB, free: 2.5 GB) 
+0

có thể bạn đã chụp ảnh màn hình trước khi toàn bộ công việc được hoàn thành và đơn giản là nó không được cập nhật? Nếu bạn có các tệp nhật ký, bạn có thể tìm các dòng có chứa 'BlockManagerMasterActor' không? Nếu không nó sẽ có nghĩa là một lỗi ... –

+0

Mỏ là một công việc truyền với vòng đời 5 phút. Tôi đã đợi 15 phút. – Mohitt

+0

Tôi nhận được một vài bản ghi từ 'BlockManagerMaster', nhưng chỉ như INFO, không có lỗi. Không có gì từ 'BlockManagerMasterActor' – Mohitt

Trả lời

1

Tôi tin rằng điều này xảy ra bởi vì các giới hạn bộ nhớ đang đạt được, hoặc thậm chí thêm về điểm, các tùy chọn bộ nhớ bạn sử dụng đừng để công việc của bạn sử dụng tất cả các nguồn lực.

Tăng # phân vùng, có nghĩa là giảm kích thước của mỗi tác vụ, điều này có thể giải thích hành vi.

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