首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python和pyathenajdbc与Athena连接

使用Python和pyathenajdbc与Athena连接
EN

Stack Overflow用户
提问于 2017-03-24 18:07:31
回答 2查看 10K关注 0票数 5

我正在尝试用python连接AWS雅典娜。我正在尝试使用pyathenajdbc来完成这个任务。我现在的问题是获得一种联系。当我运行下面的代码时,我会收到一条错误消息,说明它找不到AthenaDriver。( java.lang.RuntimeException:未找到类com.amazonaws.athena.jdbc.AthenaDriver )。我从AWS下载了这个文件,并确认它位于该目录中。

代码语言:javascript
复制
from mdpbi.rsi.config import *
from mdpbi.tools.functions import mdpLog
from pkg_resources import resource_string
import argparse
import os
import pyathenajdbc
import sys

SCRIPT_NAME = "Athena_Export"

ATHENA_JDBC_CLASSPATH = "/opt/amazon/athenajdbc/AthenaJDBC41-1.0.0.jar"
EXPORT_OUTFILE = "RSI_Export.txt"
EXPORT_OUTFILE_PATH = os.path.join(WORKINGDIR, EXPORT_OUTFILE)


def get_arg_parser():
    """This function returns the argument parser object to be used with this script"""
    parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)

    return parser


def main():
    args = get_arg_parser().parse_args(sys.argv[1:])
    logger = mdpLog(SCRIPT_NAME, LOGDIR)

    SQL = resource_string("mdpbi.rsi.athena.resources", "athena.sql")

    conn = pyathenajdbc.connect(
        s3_staging_dir="s3://athena",
        access_key=AWS_ACCESS_KEY_ID,
        secret_key=AWS_SECRET_ACCESS_KEY,
        region_name="us-east-1",
        log_path=LOGDIR,
        driver_path=ATHENA_JDBC_CLASSPATH
    )
    try:
        with conn.cursor() as cursor:
            cursor.execute(SQL)
            logger.info(cursor.description)
            logger.info(cursor.fetchall())
    finally:
        conn.close()

    return 0


if __name__ == '__main__':
    rtn = main()
    sys.exit(rtn)

回溯(最近一次调用):文件“/usr/lib64 64/python2.7/runpy.py”,第174行,在_run_module_as_main "main“中,fname,,pkg_name) File”/usr/lib64 64/python2.7/runpy.py“,第72行,在run_globals文件第53行中的_run_code exec代码在rtn = main() "/home/ec2-user/jason_testing/mdpbi/rsi/athena/main.py",第39行中,在主driver_path=athena_jdbc_driver_path文件"/opt/mdpbi/Python_Envs/2.7.10/local/lib/python2.7/dist-packages/pyathenajdbc/init.py",第65行中,在connect driver_path中,**kwargs)文件"/opt/mdpbi/Python_Envs/2.7.10/local/lib/python2.7/dist-packages/pyathenajdbc/connection.py",第68行,init jpype.JClass(ATHENA_DRIVER_CLASS_NAME) File jpype.JClass(ATHENA_DRIVER_CLASS_NAME) File JClass _RUNTIMEEXCEPTION.PYEXC("Class %s not“% name)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-27 17:03:04

JDBC驱动程序需要Java 8。我目前正在运行Java 7。我能够在EC2实例上安装另一个版本的Java。

https://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/#

我还必须在代码中设置java版本。通过这些更改,代码现在按预期运行。

代码语言:javascript
复制
from mdpbi.rsi.config import *
from mdpbi.tools.functions import mdpLog
from pkg_resources import resource_string
import argparse
import os
import pyathenajdbc
import sys

SCRIPT_NAME = "Athena_Export"


def get_arg_parser():
    """This function returns the argument parser object to be used with this script"""
    parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)

    return parser


def main():
    args = get_arg_parser().parse_args(sys.argv[1:])
    logger = mdpLog(SCRIPT_NAME, LOGDIR)

    SQL = resource_string("mdpbi.rsi.athena.resources", "athena.sql")

    os.environ["JAVA_HOME"] = "/opt/jdk1.8.0_121"
    os.environ["JRE_HOME"] = "/opt/jdk1.8.0_121/jre"
    os.environ["PATH"] = "/opt/jdk1.8.0_121/bin:/opt/jdk1.8.0_121/jre/bin"

    conn = pyathenajdbc.connect(
        s3_staging_dir="s3://mdpbi.data.rsi.out/",
        access_key=AWS_ACCESS_KEY_ID,
        secret_key=AWS_SECRET_ACCESS_KEY,
        schema_name="rsi",
        region_name="us-east-1"
    )
    try:
        with conn.cursor() as cursor:
            cursor.execute(SQL)
            logger.info(cursor.description)
            logger.info(cursor.fetchall())
    finally:
        conn.close()

    return 0


if __name__ == '__main__':
    rtn = main()
    sys.exit(rtn)
票数 7
EN

Stack Overflow用户

发布于 2017-03-27 09:19:18

试试这个:

代码语言:javascript
复制
    pyathenajdbc.ATHENA_JAR = ATHENA_JDBC_CLASSPATH

您不需要在连接方法中指定driver_path参数

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43006368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档