2016-08-27 19 views
10

मैं एक छोटे से तीन सर्वर अमेज़ॅन ईएमआर 5 (स्पार्क 2.0) क्लस्टर पर स्पार्क नौकरी चला रहा हूं। मेरा काम एक घंटे या उससे भी अधिक तक चलता है, नीचे दी गई त्रुटि से विफल रहता है। मैं मैन्युअल रूप से पुनरारंभ कर सकता हूं और यह काम करता है, अधिक डेटा संसाधित करता है, और अंत में फिर से विफल रहता है।अमेज़ॅन ईएमआर पर स्पार्क: "पूल से कनेक्शन के लिए टाइमआउट प्रतीक्षा"

मेरा स्पार्क कोड काफी सरल है और सीधे किसी भी अमेज़ॅन या एस 3 एपीआई का उपयोग नहीं कर रहा है। मेरा स्पार्क कोड स्पार्क और स्पार्क को एस 3 टेक्स्ट स्ट्रिंग पथ पास करता है आंतरिक रूप से एस 3 का उपयोग करता है।

मेरा स्पार्क प्रोग्राम सिर्फ लूप में निम्न कार्य करता है: S3 से डेटा लोड करें -> प्रक्रिया -> S3 पर अलग-अलग स्थान पर डेटा लिखें।

मेरा पहला संदेह यह है कि कुछ आंतरिक अमेज़ॅन या स्पार्क कोड कनेक्शन का सही ढंग से निपटान नहीं कर रहे हैं और कनेक्शन पूल समाप्त हो गया है।

com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.AmazonClientException: Unable to execute HTTP request: Timeout waiting for connection from pool 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:618) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1015) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:991) 
      at com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore.retrieveMetadata(Jets3tNativeFileSystemStore.java:212) 
      at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191) 
      at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) 
      at com.sun.proxy.$Proxy44.retrieveMetadata(Unknown Source) 
      at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.getFileStatus(S3NativeFileSystem.java:780) 
      at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1428) 
      at com.amazon.ws.emr.hadoop.fs.EmrFileSystem.exists(EmrFileSystem.java:313) 
      at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:85) 
      at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:60) 
      at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:58) 
      at org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:74) 
      at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115) 
      at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115) 
      at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:136) 
      at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 
      at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:133) 
      at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:114) 
      at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:86) 
      at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:86) 
      at org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:487) 
      at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:211) 
      at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:194) 
      at sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237) 
      at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 
      at py4j.Gateway.invoke(Gateway.java:280) 
      at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128) 
      at py4j.commands.CallCommand.execute(CallCommand.java:79) 
      at py4j.GatewayConnection.run(GatewayConnection.java:211) 
      at java.lang.Thread.run(Thread.java:745) 
    Caused by: com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool 
      at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.conn.PoolingClientConnectionManager.leaseConnection(PoolingClientConnectionManager.java:226) 
      at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.conn.PoolingClientConnectionManager$1.getConnection(PoolingClientConnectionManager.java:195) 
      at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.conn.ClientConnectionRequestFactory$Handler.invoke(ClientConnectionRequestFactory.java:70) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.conn.$Proxy45.getConnection(Unknown Source) 
      at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:423) 
      at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863) 
      at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
      at com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:837) 
      at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607) 
      ... 41 more 
+0

आगे की सहायता के लिए, आपको एक कोड नमूना प्रदान करना होगा और/या हमें बताएं कि आप अपने कोड के लिए किस भाषा का उपयोग कर रहे हैं। एसओ पर कहीं और इस तरह की समस्या का जिक्र है, और उन्होंने लिंगरिंग एस 3 कनेक्शनों का निपटान करने के लिए एक स्निपेट लिखा: http://stackoverflow.com/questions/17782937/connectionpooltimeoutexception-when-iterating-objects-in-s3 – Kristian

+0

I एडब्ल्यूएस में स्पार्क 1.6.1 के साथ एक बहुत ही समान समस्या का सामना कर रहा हूं। डीबग लॉग से, मैं देख सकता हूं कि प्रत्येक निष्पादक कार्य समाप्त होने पर कनेक्शन जारी करने में विफल रहता है। यही है: निष्पादक स्पार्क कार्य 5 को संसाधित करना शुरू कर सकता है, और उस कार्य को संसाधित करते समय यह S3 को एकाधिक कॉल करेगा, फिर कनेक्शन बंद कर देगा, लेकिन तब जब कार्य समाप्त होता है (और यह कार्य 6 शुरू करना चाहता है), एक कनेक्शन isn ' टी बंद तो यदि कनेक्शन पूल का आकार n है, तो मुझे यह त्रुटि मिलती है जब निष्पादक अपना एन + 1 कार्य शुरू करता है। –

+0

यह समस्या भी प्राप्त करते समय, मैं केवल डेटाफ्रेमराइटर और डेटाफ्रेम्रेडर का उपयोग करते समय एस 3 कनेक्शन कैसे बंद कर सकता हूं? –

उत्तर

5

मैं ईएमआर पर एक बहुत ही तुच्छ कार्यक्रम (, एस 3, फिल्टर से डेटा पढ़ने S3 के बारे में) के साथ इस मुद्दे का सामना करना पड़ा।

मैं एस 3 ए फ़ाइल सिस्टम कार्यान्वयन और fs.s3a.connection.maximum100 पर एक बड़ा कनेक्शन पूल रखने के लिए इसे हल कर सकता हूं। (डिफ़ॉल्ट 15 है, अधिक config संपत्तियों के लिए Hadoop-AWS module: Integration with Amazon Web Services देखें)

यह कैसे मैं विन्यास सेट किया गया है:

// in Scala 
val hc = sc.hadoopConfiguration 

// in Python (not tested) 
hc = sc._jsc.hadoopConfiguration() 

// setting the config is the same for both languages 
hc.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") 
hc.setInt("fs.s3a.connection.maximum", 100) 

यह काम करने के लिए, S3 यूआरआई स्पार्क के लिए पारित s3a://...

साथ शुरू करने के लिए है
+1

मुझे एक ही समस्या दिखाई दे रही है। उपरोक्त मेरे लिए कोई फर्क नहीं पड़ता। हम निश्चित रूप से एस 3 ए यूआरएल का उपयोग कर रहे हैं। – user894199

+0

को एक ही त्रुटि मिली –

संबंधित मुद्दे