簡體   English   中英

R連接到AWS Athena

[英]R Connect to AWS Athena

我正在嘗試根據我在線閱讀的內容連接到AWS Athena,但我遇到了問題。

采取的步驟

  • 更新Java
  • 用accesskey / secretKey替換user / pass
  • 用user / pass傳遞accesskey / secretKey

有任何想法嗎?

錯誤信息:

.jcall中的錯誤(drv @ jdrv,“Ljava / sql / Connection;”,“connect”,as.character(url)[1],:java.sql.SQLException:必須提供AWS accessId / secretKey或AWS憑證提供程序

系統信息

  sysname                           release                                       version 
  "Linux"                           "4.4.0-62-generic"      "#83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017" 
  nodename                          machine                                        login
 "ip-***-**-**-***"                 "x86_64"                                      "unknown" 
  user                              effective_user 
 "rstudio"                          "rstudio"

代碼https://www.r-bloggers.com/interacting-with-amazon-athena-from-r/

library(RJDBC)

URL <- 'https://s3.amazonaws.com/athena-downloads/drivers/AthenaJDBC41-1.0.0.jar'
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil)

drv <- JDBC(driverClass="com.amazonaws.athena.jdbc.AthenaDriver", fil, identifier.quote="'")

con <- jdbcConnection <- dbConnect(drv, 'jdbc:awsathena://athena.us-east-1.amazonaws.com:443/',
                                   s3_staging_dir="s3://mybucket",
                                   user=Sys.getenv("myuser"),
                                   password=Sys.getenv("mypassword"))

Athena JDBC驅動程序期望您的AWS Access Key Id為user ,Secret Key為password

accessKeyId <- "your access key id..."
secretKey <- "your secret key..."

jdbcConnection <- dbConnect(
  drv, 
  'jdbc:awsathena://athena.us-east-1.amazonaws.com:443',
  s3_staging_dir="s3://mybucket",
  user=accessKeyId,
  password=secretKey
)

R-bloggers文章使用Sys.getenv("ATHENA_USER")Sys.getenv("ATHENA_PASSWORD")從環境變量中獲取那些,但這是可選的。


更新 :使用帶有來自R的Athena驅動程序的憑據提供程序

@Sam是正確的,憑據提供程序是處理AWS憑據的最佳實踐。 我推薦使用DefaultCredentialsProviderChain ,它涵蓋了從CLI配置文件,環境變量等加載憑據的幾個選項。

  1. 下載適用於JavaAWS開發工具包 ,特別是來自( lib )的SDK jar和第三方依賴關系jar( third-party/lib )的目錄。
  2. 添加一些R代碼將所有jar文件添加到rJava的類路徑中

     # Load JAR Files library("rJava") .jinit() # Load AWS SDK jar .jaddClassPath("/path/to/aws-java-sdk-1.11.98/lib/aws-java-sdk-1.11.98.jar") # Add Third-Party JARs jarFilePaths <- dir("/path/to/aws-java-sdk-1.11.98/third-party/lib/", full.names=TRUE, pattern=".jar") for(i in 1:length(jarFilePaths)) { .jaddClassPath(jarFilePaths[i]) } 
  3. 配置Athena驅動程序以按名稱加載憑據提供程序類

     athenaConn <- dbConnect( athenaDriver, 'jdbc:awsathena://athena.us-east-1.amazonaws.com:443', s3_staging_dir="s3://mybucket", aws_credentials_provider_class="com.amazonaws.auth.DefaultAWSCredentialsProviderChain" ) 

設置類路徑是關鍵。 執行dbConnect ,Athena驅動程序將嘗試從JAR加載命名類,這將加載所有依賴項。 如果類路徑不包含SDK JAR,您將看到如下錯誤:

.jcall中的錯誤(drv @ jdrv,“Ljava / sql / Connection;”,“connect”,as.character(url)[1],:java.lang.NoClassDefFoundError:無法初始化類com.amazonaws.auth.DefaultAWSCredentialsProviderChain

如果沒有第三方JAR引用,您可能會看到如下錯誤:

.jcall中的錯誤(drv @ jdrv,“Ljava / sql / Connection;”,“connect”,as.character(url)[1],:java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM