【以下的问题经过翻译处理】 我正在尝试创建一个非常简单的Map-Reduce程序,在Map任务的一部分中,它需要从S3中加载一个小文件(可以保存在本地内存中)。
在Map-Reduce中,任务是检查每行与该文件匹配,并生成一个特征向量(等等...)
我在设置方法中下载和访问此文件方面遇到了问题。
我认为问题出在传递凭证,但也可能出在我在设置函数中访问文件的方式上(我在下面放置了代码片段)。
在我的Map-Reduce日志中,我收到的错误是:
“配置文件不能为空”
关于这一行:
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(new ProfileCredentialsProvider().getCredentials());
我尝试了许多其他方法,但没有进展,如果您有任何指导,那将是很棒的。
在我的主要(运行在我的本地计算机上)java文件中,我执行了以下操作:
AmazonElasticMapReduce mapReduce =AmazonElasticMapReduceClientBuilder.standard().withRegion("us-east-1").build();
HadoopJarStepConfig hadoopJarStep = new HadoopJarStepConfig()
.withJar("MYPATH") // 这应该是完整的Map-Reduce应用程序。
.withMainClass("MYMAIN");
在MapReduce jar文件(在ec2任务上运行的那个)中,我定义了相关的任务和作业控制,并在Map类的设置函数中执行了以下操作:
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(new ProfileCredentialsProvider().getCredentials());
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(credentialsProvider)
.withRegion("us-east-1")
.build();
String S3Bucket = "MYBUCKET"; // the bucket where the file is located
String S3Key = "MYKEY"; // the name of the file
S3Object object = s3.getObject(new GetObjectRequest(S3Bucket, S3Key)); // bucket, key
S3ObjectInputStream summaryInputStream = object.getObjectContent();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(summaryInputStream));
我还尝试在主文件中对我的凭据进行硬编码(在我的电脑上本地运行),如下所示:
String access_key = "aws_access_key_id=MYKEY";
String secret_key = "aws_secret_access_key=MYSECRETKEY";
BasicAWSCredentials creds = new BasicAWSCredentials(access_key, secret_key);
AWSStaticCredentialsProvider awsCred = new AWSStaticCredentialsProvider(creds);
AmazonElasticMapReduce mapReduce = AmazonElasticMapReduceClientBuilder.standard().withRegion("us-east-1").withCredentials(awsCred).build();
也没有成功(我尝试从字符串中排除 “aws_access_key_id=” 和 “aws_secret_access_key=”)
谢谢!