2015-08-03 15 views
7

tutti. Ho provato a fare riferimento al mio jar aziendale in Flink in modo da copiarlo in $ FLINK/lib in tutti i task manager, ma non è riuscito. E non voglio impacchettare un barattolo di grasso, che è troppo pesante e inutile. Penso che anche il primo metodo non sia una buona idea, perché devo gestire i jar in tutto il cluster. Qualcuno sa come risolvere questo problema? Qualsiasi suggerimento sarebbe apprezzato.Come fare riferimento al vaso esterno in Flink

risposta

10

In generale, la costruzione di un barattolo di grasso è la soluzione migliore. Non sei sicuro di quanto sarà grande il tuo barattolo lontano, che pensi sia "troppo pesante"?

La copia di vasi su $FLINK/lib dovrebbe funzionare. Tuttavia, è necessario riavviare Flink in modo tale che i jar vengano aggiunti al classpath di Flink. Pertanto, questo approccio non consente di aggiungere dinamicamente i jar, ma dovrebbe funzionare per un gruppo di giare stabili.

Per gestire i file jar nell'intero cluster, potrebbe essere utile utilizzare una cartella NFS come $FLINK/lib per mantenere tutti i Task Manager sincronizzati. O semplicemente scrivi uno script bash per distribuire i tuoi vasi.

+0

Grazie! La tua risposta mi aiuta davvero! Ho riavviato Flink e tutto ha funzionato. E devo ammettere che costruire un barattolo di grasso è il modo migliore per andare. Grazie mille! – zhangshengxiong

0

L'interfaccia a riga di comando (CLI) di Flink consente il passaggio di percorsi di posizione jar aggiuntivi utilizzando l'opzione -C. Lo usiamo per passare le dipendenze ad ogni lavoro.

Il nostro problema: Dato che di solito il nostro lavoro si evolvono durante l'intero ciclo di vita del progetto e che le loro dipendenze esterne cambiano le loro versioni e che si corre più processi nello stesso cluster, abbiamo voluto selezionare le versioni esatte jar da caricare in ogni seduta . Pertanto, la directory $ FLINK/lib non era abbastanza per noi.

Dettagli: ciò che facciamo è distribuire i jar in una directory fissa (diversa da $ FLINK/lib) su ogni nodo. In seguito useremo la CLI per iniziare il lavoro (non direttamente poiché la chiamata è piuttosto lunga, ma usando uno script bash per abbreviare la chiamata).

0

Se si desidera evitare il conflitto di dipendenze, non copiare i propri vasi su $ {FLINK_LIB}/lib. Se si utilizza il cluster di filato come master, è possibile utilizzare -yt (- yarn-ship), copia i jar su hdf e come classpath del programma distribuito.

Problemi correlati