re:dash에서 Amazon Athena로 쿼리하기

11630 단어 AmazonAthenaredash
2016/12/01에는 Amazon S3의 데이터에 임시로 SQL 쿼리를 던질 수 있는 서비스인 Amazon Athena가 출시되었습니다.
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 서포트를 작성중이라고 합니다! 릴리스되면 그쪽을 사용하는 것이 편하네요.

환경


  • Ubuntu14.04
  • Python 2.7.6

  • 작업 절차



    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를 달릴 필요가 있거나와 조금 복잡해져 버리므로, 포럼에서 상담해 봅니다.
    공식적으로 이미 작성 중이므로 문제 없을 것 같습니다!

    좋은 웹페이지 즐겨찾기