2017-03-22 7 views
2

S3 버킷의 상단에서 실행되는 AWS에서 EMR 클러스터 (스팟 인스턴스 포함)를 호스팅하게됩니다. 데이터는이 버킷에 ORC 형식으로 저장됩니다. 그러나 우리는 동일한 데이터를 읽는 일종의 샌드 박스 환경뿐만 아니라 R을 사용하기를 원합니다.R S3의 ORC 파일 읽기

올바르게 작동하는 aws.s3 (cloudyr) 패키지가 있습니다. 문제없이 csv 파일을 읽을 수 있지만 orc 파일을 읽을 수있는 것으로 변환 할 수 없습니다.

두 가지 옵션은 내가 온라인 founnd 했다 - SparkR - Windows 시스템에서 problamatic dataconnector을했다 설치 이후 dataconnector (Vertica의)

, 나는 SparkR를 설치하고 나는 (지금 R 로컬 orc.file를 읽을 수 있어요 내 컴퓨터의 로컬, orc 파일이 내 컴퓨터의 로컬). 그러나 내가 read.orc를 시도하면 기본적으로 내 경로가 로컬 경로로 정규화됩니다. 소스 코드에 파고, 나는 다음과 같은 실행 :

sparkSession <- SparkR:::getSparkSession() 
options <- SparkR:::varargsToStrEnv() 
read <- SparkR:::callJMethod(sparkSession, "read") 
read <- SparkR:::callJMethod(read, "options", options) 
sdf <- SparkR:::handledCallJMethod(read, "orc", my_path) 

을하지만 다음과 같은 오류를 얻을 :

Error: Error in orc : java.io.IOException: No FileSystem for scheme: https 

누군가가 오크 파일을로드 할 수있는 다른 방법을 가리키는이 문제를 또는 하나 좀 도와 수를 S3에서?

+0

[tag : vertica]라고 태그했습니다. 이미 R을 사용하여 Vertica의 데이터를 읽었습니까? ORC/S3 부분에 머물러 있습니까? –

+0

R 패키지 dataconnector가 Vertica 제품이기 때문에 나는 vertica에 태그를 붙였습니다. 사실 나는 R을 사용하여 R 자체를 읽고 ORC 부분에 붙어 있습니다 (S3에서 읽기는 읽을 수있는 형식이 아닙니다). –

+0

Vertica의 어떤 버전입니까? (ORC 통합은 지난 몇 달 동안 활발히 진행되어 왔습니다.) ORC -> Vertica를 도울 수 있지만 R 부분에 대해서는 아무것도 모릅니다. 그게 도움이 되니? –

답변

2

편집 답 : 지금 당신은 대신에 처음 다운로드의 S3에서 직접 읽고 mrjoseph의 요청에 로컬 파일 시스템

에서 읽을 수 있습니다 SparkR를 통해 가능한 솔루션을 (처음에 나는하지 않았다 하고 싶다).

# Set the System environment variable to where Spark is installed 
Sys.setenv(SPARK_HOME="pathToSpark") 
Sys.setenv('SPARKR_SUBMIT_ARGS'='"--packages" "org.apache.hadoop:hadoop-aws:2.7.1" "sparkr-shell"') 

# Set the library path to include path to SparkR 
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"),"R","lib"), .libPaths())) 

# Set system environments to be able to load from S3 
Sys.setenv("AWS_ACCESS_KEY_ID" = "myKeyID", "AWS_SECRET_ACCESS_KEY" = "myKey", "AWS_DEFAULT_REGION" = "myRegion") 

# load required packages 
library(aws.s3) 
library(SparkR) 

## Create a spark context and a sql context 
sc<-sparkR.init(master = "local") 
sqlContext<-sparkRSQL.init(sc) 

# Set path to file 
path <- "s3n://bucketname/filename.orc" 

# Set hadoop configuration 
hConf = SparkR:::callJMethod(sc, "hadoopConfiguration") 
SparkR:::callJMethod(hConf, "set", "fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") 
SparkR:::callJMethod(hConf, "set", "fs.s3n.awsAccessKeyId", "myAccesKey") 
SparkR:::callJMethod(hConf, "set", "fs.s3n.awsSecretAccessKey", "mySecrectKey") 

# Slight adaptation to read.orc function 
sparkSession <- SparkR:::getSparkSession() 
options <- SparkR:::varargsToStrEnv() 
# Not required: path <- normalizePath(path) 
read <- SparkR:::callJMethod(sparkSession, "read") 
read <- SparkR:::callJMethod(read, "options", options) 
sdf <- SparkR:::handledCallJMethod(read, "orc", path) 
temp <- SparkR:::dataFrame(sdf) 

# Read first lines 
head(temp) 
+1

스파크 버전이 Hadoop 2.7.x 이상을 대상으로 빌드 된 경우 auth로 전환하는 것을 포함하여 s3a : URLs을 사용하십시오 (설정 키에서 s3n을 s3a로 바꾸는 것보다 조금 더 낫습니다). S3A는 AWS_ 환경 변수의 비밀을 자동으로 선택하며, EC2에서는 VM이 ​​자격 증명을 소유하므로 실제 삶이 더 쉬울 수도 있습니다. –