2014-07-08 22 views
6

Hiện tại, chúng tôi đang xây dựng nền tảng báo cáo làm kho dữ liệu mà chúng tôi đã sử dụng Shark. Vì sự phát triển của Shark bị dừng nên chúng tôi đang trong giai đoạn đánh giá Spark SQL. Dựa trên các trường hợp sử dụng, chúng tôi có vài câu hỏi.Hỗ trợ Spark Sql JDBC

1) Chúng tôi có dữ liệu từ nhiều nguồn khác nhau (MySQL, Oracle, Cassandra, Mongo). Chúng tôi muốn biết làm thế nào chúng ta có thể nhận được dữ liệu này vào Spark SQL? Có tồn tại bất kỳ tiện ích nào mà chúng ta có thể sử dụng không? Tiện ích này có hỗ trợ làm mới liên tục dữ liệu (đồng bộ hóa thêm/cập nhật/xóa mới trên kho dữ liệu với Spark SQL không?

2) Có phải cách tạo nhiều cơ sở dữ liệu trong Spark SQL không?

3) Đối với UI báo cáo, chúng tôi sử dụng Jasper, chúng tôi muốn kết nối từ Jasper đến Spark SQL. Khi chúng tôi thực hiện tìm kiếm ban đầu, chúng tôi đã biết rằng hiện tại không có sự hỗ trợ nào cho người tiêu dùng để kết nối Spark SQL thông qua JDBC, nhưng trong các bản phát hành trong tương lai bạn sẽ muốn thêm như vậy. Chúng tôi muốn biết khi nào thì Spark SQL sẽ có bản phát hành ổn định sẽ hỗ trợ JDBC? Trong khi đó chúng tôi lấy mã nguồn từ https://github.com/amplab/shark/tree/sparkSql nhưng chúng tôi đã gặp một số khó khăn trong việc thiết lập nó tại địa phương và đánh giá nó. Nó sẽ là tuyệt vời nếu bạn có thể giúp chúng tôi với hướng dẫn cài đặt. (Tôi có thể chia sẻ vấn đề mà chúng tôi đang đối mặt, vui lòng cho tôi biết nơi tôi có thể đăng nhật ký lỗi)

4) Chúng tôi cũng sẽ yêu cầu lời nhắc SQL thực hiện truy vấn, hiện tại Spark Shell cung cấp dấu nhắc SCALA nơi mã SCALA có thể được thực hiện, từ mã SCALA chúng ta có thể kích hoạt các truy vấn SQL. Giống như Shark, chúng tôi muốn có lời nhắc SQL trong Spark SQL. Khi chúng tôi tìm kiếm, chúng tôi thấy rằng trong bản phát hành Spark sau này sẽ được thêm vào. Sẽ rất tuyệt nếu bạn có thể cho chúng tôi biết bản phát hành của Spark sẽ phát hành như thế nào.

+0

Chào, Tôi đang cố gắng lưu trữ dữ liệu từ Apache spark vào mysql. Bạn đã nhận được giải pháp nào cho câu hỏi của mình chưa? Nếu có, bạn có thể chia sẻ cách bạn thiết lập giao tiếp giữa tia lửa và mysql không? Đây sẽ là một trợ giúp lớn cho tôi. Cảm ơn –

Trả lời

1

Tôi có thể trả lời (1):

Apache Sqoop đã được thực hiện cụ thể để giải quyết vấn đề này cho cơ sở dữ liệu quan hệ. Công cụ này được tạo ra cho HDFS, HBase và Hive - vì vậy nó có thể được sử dụng để làm cho dữ liệu có sẵn cho Spark, thông qua HDFS và Hive metastore.

http://sqoop.apache.org/

Tôi tin Cassandra có sẵn để SparkContext qua kết nối này từ DataStax: https://github.com/datastax/spark-cassandra-connector - mà tôi chưa bao giờ sử dụng.

Tôi không biết bất kỳ trình kết nối nào cho MongoDB.

0

Spark SQL là một khả năng của khung công tác Spark. Nó không nên so sánh với Shark vì Shark là một dịch vụ. (Nhớ lại rằng với Shark, bạn chạy một ThriftServer mà bạn có thể kết nối từ ứng dụng Tiết kiệm của bạn hoặc thậm chí là ODBC.)

Bạn có thể giải thích ý nghĩa của việc "đưa dữ liệu này vào Spark SQL" không?

2

như đối với

3) Spark 1.1 cung cấp hỗ trợ tốt hơn cho giao diện SparkSQL ThriftServer, mà bạn có thể muốn sử dụng cho JDBC interfacing. Các khách hàng của HBC JDBC hỗ trợ phiên bản 0.12.0 có thể kết nối và giao tiếp với máy chủ đó.

4) Spark 1.1 cũng cung cấp giao diện SparkSQL CLI có thể được sử dụng để nhập truy vấn. Trong cùng một thời trang mà Hive CLI hoặc Impala Shell.

Vui lòng cung cấp thêm chi tiết về những gì bạn đang cố gắng đạt được cho 1 và 2.

1

1) Chúng tôi có dữ liệu từ nhiều nguồn khác nhau (MySQL, Oracle, Cassandra, Mongo)

Bạn phải sử dụng trình điều khiển khác nhau cho từng trường hợp. Đối với cassandra có datastax driver (nhưng tôi gặp phải một số vấn đề tương thích với SparkSQL). Đối với bất kỳ hệ thống SQL nào, bạn có thể sử dụng JdbcRDD. Việc sử dụng rất đơn giản, nhìn vào the scala example:

test("basic functionality") { 
    sc = new SparkContext("local", "test") 
    val rdd = new JdbcRDD(
     sc, 
    () => { DriverManager.getConnection("jdbc:derby:target/JdbcRDDSuiteDb") }, 
     "SELECT DATA FROM FOO WHERE ? <= ID AND ID <= ?", 
     1, 100, 3, 
     (r: ResultSet) => { r.getInt(1) }).cache() 

    assert(rdd.count === 100) 
    assert(rdd.reduce(_+_) === 10100) 
    } 

Nhưng quan điểm cho rằng nó chỉ là một RDD, vì vậy bạn nên làm việc với các dữ liệu này thông qua bản đồ giảm api, không phải trong SQLContext.

Có tồn tại bất kỳ tiện ích nào chúng tôi có thể sử dụng không?

Có dự án Apache Sqoop nhưng ở trạng thái phát triển hoạt động. Phiên bản ổn định hiện tại thậm chí không lưu tệp ở định dạng sàn.

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