У меня есть огромное количество файлов S3, которые я хочу поместить в HDFS. Учитывая количество задействованных файлов, я предпочитаю использовать «распределенную копию». Однако по какой-то причине я не могу заставить hadoop distcp использовать мои учетные данные Amazon S3. Я использую команду:
hadoop distcp -update s3a://[bucket]/[folder]/[filename] hdfs:///some/path/ -D fs.s3a.awsAccessKeyId=[keyid] -D fs.s3a.awsSecretAccessKey=[secretkey] -D fs.s3a.fast.upload=true
Однако это действует так же, как если бы аргументов «-D» не было.
ERROR tools.DistCp: Exception encountered
java.io.InterruptedIOException: doesBucketExist on [bucket]: com.amazonaws.AmazonClientException: No AWS Credentials provided by BasicAWSCredentialsProvider EnvironmentVariableCredentialsProvider SharedInstanceProfileCredentialsProvider : com.amazonaws.SdkClientException: Unable to load credentials from service endpoint
Я просмотрел документацию по Hadoop distcp, но не нашел там решения, почему это не работает. Я пробовал -Dfs.s3n.awsAccessKeyId в качестве флага, который тоже не работал. Я читал, что явная передача учетных данных не является хорошей практикой, так что, может быть, это просто какое-то джентльменское предложение сделать это по-другому?
Как предполагается передавать учетные данные S3 с помощью distcp? Кто-нибудь знает?
-D
, но вы также не должны передавать их через командную строку. Почему они не указаны в вашем файле core-site.xml или определены как переменные среды? - person OneCricketeer   schedule 23.11.2017