4-х профильное исчисление большого графа с Apache Giraph - PullRequest
0 голосов
/ 08 декабря 2018

для моей магистерской диссертации по информатике мне удалось реализовать исчисление из 4 профилей (https://arxiv.org/abs/1510.02215) с использованием giraph-1.3.0-snapshot (скомпилировано с профилем -Phadoop_yarn) и hadoop-2.8.4.

Я сконфигурировал кластер на amazon ec2, состоящий из 1 наменода и 5 датододов, используя экземпляры t2.2xlarge (32GB, 8CPU), и получил результаты, описанные здесь с входными графиками малых / средних измерений.*

Если я пытаюсь ввести в свою программу giraph входные графы большего размера (например, например, http://snap.stanford.edu/data/web-NotreDame.html), в некоторых случаях я получаю много ошибок, связанных с нетти и приложением пряжи FAILS, в других случаях приложение пряжи остаетсяв состоянии RUNNING UNDEFINED (затем я убил его вместо ожидания тайм-аута по умолчанию) без видимых ошибок. Я также пытался использовать m5.4xlarge (64GB, 16CPU), но у меня возникли те же проблемы. Я сообщил об ошибках журнала первого случая здесь:

  • журнал ошибок работника giraph на вставленных здесь датододах: https://pastebin.com/CGHUd0za (одинаковые ошибки во всех датододах)
  • журнал ошибок мастера giraph, вставленный сюда: https://pastebin.com/JXYN6y4L

Я совершенно уверен, что ошибки не связаны с недостаточной памятью экземпляров EC2, потому что в журнале я всегда видел сообщениякак "(бесплатно / всего / макс.) = 23038,28M / 27232,00M / 27232,00M". Пожалуйста, помогите мне, потому что моя магистерская работа заблокирована с этой проблемой: - (

Это пример команды, которую я использовал для запуска giraph, не могли бы вы проверить, если параметры, которые я использовалправильно? Любая другая настройка приветствуется!

giraph 4Profiles-0.0.1-SNAPSHOT.jar it.uniroma1.di.fourprofiles.worker.superstep0.gas1.Worker_Superstep0_GAS1 
-ca giraph.numComputeThreads=8 // Since t2.2xlarge has 8 CORES, is it correct to set these parameters to 8? 
-ca giraph.numInputThreads=8 
-ca giraph.numOutputThreads=8 

-w 8 // I set 8 workers since:
     // - 5 datanodes on EC2"
     // - every datanode configured for max 2 containers in order to reduce messages between datanodes
     // - 2 containers are reserved for application master and giraph master
     // - (5 datanodes * 2 max containers) - 2 reserved = 8 workers
     // Is it correct as reasoning?

-yh 15360 // I set 15360 since it corresponds to 
          // - yarn.scheduler.minimum-allocation-mb property in yarn-site.xml
          // - mapreduce.map.memory.mb property in mapred-site.xml
          // Is it correct as reasoning?

-ca giraph.pure.yarn.job=true 
-mc it.uniroma1.di.fourprofiles.master.Master_FourProfiles 
-ca io.edge.reverse.duplicator=true 
-eif it.uniroma1.di.fourprofiles.io.format.IntEdgeData_TextEdgeInputFormat_ReverseEdgeDuplicator 
-eip INPUT_GRAPHS/HU_edges.txt-processed 
-vof org.apache.giraph.io.formats.IdWithValueTextOutputFormat 
-op output 
-ca giraph.SplitMasterWorker=true 
-ca giraph.messageCombinerClass=it.uniroma1.di.fourprofiles.worker.msgcombiner.Worker_MsgCombiner 
-ca giraph.master.observers=it.uniroma1.di.fourprofiles.master.observer.Observer_FourProfiles 
-ca giraph.metrics.enable=true 
-ca giraph.useInputSplitLocality=false 
-ca giraph.useBigDataIOForMessages=true 
-ca giraph.useMessageSizeEncoding=true 
-ca giraph.oneToAllMsgSending=true 
-ca giraph.isStaticGraph=true

Кроме того, я пытался использовать следующие параметры netty, но я не решил проблемы. Не могли бы вы помочь мне, если я пропущу какой-то важный параметр или, возможно, я использовалэто неправильно? Я попытался обобщить значение, передаваемое параметрам netty, с помощью тривиальной формулы nettyFactor * defaultValue, где nettyFactor может быть 1, 2, 3, ... (передается параметром оболочки)

-ca giraph.nettyAutoRead=true 
-ca giraph.channelsPerServer=$((nettyFactor*1)) 
-ca giraph.nettyClientThreads=$((nettyFactor*4)) 
-ca giraph.nettyClientExecutionThreads=$((nettyFactor*8)) 
-ca giraph.nettyServerThreads=$((nettyFactor*16)) 
-ca giraph.nettyServerExecutionThreads=$((nettyFactor*8)) 
-ca giraph.clientSendBufferSize=$((nettyFactor*524288)) 
-ca giraph.clientReceiveBufferSize=$((nettyFactor*32768)) 
-ca giraph.serverSendBufferSize=$((nettyFactor*32768)) 
-ca giraph.serverReceiveBufferSize=$((nettyFactor*524288)) 
-ca giraph.vertexRequestSize=$((nettyFactor*524288)) 
-ca giraph.edgeRequestSize=$((nettyFactor*524288)) 
-ca giraph.msgRequestSize=$((nettyFactor*524288)) 
-ca giraph.nettyRequestEncoderBufferSize=$((nettyFactor*32768)) 

... У меня есть другие вопросы: 1) Это моя конфигурация hadoop .Пожалуйста, проверьте это, но я совершенно уверен, что это правильно.У меня есть только вопрос по этому поводу: так как giraph не использует «Reduce», правильно ли давать 0 МБ mapreduce.reduce.memory.mb в mapred-site.xml?

2) Для того, чтобыизбежать ошибки ClassNotFoundException Я скопировал jar моего приложения giraph и все jiraph-файлы из $ GIRAPH_HOME и $ GIRAPH_HOME / lib в $ HADOOP_HOME / share / hadoop / yarn / lib.Есть ли лучшее решение?

3) Последнее, но не менее важное: Здесь вы можете найти заполненный журнал hadoop / yarn моей программы giraph со следующим графиком http://snap.stanford.edu/data/web-NotreDame.html в качестве входных данных,В этом случае применение пряжи превращается в состояние RUNNING UNDEFINED.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...