[英]R Connect to AWS Athena
我正在嘗試根據我在線閱讀的內容連接到AWS Athena,但我遇到了問題。
采取的步驟
有任何想法嗎?
錯誤信息:
.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配置文件,環境變量等加載憑據的幾個選項。
lib
)的SDK jar和第三方依賴關系jar( third-party/lib
)的目錄。 添加一些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]) }
配置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.