com.amazonaws.SdkClientException: Unable to execute HTTP request: Timeout waiting for connection from pool
wholeTextfiles
каждый файл имеет отдельное клиентское соединение с s3 в зависимости от количества разделов, которые у вас есть.и по умолчанию это 50 .
Следовательно, у вас нет икоты на 50 патентов.
Если вы попытались увеличить до 200, вы получили указанное выше исключение.
Решение:
см. Документацию amazon: Как устранить ошибку «Тайм-аут ожидания подключения из пула» в Amazon EMR?
fs.s3.maxConnections
в файле конфигурации emrfs-site.xml
.По умолчанию он равен 50.
, так как вы используете s3a с искрой, вы можете попробовать подключиться ниже максимума, как 200 , как показано в примере.
путь питона:
def create_spark_session(aws_access_key, aws_secret_key, app_name):
try:
spark = SparkSession.builder. \
config("fs.s3a.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem"). \
config("fs.s3a.awsAccessKeyId", aws_access_key). \
config("fs.s3a.awsSecretAccessKey", aws_secret_key). \
config("fs.s3a.fast.upload", "true"). \
config("fs.s3a.multipart.size", "1G"). \
config("fs.s3a.fast.upload.buffer", "disk"). \
config("fs.s3a.connection.maximum", 200. \
config("fs.s3a.attempts.maximum", 20). \
config("fs.s3a.connection.timeout", 30). \
config("fs.s3a.threads.max", 10). \
config("fs.s3a.buffer.dir", "hdfs:///user/hadoop/temporary/s3a"). \
appName(app_name). \
getOrCreate()
return spark
except Exception as e:
logging.error(e)
sys.exit(-1)
Для пользователей Scala:
/**
* example getSparkSessionForS3
* @return
*/
def getSparkSessionForS3():SparkSession = {
val conf = new SparkConf()
.setAppName("testS3File")
.set("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
.set("spark.hadoop.fs.s3a.endpoint", "yourendpoint")
.set("spark.hadoop.fs.s3a.connection.maximum", "200")
.set("spark.hadoop.fs.s3a.fast.upload", "true")
.set("spark.hadoop.fs.s3a.connection.establish.timeout", "500")
.set("spark.hadoop.fs.s3a.connection.timeout", "5000")
.set("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", "2")
.set("spark.hadoop.com.amazonaws.services.s3.enableV4", "true")
.set("spark.hadoop.com.amazonaws.services.s3.enforceV4", "true")
val spark = SparkSession
.builder()
.config(conf)
.getOrCreate()
spark
}
Дополнительная литература:
- amazon-s3 - лучшая практика и настройка для hadoopspark-in-the-cloud ---- номер слайда38
- https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/#aTimeout_waiting_for_connection_from_pool_when_writing_to_S3A
В # 2 обсуждались все эти исключения