2016-04-01 20 views
12

Vì vậy, khi chạy từ pyspark tôi sẽ gõ vào (mà không chỉ định bất kỳ bối cảnh):Spark có thể truy cập vào bảng Hive từ pyspark nhưng không phải từ tia nộp

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc') 

.. và nó hoạt động tốt.

Tuy nhiên, khi tôi chạy kịch bản của tôi từ spark-submit, như

spark-submit script.py tôi đặt sau trong

from pyspark.sql import SQLContext 
from pyspark import SparkConf, SparkContext 
conf = SparkConf().setAppName('inc_dd_openings') 
sc = SparkContext(conf=conf) 
sqlContext = SQLContext(sc) 

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc') 

Nhưng nó mang lại cho tôi một lỗi

pyspark.sql.utils. AnalysisException: u'Bảng không tìm thấy: experian_int_openings_latest_orc; '

Vì vậy, nó không thấy bảng của tôi.

Tôi đang làm gì sai? Vui lòng giúp

P.S. Phiên bản Spark 1.6 chạy trên Amazon EMR

Trả lời

16

Spark 2.x

Cùng một vấn đề có thể xảy ra trong Spark 2.x nếu SparkSession đã được tạo mà không cần enabling Hive support.

Spark 1.x

Nó là khá đơn giản. Khi bạn sử dụng vỏ PySpark, và Spark đã được xây dựng với sự hỗ trợ Hive, mặc định thực hiện SQLContext (cái có sẵn dưới dạng sqlContext) là HiveContext.

Trong ứng dụng độc lập của bạn, bạn sử dụng đồng bằng SQLContext không cung cấp khả năng Hive.

Giả sử các phần còn lại của cấu hình là chính xác chỉ cần thay thế:

from pyspark.sql import SQLContext 

sqlContext = SQLContext(sc) 

với

from pyspark.sql import HiveContext 

sqlContext = HiveContext(sc) 
+0

Cảm ơn bạn rất nhiều! :) – Dennis

1

Sự cố của bạn có thể liên quan đến cấu hình Hive của bạn. Nếu cấu hình của bạn sử dụng local metastore, thư mục metastore_db sẽ được tạo trong thư mục mà bạn đã bắt đầu bạn Hive máy chủ từ đó.

Kể từ khi spark-submit được khởi chạy từ một thư mục khác, nó đang tạo một metastore_db mới trong thư mục đó không chứa thông tin về các bảng trước đó của bạn.

Khắc phục nhanh sẽ là bắt đầu máy chủ Hive từ cùng thư mục với số spark-submit và tạo lại bảng của bạn.

Một sửa chữa lâu dài hơn được tham chiếu trong này SO Post

Bạn cần thay đổi cấu hình của bạn trong $HIVE_HOME/conf/hive-site.xml

property name = javax.jdo.option.ConnectionURL 

property value = jdbc:derby:;databaseName=/home/youruser/hive_metadata/metastore_db;create=true 

Bây giờ bạn có thể chạy hive từ bất kỳ vị trí và vẫn tìm bảng của bạn

8

Trong Spark 2.x (Amazon EMR 5 +), bạn sẽ gặp phải vấn đề này với spark-submit nếu bạn không bật hỗ trợ Hive như thế này:

from pyspark.sql import SparkSession 
spark = SparkSession.builder.master("yarn").appName("my app").enableHiveSupport().getOrCreate() 
Các vấn đề liên quan