2016-01-10 14 views
7

Có hai ứng dụng pyspark riêng biệt mà nhanh chóng một HiveContext ở vị trí của một SQLContext cho phép một trong hai ứng dụng thất bại với các lỗi:Nhiều ứng dụng Spark với HiveContext

Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and run build/sbt assembly", Py4JJavaError(u'An error occurred while calling None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o34039))

Các ứng dụng khác chấm dứt thành công.

Tôi đang sử dụng Spark 1.6 từ API Python và muốn sử dụng một số chức năng Dataframe, chỉ được hỗ trợ với HiveContext (ví dụ: collect_set). Tôi đã có cùng một vấn đề trên 1.5.2 và trước đó.

này là đủ để tái sản xuất:

import time 
from pyspark import SparkContext, SparkConf 
from pyspark.sql import SQLContext 

conf = SparkConf() 
sc = SparkContext(conf=conf) 
sq = HiveContext(sc) 

data_source = '/tmp/data.parquet' 
df = sq.read.parquet(data_source) 
time.sleep(60) 

Các sleep chỉ là để giữ cho các kịch bản chạy trong khi tôi bắt đầu quá trình khác.

Nếu tôi có hai phiên bản của tập lệnh này đang chạy, lỗi trên sẽ hiển thị khi đọc tệp lát gỗ. Khi tôi thay thế HiveContext bằng SQLContext mọi thứ đều ổn.

Có ai biết tại sao không?

Trả lời

5

Theo mặc định Hive (Bối cảnh) đang sử dụng Derby được nhúng làm di sản. Nó được thiết kế chủ yếu để thử nghiệm và hỗ trợ chỉ một người dùng hoạt động. Nếu bạn muốn hỗ trợ nhiều ứng dụng đang chạy, bạn nên cấu hình một metastore độc ​​lập. Tại thời điểm này Hive hỗ trợ PostgreSQL, MySQL, Oracle và MySQL. Chi tiết về cấu hình phụ thuộc vào một phụ trợ và tùy chọn (local/remote) nhưng nói chung bạn sẽ cần:

Cloudera cung cấp hướng dẫn toàn diện mà bạn có thể thấy hữu ích: Configuring the Hive Metastore.

Về mặt lý thuyết, cũng có thể tạo ra các di chúc Derby riêng biệt với cấu hình thích hợp (xem Hive Admin Manual - Local/Embedded Metastore Database) hoặc sử dụng Derby in Server Mode.

Để phát triển, bạn có thể khởi động ứng dụng trong các thư mục hoạt động khác nhau. This will create separate metastore_db for each application và tránh sự cố của nhiều người dùng đang hoạt động. Cung cấp cấu hình Hive riêng biệt cũng hoạt động tốt nhưng ít hữu ích hơn trong việc phát triển:

When not configured by the hive-site.xml, the context automatically creates metastore_db in the current directory

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