2015-04-01 10 views
13

मेरे पास तीन नोड्स कैसंद्रा क्लस्टर हैं और मैंने एक टेबल बनाई है जिसमें 2,000,000 से अधिक पंक्तियां हैं।कैसंड्रा के cqlsh कंसोल में ऑपरेशन टाइम आउट त्रुटि

OperationTimedOut: errors={}, last_host=192.168.1.2

जब मैं कम पंक्ति के लिए या सीमा 50,000 से गिनती समारोह चलाने यह ठीक काम करता है:

जब मैं इस (select count(*) from userdetails) cqlsh में क्वेरी को निष्पादित, मैं यह त्रुटि हुई।

उत्तर

14

गिनती (*) वास्तव में सभी डेटा के माध्यम से पृष्ठों। इसलिए बिना किसी सीमा के select count(*) from userdetails की कई पंक्तियों के साथ समय-समय पर आने की उम्मीद की जाएगी। यहाँ कुछ विवरण: http://planetcassandra.org/blog/counting-key-in-cassandra/

आप, अपने आप को गिनती को बनाए रखने के स्पार्क का उपयोग कर विचार कर सकते हैं, या यदि आप सिर्फ एक गेंद पार्क संख्या चाहते हैं आप JMX से यह हड़पने कर सकते हैं।

जेएमएक्स से पकड़ने के लिए यह आपके डेटा मॉडल के आधार पर थोड़ा मुश्किल हो सकता है। विभाजनों की संख्या प्राप्त करने के लिए org.apache.cassandra.metrics:type=ColumnFamily,keyspace={{Keyspace}},scope={{Table​}},name=EstimatedColumnCountHistogram मैबियन को पकड़ें और सभी 90 मानों को जोड़ दें (यह nodetool cfstats आउटपुट है)। यह केवल आपको अधिक सटीक बनाने के लिए स्टेबल्स में मौजूद नंबर प्रदान करेगा ताकि आप फ्लश कर सकें या MemtableColumnsCount मेबिन

+0

कृपया, आप मुझे कैसे JMX से इसे पाने के लिए करने के लिए कुछ विस्तार से बता सकते हैं कि में टाइमआउट को बढ़ा सकते हैं? – Kaushal

+0

ने –

+0

+1 को स्वरूपित करने के लिए उपरोक्त संपादन में इसे जोड़ा। एक और विकल्प (रिकॉर्ड की मात्रा पर 'गिनती' रखने के लिए) कैसंद्रा के स्वच्छ वितरित काउंटर का उपयोग उस के लिए होगा (एक अलग सीएफ में, बस इसे प्रत्येक सम्मिलन में बढ़ाएं)। इसे स्थापित करते समय प्रारंभिक बीज राशि प्रदान करने के लिए आपको वर्तमान पंक्तियों (उदाहरण के लिए कोड में इसके माध्यम से पुनरावृत्त) को पुनर्प्राप्त करने की आवश्यकता होगी। – ChristopheD

2

से उपयोग किए गए memtables में संख्या का अनुमान लगाने का प्रयास करें यदि आप cqlsh का उपयोग करते हैं: संपादक में स्क्रिप्ट खोलें और सभी को ढूंढें शब्द "टाइमआउट"। डिफ़ॉल्ट मान 10 से 60 तक बदलें और स्क्रिप्ट को सहेजें।

+2

यह कैसे करें, यदि आप कॉन्फ़िगरेशन फ़ाइल में स्क्रिप्ट से संबंधित नहीं हैं –

0

यदि आप एक दिन के लिए गिनती करते हैं तो ऊपर की तरह एक ही समस्या है, लेकिन आसपास के काम के रूप में, मैंने गिनती को दो अनुरोधों (12hours + 12hours) में विभाजित किया है, जैसे नीचे।

तकनीक 1: cqlshrc फ़ाइल को संशोधित

cqlsh:jw_schema1> select count(*) from flight_statistics where insert_time >= '2015-08-20 00:00:00' and insert_time <= '2015-08-20 11:59:59' ALLOW FILTERING; 

count 
------- 
42528 

(1 rows) 
cqlsh:jw_schema1> select count(*) from flight_statistics where insert_time >= '2015-08-20 12:00:00' and insert_time <= '2015-08-20 23:59:59' ALLOW FILTERING; 

count 
------- 
86580 

(1 rows) 
cqlsh:jw_schema1> 
4

अपाचे कैसेंड्रा में ग्राहक समय समाप्ति सीमा को बदलने के लिए, वहाँ दो तकनीक है।

तकनीक 2: प्रोग्राम cqlsh खोलें और client_timeout चर का उपयोग करके निर्दिष्ट समय को संशोधित करें।

विवरण हासिल करने के लिए लिंक देखें के लिए: https://playwithcassandra.wordpress.com/2015/11/05/cqlsh-increase-timeout-limit/

2

मैं रिकॉर्ड मायने रखता है पाने के लिए कैसेंड्रा 3.4 और cqlsh उपयोग कर रहा हूँ। ऐसा लगता है कि 3.4 में कोड बदल गया है। cqlsh बस cqlsh.py कॉल करता है। Cqlsh.py के अंदर DEFAULT_REQUEST_TIMEOUT_SECONDS वेरिएबल है जो 10 (सेकेंड) तक डिफ़ॉल्ट है। मैंने इसे 3600 (1 घंटा) में बदल दिया और अब मेरा SELECT count(*) क्वेरी काम करता है।

9

तुम भी cqlsh आदेश, उदा .:

cqlsh --request-timeout 120 myhost 
संबंधित मुद्दे