2014-10-30 19 views
15

Tôi đang cố gắng tích hợp cơ sở dữ liệu khóa-giá trị cho Spark và có một số câu hỏi. Tôi là người mới bắt đầu Spark, đã đọc rất nhiều và chạy một số mẫu nhưng không quá phức tạp.Spark: chạy InputFormat dưới dạng singleton

Kịch bản:

Tôi đang sử dụng một cụm HDFS nhỏ để lưu trữ các tin nhắn đến trong một cơ sở dữ liệu. Cụm có 5 nút và dữ liệu được chia thành 5 phân vùng. Mỗi phân vùng được lưu trữ trong một tệp cơ sở dữ liệu riêng biệt. Do đó, mỗi nút có thể xử lý phân vùng dữ liệu riêng của nó.

Vấn đề:

Giao diện với phần mềm cơ sở dữ liệu dựa trên JNI, cơ sở dữ liệu riêng của mình được thực hiện trong C. Vì lý do kỹ thuật, phần mềm cơ sở dữ liệu có thể duy trì chỉ có một kết nối hoạt động tại một thời điểm . Chỉ có thể có một quy trình JVM mà được kết nối với Cơ sở dữ liệu.

Do giới hạn này, việc đọc và ghi vào cơ sở dữ liệu phải đi thông qua cùng một quy trình JVM.

(Background thông tin: cơ sở dữ liệu được nhúng vào quá trình này Nó tập tin dựa, và chỉ có một quá trình có thể mở nó tại một thời điểm tôi thể để cho nó chạy trong một quá trình riêng biệt, nhưng điều đó sẽ chậm hơn.. . vì overhead IPC ứng dụng của tôi sẽ thực hiện nhiều bàn toàn quét ghi bổ sung sẽ được trộn và không thời gian quan trọng)

giải pháp:..

tôi có một vài ý tưởng trong tôi nhớ cách giải quyết e này, nhưng tôi không biết nếu họ làm việc tốt với Spark.

  • Có lẽ nó có thể kỳ diệu cấu hình Spark chỉ có một thể hiện của InputFormat độc quyền của tôi mỗi node.

  • Nếu InputFormat của tôi được sử dụng lần đầu tiên, nó sẽ bắt đầu một luồng riêng biệt sẽ tạo kết nối cơ sở dữ liệu. Chủ đề này sau đó sẽ tiếp tục làm daemon và sẽ tồn tại miễn là cuộc sống của JVM. Điều này sẽ chỉ hoạt động nếu chỉ có một JVM trên mỗi nút. Nếu Spark bắt đầu nhiều JVM trên cùng một nút thì mỗi nút sẽ bắt đầu chuỗi cơ sở dữ liệu của riêng nó, điều này sẽ không làm việc .

  • Di chuyển kết nối cơ sở dữ liệu của tôi sang một quy trình JVM riêng biệt trên mỗi nút và InputFormat sau đó sử dụng IPC để kết nối với quy trình này. Như tôi đã nói, tôi muốn tránh điều này.

  • Hoặc có thể bạn có một ý tưởng hay hơn?

Giải pháp yêu thích của tôi sẽ là # 1, theo sau chặt chẽ bằng # 2.

Cảm ơn mọi nhận xét và câu trả lời!

+1

tôi đã đi cho # 3 vì # 1 và # 2 dường như không thể. – cruppstahl

Trả lời

0

Bạn đã nghĩ đến việc xếp hàng (bộ đệm) rồi sử dụng tính năng phát trực tuyến để khử dequeue và sử dụng định dạng đầu ra của bạn để viết.

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