2016-09-27 10 views
10

Chúng tôi đang cố gắng sử dụng Máy chủ ThriftServer để truy vấn dữ liệu từ các bảng tạm thời của tia lửa, trong tia lửa 2.0.0.Tránh bắt đầu HiveThriftServer2 với bối cảnh được tạo lập trình

Trước tiên, chúng tôi đã tạo sparkSession với Hỗ trợ Hive đã bật. Hiện nay, chúng ta bắt đầu ThriftServer với sqlContext như thế này:

HiveThriftServer2.startWithContext(spark.sqlContext()); 

Chúng tôi có dòng spark với bảng temp đăng ký "spark_temp_table":

StreamingQuery streamingQuery = streamedData.writeStream() 
              .format("memory") 
              .queryName("spark_temp_table") 
              .start(); 

Với beeline chúng tôi có thể nhìn thấy bảng tạm thời (chạy HIỂN THỊ BẢNG);

Khi chúng tôi muốn chạy công việc thứ hai (với tia lửa thứ hai) với cách tiếp cận này, chúng tôi phải bắt đầu Second ThriftServer với cổng khác.

Tôi có hai câu hỏi ở đây:

  1. Có cách nào để có một ThriftServer trên một cổng với quyền truy cập vào tất cả các bảng tạm thời trong một sparkSessions khác nhau?

  2. HiveThriftServer2.startWithContext(spark.sqlContext()); được chú thích với @DeveloperApi. Có cách nào để bắt đầu máy chủ tiết kiệm với bối cảnh không có trong mã chương trình?
    Tôi thấy có cấu hình --conf spark.sql.hive.thriftServer.singleSession=true được chuyển đến Máy chủ ThriftServer khi khởi động (sbin/start-thriftserver.sh) nhưng tôi không hiểu cách xác định điều này cho công việc. Tôi đã cố gắng thiết lập thuộc tính cấu hình này trong trình xây dựng sparkSession, nhưng beeline không hiển thị các bảng tạm thời.

+2

Trước khi trả lời câu hỏi của bạn, tôi sẽ đặt một câu hỏi :) bạn có thực sự cần phải bắt đầu 'ThriftServer' "programatically"? – user1314742

+0

@ user1314742 không, chúng tôi không cần (và không muốn - cố gắng tránh 'HiveThriftServer2.startWithContext (spark.sqlContext());'). chúng tôi thực sự đã cố gắng khởi động 'sbin/start-thriftserver.sh' với phiên duy nhất nhưng không có may mắn. Về cơ bản những gì chúng ta cần là truy cập vào các bảng 'temp' thông qua máy chủ JDBC spark và truy vấn các bảng' temp' (từ ứng dụng khác với kết nối 'JDBC') – VladoDemcak

+0

Có thể thấy các bảng tạm thời khi chúng ta đang sử dụng' địa chỉ chính' ? – VladoDemcak

Trả lời

5

Có cách nào để có một ThriftServer trên một cổng với quyền truy cập vào tất cả các bảng tạm thời trong một sparkSessions khác nhau?

No. ThriftServer sử dụng các phiên cụ thể và bảng tạm thời chỉ có thể truy cập trong phiên này. Đây là lý do:

beeline không hiển thị bảng tạm thời.

khi bạn khởi động máy chủ độc lập với sbin/start-thriftserver.sh.

spark.sql.hive.thriftServer.singleSession không có nghĩa là bạn nhận được một phiên duy nhất cho nhiều máy chủ. Nó sử dụng cùng một phiên cho tất cả các kết nối đến máy chủ Thrift duy nhất. Trường hợp sử dụng có thể có:

  • bạn bắt đầu máy chủ tiết kiệm.
  • client1 kết nối với máy chủ này và tạo bảng tạm thời foo.
  • client2 kết nối đến máy chủ này và đọc foo
+0

Cảm ơn câu trả lời của bạn rõ ràng hơn nhiều bây giờ tôi thực sự đánh giá cao điều đó! Tôi có thêm một câu hỏi ở đây. Hãy nói rằng tôi muốn có 'client1' như một công việc * spark streaming *. Có thể nhận phiên 'thriftserver' hay cách tôi có thể kết nối công việc' 'streaming '' để chạy máy chủ tiết kiệm được bắt đầu bằng' sbin/start-thriftserver.sh'? – VladoDemcak

+0

Tôi không nghĩ điều đó là có thể nhưng tôi có thể sai. –

+0

@VladoDemcak bạn có tìm thấy bất kỳ cách nào khác ngoài việc chạy HiveThriftServer2 theo chương trình không? Tôi có một trường hợp sử dụng rất giống và tự hỏi có lẽ tôi chỉ cần chọn công cụ sai ở đây. – Roman

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