re:dash에서 Amazon Athena로 쿼리하기
11630 단어 AmazonAthenaredash
Athena의 개요에 관해서는 다음을 부탁드립니다.
Amazon Athena – Amazon S3의 데이터에 대화식으로 SQL 쿼리
Amazon Athena를 사용해 보았습니다. #reinvent
Amazon Athena를 BigQuery와 비교해 보았습니다.
스스로 가볍게 사용해 본 느낌이라면 SaaS이므로 관리 비용이 낮고 쿼리 성능도 꽤 좋고, 매우 가능성을 느끼는 서비스라는 인상입니다.
그래서 Amazon Athena를 더 많이 사용하고 싶기 때문에 OSS의 BI 도구인 re:dash에서 Amazon Athena로 쿼리를 던질 수 있도록 했습니다. 여러분도 좋다면 해보세요.
코멘트란에도 있습니다만, re:dash 작자의 @arikfr 씨가 이미 공식으로의 Athena 서포트를 작성중이라고 합니다! 릴리스되면 그쪽을 사용하는 것이 편하네요.
환경
작업 절차
py4j 설치
Athena는 현재 JDBC를 통한 연결만 지원하므로 파이썬에서 연결하는 데는 시간이 걸립니다.
이번에는 Python에서 jar를 실행하기 위해 다른 프로세스에서 시작하는 java와 소켓 통신을 통해 협력하는 py4j를 사용하기로했습니다. pip로 설치할 수 있습니다.
$ sudo pip install py4j
Java8 설치
Athena와의 연결을 위해서는 Java8 이상이 필수입니다.
Ubuntu 14.04에 Open JDK 8 도입
$ sudo apt-add-repository ppa:openjdk-r/ppa
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
$ java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-3~14.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)
또, 자신은 SSL 관계로 집계해 이하의 커멘드도 실행했습니다.
$ sudo dpkg --purge --force-depends ca-certificates-java
$ sudo apt-get install ca-certificates-java
$ sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
Java 서버 프로그램 작성
Athena와의 연결을 설정하기 위해 Java 서버 용 클래스를 만듭니다. 이하의 기사를 참고로 했습니다.
Python에서 Java 클래스 호출 (Py4J)
Accessing Amazon Athena with JDBC
J4Py.java
public class J4Py {
public static void main(String[] args) {
J4Py app = new J4Py();
GatewayServer server = new GatewayServer(app);
server.start();
}
}
AthenaJDBCConnector.java
public class AthenaJDBCConnector {
Properties info;
String url;
public AthenaJDBCConnector(Properties info, String url) {
this.info = info;
this.url = url;
}
public Connection getConnection() {
try {
Class.forName("com.amazonaws.athena.jdbc.AthenaDriver");
Connection conn = DriverManager.getConnection(this.url, this.info);
return conn;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
Jar 파일 작성
이전 프로그램에서 Jar 파일을 만듭니다.
AthenaJDBC41-1.0.0.jar
는 공식적으로 다운로드 할 수 있습니다.$ javac -cp AthenaJDBC41-1.0.0.jar AthenaJDBCConnector.java
$ jar cvf AthenaJDBCConnector.jar AthenaJDBCConnector.class
py4j0.10.4.jar
는 py4j 설치시에 옵니다.manifest.fm
Main-Class: J4Py
Class-Path: py4j0.10.4.jar AthenaJDBC41-1.0.0.jar
$ javac -cp py4j0.10.4.jar:AthenaJDBCConnector.jar:AthenaJDBC41-1.0.0.jar J4Py.java
$ jar cvfm J4Py.jar manifest.mf J4Py.class
J4Py.jar
작성이 종료되었습니다. 서브 프로세스에서 J4Py.jar
를 시작하면 다음과 같이 파이썬에서 Athena 쿼리를 던집니다.$ java -jar J4Py.jar
test_connection.py
from py4j.java_gateway import JavaGateway
gateway = JavaGateway()
info = gateway.jvm.java.util.Properties()
info.setProperty("s3_staging_dir", 'xxx')
info.setProperty("user", 'yyy')
info.setProperty("password", 'zzz')
host = 'jdbc:awsathena://athena.us-west-2.amazonaws.com:443/'
connector = gateway.jvm.AthenaJDBCConnector(info, host)
conn = connector.getConnection()
statement = conn.createStatement()
rs = statement.executeQuery(query)
re:dash에 데이터 소스 추가
re:dash는 데이터 소스를 플러그 가능하게 추가할 수 있습니다. 방금 전의 python 파일의 요령으로 BaseQueryRunner를 상속한 클래스를 작성합니다. 조금 길어지므로 외부에 놓습니다.
맞아. py
작성한 클래스를 query_runner/직하에 추가해, 다음과 같이
/opt/redash/.env
에 추기해 re:dash를 재기동하면 OK입니다. 사전에 J4Py.jar
프로세스를 시작하는 것을 잊지 마십시오. (re : dash는 supervisord에서 관리되므로 거기에 시너지하는 것이 좋습니다.)export REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.athena
쿼리 실행
데이터 소스를 추가하면 화면에서 설정을 할 수 있으므로 필요한 항목을 입력하여 쿼리를 던져 보겠습니다.
항목 입력
쿼리 실행
무사히 쿼리가 던졌습니다!
끝
re : dash와 Athena를 사용하면 저렴한 비용으로 쉽게 데이터를 시각화 할 수 있으므로 꼭 시험해보십시오!
이번 소스는
htps : // 기주 b. 코 m / Kakazuma / Reda sh / t Ree / 후 아츠레 / 아테나
에 커밋하고 있습니다.
Athena의 수요는 있다고 생각하기 때문에 풀릭을 내고 싶습니다만, Java8가 필수이거나 다른 프로세스로 Java를 달릴 필요가 있거나와 조금 복잡해져 버리므로, 포럼에서 상담해 봅니다.
공식적으로 이미 작성 중이므로 문제 없을 것 같습니다!
Reference
이 문제에 관하여(re:dash에서 Amazon Athena로 쿼리하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yskazuma/items/99f5892d5a303528aad3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)