1

Redshift 데이터를 Zeppelin의 데이터 프레임으로 읽어야합니다. 지난 몇 달 동안 AWS의 Zeppelin을 통해 Spark 2.0을 사용하여 csv 및 json S3 파일을 성공적으로 열었습니다. Zeppelin Spark 2.0 및 Pyspark로 AWS Redshift에 연결

은이 코드를 사용, 스파크 1.6.2 (아마 1.6.1)와 AWS EMR에 제플린에서 적색 편이에 연결할 수 있도록 사용 :

%pyspark 

from pyspark.sql import SQLContext, Row 
import sys 
from pyspark.sql.window import Window 
import pyspark.sql.functions as func 

#Load the data 
aquery = "(SELECT serial_number, min(date_time) min_date_time from schema.table where serial_number in ('abcdefg','1234567') group by serial_number) as minDates" 

dfMinDates = sqlContext.read.format('jdbc').options(url='jdbc:postgresql://dadadadaaaredshift.amazonaws.com:5439/idw?tcpKeepAlive=true&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory?user=user&password=password', dbtable=aquery).load() 
dfMinDates.show() 

를하고는했다. 2016 년 여름이었습니다.

AWS에는 Spark 2.0이 있습니다.

새로운 구문은

myDF = spark.read.jdbc이 같은 :

%pyspark 

aquery = "(SELECT serial_number, min(date_time) min_date_time from schema.table where serial_number in ('abcdefg','1234567') group by serial_number) as minDates" 

dfMinDates = spark.read.jdbc("jdbc:postgresql://dadadadaaaredshift.amazonaws.com:5439/idw?tcpKeepAlive=true&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory?user=user&password=password", dbtable=aquery).load() 
dfMinDates.show() 

하지만이 오류 얻을 : 나는 스파크 2.0 문서를 연구

Py4JJavaError: An error occurred while calling o119.jdbc. : java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:315) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.createConnectionFactory(JdbcUtils.scala:53) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:123) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.(JDBCRelation.scala:117) at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:237) at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:159) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:280) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:211) at java.lang.Thread.run(Thread.java:745) (, Py4JJavaError(u'An error occurred while calling o119.jdbc.\n', JavaObject id=o121),)

및 이 항목을 찾았습니다.

The JDBC driver class must be visible to the primordial class loader on the client session and on all executors. This is because Java’s DriverManager class does a security check that results in it ignoring all drivers not visible to the primordial class loader when one goes to open a connection. One convenient way to do this is to modify compute_classpath.sh on all worker nodes to include your driver JARs.

나는이를 구현하는 방법을 알고, 각종 게시물, 일부 블로그와 유래에 어떤 게시물에서 더 많은 독서를하고 발견되지 않는이 : 내가 한

spark.driver.extraClassPath = org.postgresql.Driver

이것은 Zeppelin의 통역사 설정 페이지에 있지만 여전히 동일한 오류가 발생합니다.

Postgres 인터프리터를 추가하려고 시도했는데 Spark 인터프리터 또는 Python 인터프리터에 넣을 지 잘 모르므로 올바르게 실행했는지 확신 할 수 없으며 Spark 인터프리터를 선택했습니다. 이제 Postgres 인터프리터는 Spark 인터프리터와 동일한 설정을 사용합니다.이 설정은 중요하지 않을 수 있지만 여전히 동일한 오류가 발생합니다.

스파크 1.6에서, 나는이 모든 문제를 해결하는 것을 기억하지 못합니다.

실험으로, 나는 Spark 1.6.2로 EMR 클러스터를 회전시키고 이전에 작동했던 이전 코드를 시도해 보았고 위와 같은 오류가 발생했습니다!

Zeppelin 사이트에는 Postgres가 있지만 해당 정보는 인터프리터를 설정하는 방법보다는 코드처럼 보이므로 사용 방법을 모르겠습니다.

나는 아이디어와 참고가 부족합니다.

모든 의견을 보내 주시면 감사하겠습니다.

답변

1

Amazon의 Redshift 전용 드라이버를 사용해야합니다. 여기에서 다운로드 할 수 있습니다 : http://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html.

그러나 EMR을 사용하고 있다면 이미 (/usr/share/aws/redshift/jdbc/RedshiftJDBC41.jar) 제자리 걸음을 말할 수 있습니다.

신고 방법은 다음과 같습니다. AWS Redshift driver in Zeppelin

+1

감사합니다. 나는 이것을 Zeppelin의 통역자 페이지에 인공물로 추가했습니다. – PLB

관련 문제