मास्टर नोड स्थानीय रखने की कोशिश करते समय भी समानांतर ईसी 2 सेटअप के साथ मुझे कुछ समस्याएं थीं। पूल स्थापित करने के लिए StarCluster का उपयोग करने में काफी मदद मिली, लेकिन वास्तविक सुधार स्टारक्लस्टर और का उपयोग कर ईसी 2 निजी आईपी पूल के भीतर मास्टर नोड रखने के साथ आया।
स्टारक्लस्टर सभी नोड्स के साथ-साथ उपयोग की जाने वाली किसी भी माउंट के लिए सभी महत्वपूर्ण हैंडलिंग सेट अप करता है। डायनामिक नोड आवंटन करने योग्य नहीं था, लेकिन जब तक स्पॉट इंस्टेंस का उपयोग लंबे समय तक नहीं किया जा रहा है और आपकी बोली-प्रक्रिया रणनीति आपके उदाहरणों को 'रख' नहीं देती है तो गतिशील आवंटन एक मुद्दा होना चाहिए।
कुछ अन्य सबक सीख लिया:
- एक चर निजी आईपी युक्त createCluster के पास है और इसे निर्यात करने के लिए बनाने के लिए है, तो एक ही नोड्स यह आसान है के साथ फिर से शुरू करनी जब आपके पास।
- मास्टर नोड byobu चलाएं और इसे आर सत्र लॉगिंग के लिए सेट करें।
- मास्टर पर RStudio सर्वर चलाना कई बार बहुत उपयोगी हो सकता है, लेकिन दास नोड्स की तुलना में एक अलग एएमआई होना चाहिए। :)
- नियंत्रण स्क्रिप्ट ऑफ़लोड डेटा आरडीए फ़ाइलों को उस पथ पर रखें जिसे दूरस्थ रूप से नई फ़ाइलों के लिए निगरानी की जाती है और स्वचालित रूप से उन्हें डाउनलोड किया जाता है।
- दासों की निगरानी करने के लिए htop का उपयोग करें ताकि आप आसानी से उदाहरण देख सकें और स्क्रिप्ट आवश्यकताओं (स्मृति/सीपीयू/स्केलेबिलिटी) निर्धारित कर सकें।
- प्रोसेसर हाइपर-थ्रेडिंग सक्षम/अक्षम स्क्रिप्ट का उपयोग करें।
मैं गुलाम कनेक्शन के साथ काफी एक मुद्दे के एक सा था और क्रमानुसार/unserialize और पाया चीजों में से एक कनेक्शन सीमा थी, और कि कनेक्शन सीमा नोड्स की संख्या से कम किया जा करने के लिए आवश्यक; और जब नियंत्रण स्क्रिप्ट को रोक दिया गया था तो क्लीनअप की सबसे आसान विधि मास्टर आर सत्र को पुनरारंभ कर रही थी, और टाइमआउट के इंतजार के बजाय दास प्रक्रियाओं को मारने के लिए एक स्क्रिप्ट का उपयोग कर रहा था।
यह सेटअप करने के लिए काम का एक सा ले किया था, लेकिन उम्मीद है कि इन विचारों मदद ...
हालांकि यह 8 महीने पहले किया गया था और दोनों StarCluster और अनुसंधान को बदल दिया है यह इस प्रकार सेटअप था के कुछ है। .. आपको स्टारक्लस्टर दस्तावेज़ों में से 9 0% मिलेगा।
- सेटअप। स्टारक्लस्टर/कॉन्फ़िगरेशन एडब्ल्यूएस और कुंजी-जोड़ी अनुभाग AWS कंसोल से गंभीरता जानकारी के आधार पर।
- [smallcluster]
- कुंजी नाम
- उपलब्धता क्षेत्र
- परिभाषित [smallcluster] का विस्तार एक क्लस्टर टेम्पलेट को परिभाषित करें। स्टारक्लस्टर 64 बिट एचवीएम एएमआई के आधार पर एएमआई का उपयोग करना। नए सार्वजनिक एएमआई उदाहरण बनाने के बजाय मैंने अभी एक कॉन्फ़िगर किया गया उदाहरण सहेजा है (मुझे आवश्यक सभी टूल्स के साथ) और एएमआई के रूप में इस्तेमाल किया।
यहाँ एक का एक उदाहरण है ...
[cluster Rnodes2]
EXTENDS=smallcluster
MASTER_INSTANCE_TYPE = cc1.4xlarge
MASTER_IMAGE_ID= ami-7621f91f
NODE_INSTANCE_TYPE = cc2.8xlarge
NODE_IMAGE_ID= ami-7621f91f
CLUSTER_SIZE= 8
VOLUMES= rdata
PLUGINS= pkginstaller
SPOT_BID= 1.00
- सेटअप साझा मात्रा यहीं स्क्रीन/byoubu लॉग, मुख्य .R स्क्रिप्ट चौकी उत्पादन, साझा अनुसंधान डेटा, और उत्पादन पैकेज के लिए स्रोत रहते हैं। निर्यात के नाम से बचने वाले बच्चे के रास्ते में नई फाइलों के लिए इसकी निगरानी की गई थी, ताकि क्लस्टर या कंट्रोल स्क्रिप्ट की अधिकतम संख्या में रिकॉर्ड्स की मृत्यु हो गई हो या जो भी खो जाए, वह सब खो जाएंगे और फिर से गणना की आवश्यकता होगी।
साझा मात्रा बनाने के बाद, परिभाषा बस गया था:
[volume rdata]
VOLUME_ID = vol-1145497c
MOUNT_PATH = /rdata
पैकेज संस्थापक जो सभी नोड्स पर नवीनतम (और समान) आर संस्करणों सुनिश्चित किया।
[plugin pkginstaller]
setup_class = starcluster.plugins.pkginstaller.PackageInstaller
packages = r-base, r-base-dev, r-recommended
अंततः दोनों ssh और RStudio सर्वर के लिए पहुँच अनुमतियाँ। प्रॉक्सी के माध्यम से https सुरक्षित होगा, लेकिन RStudio के बाद से ही कंट्रोल स्क्रिप्ट सेटअप के लिए इस्तेमाल किया गया था ...
[permission ssh]
# protocol can be: tcp, udp, or icmp
protocol = tcp
from_port = 22
to_port = 22
# [permission http]
protocol = tcp
from_port = 8787
to_port = 8787
फिर एक क्लस्टर StarCluster इंटरफ़ेस का उपयोग कर प्रारंभ करेंगे। यह उपयोग नियंत्रण, सिस्टम के नाम, शेयरों, आदि के सभी संभालती है ... एक बार क्लस्टर चल रहा था मैं अपने स्थानीय सिस्टम से प्रत्येक में एक ssh सत्र भाग गया, और हाइपर-थ्रेडिंग को रोकने के लिए एक स्क्रिप्ट चलाने:
#!/bin/sh
# disable hyperthreading
for cpunum in $(
cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
cut -s -d, -f2- | tr ',' '\n' | sort -un); do
echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
done
ने निर्यात किए गए चेकपॉइंट लॉग के खिलाफ स्केलेबिलिटी की निगरानी के लिए प्रत्येक पर एक हॉप सत्र शुरू किया।
फिर, मास्टर में लॉग इन किया, एक स्क्रीन सत्र शुरू किया (मैंने तब से बायोबू पसंद किया है) और स्टारक्लस्टर घुड़सवार वॉल्यूम के भीतर आर को निकाल दिया। इस तरह जब क्लस्टर फिर किसी कारण आसानी से मैं कर सकता सेटअप के लिए बंद कर दिया बस आर शुरू करने से एक बार आर में पहली बात nodeXXX
नाम, जो केवल की तर्ज पर कुछ था का उपयोग कर एक workers.list
चर बनाने के लिए किया गया था:
cluster.nodes <- c("localhost", paste("node00", 1:7, sep=''))
workers.list <- rep(cluster.nodes, 8)
फिर मैंने नियंत्रण स्क्रिप्ट को लोड किया, कार्यक्षेत्र छोड़ दिया और सहेजा। नियंत्रण स्क्रिप्ट ने उत्पादन पैकेज में निर्यात और चेकपॉइंट्स और पैरा लिपटे कॉल के लिए सभी टेबल आउटपुट को संभाला। लिपि के मुख्य कार्य में cpus
तर्क भी लिया गया जहां मजदूरों की सूची रखी गई थी, जिसे क्लस्टर प्रारंभकर्ता को cores
के रूप में पारित किया गया था।
initialize.cluster <- function(cores)
{
if(exists('cl')) stopCluster(cl)
print("Creating Cluster")
cl <- makePSOCKcluster(cores)
print("Cluster created.")
assign('cl', cl, envir=.GlobalEnv)
print(cl)
# All workers need to have the bounds generator functions...
clusterEvalQ(cl, require('scoreTarget'))
# All workers need to have the production script and package.
clusterExport(cl, varlist=list('RScoreTarget', 'scoreTarget'))
return (cl)
}
एक बार आर सत्र दोबारा शुरू किए जाने (शुरू worker.list बनाने के बाद) नियंत्रण लिपि sourced गया था, और मुख्य समारोह कहा जाता है। वह यह था। इस सेटअप के साथ, अगर क्लस्टर कभी बंद हो गया, तो मैं मुख्य मेजबान पर रियायत छोड़ दूंगा; दास प्रक्रियाओं को प्रत्येक दासों और स्टार्टअप पर फिर से रोकें।
यहाँ कार्रवाई ::
R
R version 2.15.0 (2012-03-30)
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
[Previously saved workspace restored]
> source('/rdata/buildSatisfactionRangeTable.R')
Loading required package: data.table
data.table 1.7.7 For help type: help("data.table")
Loading required package: parallel
Loading required package: scoreTarget
Loading required package: Rcpp
> ls()
[1] "build.satisfaction.range.table" "initialize.cluster"
[3] "initialize.table" "parallel.choices.threshold"
[5] "rolled.lower" "rolled.upper"
[7] "RScoreTarget" "satisfaction.range.table"
[9] "satisfaction.search.targets" "search.range.bound.offsets"
[11] "search.range.bounds" "search.range.center"
[13] "Search.Satisfaction.Range" "update.bound.offset"
[15] "workers.list"
> workers.list
[1] "localhost" "localhost" "localhost" "localhost" "localhost" "localhost"
[7] "localhost" "localhost" "node001" "node002" "node003" "node004"
[13] "node005" "node006" "node007" "node001" "node002" "node003"
[19] "node004" "node005" "node006" "node007" "node001" "node002"
[25] "node003" "node004" "node005" "node006" "node007" "node001"
[31] "node002" "node003" "node004" "node005" "node006" "node007"
[37] "node001" "node002" "node003" "node004" "node005" "node006"
[43] "node007" "node001" "node002" "node003" "node004" "node005"
[49] "node006" "node007" "node001" "node002" "node003" "node004"
[55] "node005" "node006" "node007" "node001" "node002" "node003"
[61] "node004" "node005" "node006" "node007" "node001" "node002"
[67] "node003" "node004" "node005" "node006" "node007" "node001"
[73] "node002" "node003" "node004" "node005" "node006" "node007"
[79] "node001" "node002" "node003" "node004" "node005" "node006"
[85] "node007" "node001" "node002" "node003" "node004" "node005"
[91] "node006" "node007" "node001" "node002" "node003" "node004"
[97] "node005" "node006" "node007" "node001" "node002" "node003"
[103] "node004" "node005" "node006" "node007" "node001" "node002"
[109] "node003" "node004" "node005" "node006" "node007" "node001"
[115] "node002" "node003" "node004" "node005" "node006" "node007"
> build.satisfaction.range.table(500000, FALSE, workers.list)
[1] "Creating Cluster"
[1] "Cluster created."
socket cluster with 120 nodes on hosts ‘localhost’, ‘node001’, ‘node002’, ‘node003’, ‘node004’, ‘node005’, ‘node006’, ‘node007’
Parallel threshold set to: 11000
Starting at: 2 running to: 5e+05 :: Sat Apr 14 22:21:05 2012
तुम यहाँ के लिए नीचे पढ़ लिया है, तो आप को पता है कि मुझे लगता है मैं (openmpi सहित) कर सकता है प्रत्येक क्लस्टर सेटअप का परीक्षण दिलचस्पी हो सकती है और इसे का एक उदाहरण है पाया कि गति अंतर नहीं था, शायद ऐसा इसलिए है क्योंकि मेरी गणना जहां सीपीयू बाध्य है, शायद नहीं।
इसके अलावा, हार न दें, भले ही यह एचपीसी के साथ जाने का दर्द हो। यह पूरी तरह से लायक हो सकता है। मैं अभी भी उन गणनाओं के पहले 100,000 पुनरावृत्तियों को पूरा करने का इंतजार कर रहा हूं जो मैं चला रहा था, मैंने कमोडिटी वर्कस्टेशन पर आधार-आर में एक निष्पक्ष कार्यान्वयन के साथ अटक गया था (ठीक है, वास्तव में नहीं, जैसा कि मैंने कभी आर: डी के साथ फंस नहीं लिया होगा)। क्लस्टर के साथ, एक सप्ताह के भीतर 384,000 पुनरावृत्तियों को पूरा किया गया। सेटअप करने के लिए पूरी तरह से समय के लायक (और इसमें बहुत कुछ लिया गया)।
ध्वनि जैसे आप अपनी मशीनें एसएसएच अनुमति नहीं दे रहे हैं। Http://www.youtube.com/watch?v=YfCgK1bmCjw पर एक नज़र डालें (00:06:43) – JohnRos