2016-09-17 33 views
8

समस्या में याद आ रही है -क्यों hive_staging फ़ाइल एडब्ल्यूएस ईएमआर

मैं एडब्ल्यूएस ईएमआर में 1 क्वेरी चला रहा हूँ। यह अपवाद फेंकने में असफल रहा है -

java.io.FileNotFoundException: File s3://xxx/yyy/internal_test_automation/2016/09/17/17156/data/feed/commerce_feed_redshift_dedup/.hive-staging_hive_2016-09-17_10-24-20_998_2833938482542362802-639 does not exist. 

मैंने नीचे इस समस्या के लिए सभी संबंधित जानकारी का उल्लेख किया है। कृपया जांचें।

क्वेरी -

INSERT OVERWRITE TABLE base_performance_order_dedup_20160917 
SELECT 
* 
FROM 
(
select 
commerce_feed_redshift_dedup.sku AS sku, 
commerce_feed_redshift_dedup.revenue AS revenue, 
commerce_feed_redshift_dedup.orders AS orders, 
commerce_feed_redshift_dedup.units AS units, 
commerce_feed_redshift_dedup.feed_date AS feed_date 
from commerce_feed_redshift_dedup 
) tb 

अपवाद -

ERROR Error while executing queries 
java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Map 1, vertexId=vertex_1474097800415_0311_2_00, diagnostics=[Vertex vertex_1474097800415_0311_2_00 [Map 1] killed/failed due to:ROOT_INPUT_INIT_FAILURE, Vertex Input: commerce_feed_redshift_dedup initializer failed, vertex=vertex_1474097800415_0311_2_00 [Map 1], java.io.FileNotFoundException: File s3://xxx/yyy/internal_test_automation/2016/09/17/17156/data/feed/commerce_feed_redshift_dedup/.hive-staging_hive_2016-09-17_10-24-20_998_2833938482542362802-639 does not exist. 
    at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.listStatus(S3NativeFileSystem.java:987) 
    at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.listStatus(S3NativeFileSystem.java:929) 
    at com.amazon.ws.emr.hadoop.fs.EmrFileSystem.listStatus(EmrFileSystem.java:339) 
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1530) 
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1537) 
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1556) 
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1601) 
    at org.apache.hadoop.fs.FileSystem$4.(FileSystem.java:1778) 
    at org.apache.hadoop.fs.FileSystem.listLocatedStatus(FileSystem.java:1777) 
    at org.apache.hadoop.fs.FileSystem.listLocatedStatus(FileSystem.java:1755) 
    at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:239) 
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:201) 
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:281) 
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.addSplitsForGroup(HiveInputFormat.java:363) 
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.getSplits(HiveInputFormat.java:486) 
    at org.apache.hadoop.hive.ql.exec.tez.HiveSplitGenerator.initialize(HiveSplitGenerator.java:200) 
    at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable$1.run(RootInputInitializerManager.java:278) 
    at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable$1.run(RootInputInitializerManager.java:269) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
    at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable.call(RootInputInitializerManager.java:269) 
    at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable.call(RootInputInitializerManager.java:253) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
]Vertex killed, vertexName=Reducer 2, vertexId=vertex_1474097800415_0311_2_01, diagnostics=[Vertex received Kill in INITED state., Vertex vertex_1474097800415_0311_2_01 [Reducer 2] killed/failed due to:OTHER_VERTEX_FAILURE]DAG did not succeed due to VERTEX_FAILURE. failedVertices:1 killedVertices:1 
    at org.apache.hive.jdbc.HiveStatement.waitForOperationToComplete(HiveStatement.java:348) 
    at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:251) 
    at com.XXX.YYY.executors.HiveQueryExecutor.executeQueriesInternal(HiveQueryExecutor.java:234) 
    at com.XXX.YYY.executors.HiveQueryExecutor.executeQueriesMetricsEnabled(HiveQueryExecutor.java:184) 
    at com.XXX.YYY.azkaban.jobexecutors.impl.AzkabanHiveQueryExecutor.run(AzkabanHiveQueryExecutor.java:68) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at azkaban.jobtype.JavaJobRunnerMain.runMethod(JavaJobRunnerMain.java:192) 
    at azkaban.jobtype.JavaJobRunnerMain.(JavaJobRunnerMain.java:132) 
    at azkaban.jobtype.JavaJobRunnerMain.main(JavaJobRunnerMain.java:76) 

हाइव विन्यास गुण, मैं क्वेरी ऊपर निष्पादित करने से पहले सेट करें। -

set hivevar:hive.mapjoin.smalltable.filesize=2000000000 
set hivevar:mapreduce.map.speculative=false 
set hivevar:mapreduce.output.fileoutputformat.compress=true 
set hivevar:hive.exec.compress.output=true 
set hivevar:mapreduce.task.timeout=6000000 
set hivevar:hive.optimize.bucketmapjoin.sortedmerge=true 
set hivevar:io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec 
set hivevar:hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat 
set hivevar:hive.auto.convert.sortmerge.join.noconditionaltask=false 
set hivevar:FEED_DATE=20160917 
set hivevar:hive.optimize.bucketmapjoin=true 
set hivevar:hive.exec.compress.intermediate=true 
set hivevar:hive.enforce.bucketmapjoin=true 
set hivevar:mapred.output.compress=true 
set hivevar:mapreduce.map.output.compress=true 
set hivevar:hive.auto.convert.sortmerge.join=false 
set hivevar:hive.auto.convert.join=false 
set hivevar:mapreduce.reduce.speculative=false 
set hivevar:[email protected] 
set hivevar:mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec 
set hive.mapjoin.smalltable.filesize=2000000000 
set mapreduce.map.speculative=false 
set mapreduce.output.fileoutputformat.compress=true 
set hive.exec.compress.output=true 
set mapreduce.task.timeout=6000000 
set hive.optimize.bucketmapjoin.sortedmerge=true 
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec 
set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat 
set hive.auto.convert.sortmerge.join.noconditionaltask=false 
set FEED_DATE=20160917 
set hive.optimize.bucketmapjoin=true 
set hive.exec.compress.intermediate=true 
set hive.enforce.bucketmapjoin=true 
set mapred.output.compress=true 
set mapreduce.map.output.compress=true 
set hive.auto.convert.sortmerge.join=false 
set hive.auto.convert.join=false 
set mapreduce.reduce.speculative=false 
set [email protected] 
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec 

/etc/hive/conf/hive-site.xml

<configuration> 

<!-- Hive Configuration can either be stored in this file or in the hadoop configuration files --> 
<!-- that are implied by Hadoop setup variables.            --> 
<!-- Aside from Hadoop setup variables - this file is provided as a convenience so that Hive --> 
<!-- users do not have to edit hadoop configuration files (that may be managed as a centralized --> 
<!-- resource).                     --> 

<!-- Hive Execution Parameters --> 


<property> 
    <name>hbase.zookeeper.quorum</name> 
    <value>ip-172-30-2-16.us-west-2.compute.internal</value> 
    <description>http://wiki.apache.org/hadoop/Hive/HBaseIntegration</description> 
</property> 

<property> 
    <name>hive.execution.engine</name> 
    <value>tez</value> 
</property> 

    <property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://ip-172-30-2-16.us-west-2.compute.internal:8020</value> 
    </property> 


    <property> 
    <name>hive.metastore.uris</name> 
    <value>thrift://ip-172-30-2-16.us-west-2.compute.internal:9083</value> 
    <description>JDBC connect string for a JDBC metastore</description> 
    </property> 

    <property> 
    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:mysql://ip-172-30-2-16.us-west-2.compute.internal:3306/hive?createDatabaseIfNotExist=true</value> 
    <description>username to use against metastore database</description> 
    </property> 

    <property> 
    <name>javax.jdo.option.ConnectionDriverName</name> 
    <value>org.mariadb.jdbc.Driver</value> 
    <description>username to use against metastore database</description> 
    </property> 

    <property> 
    <name>javax.jdo.option.ConnectionUserName</name> 
    <value>hive</value> 
    <description>username to use against metastore database</description> 
    </property> 

    <property> 
    <name>javax.jdo.option.ConnectionPassword</name> 
    <value>mrN949zY9P2riCeY</value> 
    <description>password to use against metastore database</description> 
    </property> 

    <property> 
    <name>datanucleus.fixedDatastore</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>mapred.reduce.tasks</name> 
    <value>-1</value> 
    </property> 

    <property> 
    <name>mapred.max.split.size</name> 
    <value>256000000</value> 
    </property> 

    <property> 
    <name>hive.metastore.connect.retries</name> 
    <value>15</value> 
    </property> 

    <property> 
    <name>hive.optimize.sort.dynamic.partition</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>hive.async.log.enabled</name> 
    <value>false</value> 
    </property> 

</configuration> 

/etc/tez/conf/tez-site.xml

<configuration> 
    <property> 
    <name>tez.lib.uris</name> 
    <value>hdfs:///apps/tez/tez.tar.gz</value> 
    </property> 

    <property> 
    <name>tez.use.cluster.hadoop-libs</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>tez.am.grouping.max-size</name> 
    <value>134217728</value> 
    </property> 

    <property> 
    <name>tez.runtime.intermediate-output.should-compress</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>tez.runtime.intermediate-input.is-compressed</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>tez.runtime.intermediate-output.compress.codec</name> 
    <value>org.apache.hadoop.io.compress.LzoCodec</value> 
    </property> 

    <property> 
    <name>tez.runtime.intermediate-input.compress.codec</name> 
    <value>org.apache.hadoop.io.compress.LzoCodec</value> 
    </property> 

    <property> 
    <name>tez.history.logging.service.class</name> 
    <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value> 
    </property> 

    <property> 
    <name>tez.tez-ui.history-url.base</name> 
    <value>http://ip-172-30-2-16.us-west-2.compute.internal:8080/tez-ui/</value> 
    </property> 
</configuration> 

प्रश्न -

  1. किस प्रक्रिया ने इस फ़ाइल को हटा दिया? हाइव के लिए, यह फ़ाइल केवल वहां होनी चाहिए। (साथ ही, यह फ़ाइल एप्लिकेशन कोड द्वारा नहीं बनाई गई है।)
  2. जब मैं विफल समय की संख्या में भाग गया, तो यह गुजरता है। संदिग्ध व्यवहार क्यों है?
  3. चूंकि, मैंने अभी हाइव-exec, hive-jdbc संस्करण को 2.1.0 में अपग्रेड किया है। तो, ऐसा लगता है कि कुछ हाइव कॉन्फ़िगरेशन गुण गलत तरीके से सेट हैं या कुछ गुण गायब हैं। क्या आप गलत तरीके से सेट/मिस्ड हाइव गुण ढूंढने में मेरी मदद कर सकते हैं?

नोट - मैंने 0.13.0 से 2.1.0 तक हाइव-निष्पादन संस्करण को अपग्रेड किया। पिछले संस्करण में, सभी प्रश्न ठीक काम कर रहे हैं।

अद्यतन-1

जब मैं एक और क्लस्टर लॉन्च करते हैं, यह ठीक काम किया। मैंने एक ही ईटीएल पर 3 बार परीक्षण किया।

जब मैंने एक ही चीज को नए क्लस्टर पर फिर से किया, तो यह वही अपवाद दिखा रहा है। समझने में सक्षम नहीं, यह अस्पष्टता क्यों हो रही है।

इस अस्पष्टता को समझने में मेरी सहायता करें।

मैं हाइव से निपटने में निष्पक्ष हूं। तो, इसके बारे में कम वैचारिक विचार है।

अद्यतन-2-

HFS तहत क्लस्टर सार्वजनिक DNS नाम लॉग: 50070 -

2016-09-20 11:31:55,155 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy (IPC Server handler 11 on 8020): Failed to place enough replicas, still in need of 1 to reach 1 (unavailableStorages=[], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) For more information, please enable DEBUG log level on org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy 2016-09-20 11:31:55,155 WARN org.apache.hadoop.hdfs.protocol.BlockStoragePolicy (IPC Server handler 11 on 8020): Failed to place enough replicas: expected size is 1 but only 0 storage types can be selected (replication=1, selected=[], unavailable=[DISK], removed=[DISK], policy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}) 2016-09-20 11:31:55,155 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy (IPC Server handler 11 on 8020): Failed to place enough replicas, still in need of 1 to reach 1 (unavailableStorages=[DISK], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) All required storage types are unavailable: unavailableStorages=[DISK], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]} 2016-09-20 11:31:55,155 INFO org.apache.hadoop.ipc.Server (IPC Server handler 11 on 8020): IPC Server handler 11 on 8020, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 172.30.2.207:56462 Call#7497 Retry#0 java.io.IOException: File /user/hive/warehouse/bc_kmart_3813.db/dp_internal_temp_full_load_offer_flexibility_20160920/.hive-staging_hive_2016-09-20_11-17-51_558_1222354063413369813-58/_task_tmp.-ext-10000/_tmp.000079_0 could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and no node(s) are excluded in this operation. at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1547) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3107) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3031) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:724) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:492) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)

जब मैं इस अपवाद की खोज। मुझे यह पृष्ठ मिला - https://wiki.apache.org/hadoop/CouldOnlyBeReplicatedTo

मेरे क्लस्टर में, 32 जीबी डिस्क स्पेस के साथ एक डेटा नोड है।

** /etc/hive/conf/hive-default.xml.template - **

<property> 
    <name>hive.exec.stagingdir</name> 
    <value>.hive-staging</value> 
    <description>Directory name that will be created inside table locations in order to support HDFS encryption. This is replaces ${hive.exec.scratchdir} for query results with the exception of read-only tables. In all cases ${hive.exec.scratchdir} is still used for other temporary files, such as job plans.</description> 
    </property> 

सवाल

  1. लॉग के अनुसार, छत्ता-मचान फ़ोल्डर बनाया है क्लस्टर मशीन में, /var/log/hadoop-hdfs/hadoop-hdfs-datanode-ip-172-30-2-189.log के अनुसार, फिर यह एस 3 में भी वही फ़ोल्डर क्यों बना रहा है?

अद्यतन-3-

कुछ अपवाद प्रकार के होते हैं - LeaseExpiredException -

2016-09-21 08:53:17,995 INFO org.apache.hadoop.ipc.Server (IPC Server handler 13 on 8020): IPC Server handler 13 on 8020, call org.apache.hadoop.hdfs.protocol.ClientProtocol.complete from 172.30.2.189:42958 Call#726 Retry#0: org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on /tmp/hive/hadoop/_tez_session_dir/6ebd2d18-f5b9-4176-ab8f-d6c78124b636/.tez/application_1474442135017_0022/recovery/1/summary (inode 20326): File does not exist. Holder DFSClient_NONMAPREDUCE_1375788009_1 does not have any open files.

+0

समझाया गया LeaseExpiredException मुद्दा यहां विस्तार से समझाया गया है - stackoverflow.com/questions/39619130/... अगर किसी को भी इसी तरह के मुद्दे का सामना करना पड़ता है तो कृपया मेरी मदद करें। मैंने रूट कारण खोजने के लिए दिन बिताए, लेकिन इसे खोजने में सक्षम नहीं। – devsda

उत्तर

2

मैं इस मुद्दे को हल। मुझे विस्तार से समझाएं।

अपवाद है कि आ रहा है -

  1. LeaveExpirtedException - HDFS की ओर से।
  2. FileNotFoundException - हाइव की ओर (जब तेज़ निष्पादन इंजन कार्यान्वित DAG)

समस्या scenario- छत्ता 0.13.0 से 2.1.0 के लिए संस्करण

  1. हम सिर्फ उन्नत बनाया से। और, सब कुछ पिछले संस्करण के साथ ठीक काम कर रहा था। शून्य रनटाइम अपवाद।

    1. पहले सोचा गया था, दो धागे एनएन खुफिया की वजह से एक ही टुकड़े पर काम कर रहा था -

    विभिन्न विचारों को इस मुद्दे को हल करने के लिए। लेकिन सेटिंग्स

    सेट mapreduce.map.speculative = false सेट mapreduce.reduce.speculative नीचे के अनुसार = false

संभव नहीं था कि।

  1. तो, मैं 1000 से नीचे सेटिंग्स के लिए 100000 करने के लिए संख्या में वृद्धि -

    सेट hive.exec.max.dynamic.partitions = 100000; एसईटी hive.exec.max.dynamic.partitions.pernode = 100000;

जो भी काम नहीं करता था।

  1. फिर तीसरा विचार था, निश्चित रूप से एक ही प्रक्रिया में, मैपर -1 को बनाया गया था जो किसी अन्य मैपर/रेड्यूसर द्वारा हटा दिया गया था। लेकिन, हमें Hveserver2, Tez लॉग में ऐसे कोई लॉग नहीं मिला।

  2. अंत में मूल कारण एक अनुप्रयोग परत कोड में ही है। छत्ता-कार्यकारी-2.1.0 संस्करण में, वे नया विन्यास संपत्ति शुरू की

    "hive.exec.stagingdir": "छत्ता-मचान।"

ऊपर संपत्ति का विवरण -

निर्देशिका नाम जो समर्थन एचडीएफएस एन्क्रिप्शन के लिए तालिका स्थानों के अंदर बनाया जाएगा। यह केवल पढ़ने के लिए टेबल के अपवाद के साथ क्वेरी परिणामों के लिए $ {hive.exec.scratchdir} को प्रतिस्थापित करता है। सभी मामलों में $ {hive.exec.scratchdir} अभी भी अन्य अस्थायी फ़ाइलों, जैसे नौकरी योजनाओं के लिए उपयोग किया जाता है।

तो यदि आवेदन परत कोड (ईटीएल) में कोई समवर्ती नौकरियां हैं, और एक ही टेबल पर ऑपरेशन (नाम बदलें/हटाएं/स्थानांतरित) कर रहे हैं, तो यह इस समस्या का कारण बन सकता है।

और, हमारे मामले में, 2 समवर्ती नौकरियां एक ही टेबल पर "इन्टरेट ओवरराइट" कर रही हैं, जिससे 1 मैपर की मेटाडेटा फ़ाइल हटा दी जाती है, जो इस समस्या का कारण बनती है।

संकल्प -

  1. ले जाएँ मेटाडाटा फ़ाइल स्थान के बाहर मेज पर (तालिका S3 में निहित है)।
  2. एचडीएफएस एन्क्रिप्शन को अक्षम करें (जैसा कि स्टेजिंगडियर प्रॉपर्टी के विवरण में उल्लिखित है।)
  3. समेकन समस्या से बचने के लिए अपने एप्लिकेशन लेयर कोड में बदलें।
+0

संकल्प के लिए (1) - क्या आपने s3 पर hive.exec.stagingdir का स्थान रखने को समाप्त किया? या आप एचडीएफएस पर रीडायरेक्ट करना समाप्त कर दिया? – etliens

+0

हे! तो आप hive.exec.stagingdir संपत्ति में परिवर्तन कहाँ किया था? – jackStinger

+1

@etilens - हाँ, स्थान केवल S3 पर है। – devsda

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