2016-06-09 3 views
0

Ich versuche, eine Open Source nämlich BlazingCache http://blazingcache.org/ zu verwenden, um eine Coordinator-Cache-Idee für meine Anwendung zu implementieren.Verwendung von BlazingCache Open Source in Hadoop verschlechtert die Leistung

Also verwende ich WordCount Beispiel, um diese Cache-Bibliothek zu testen. Hier ist mein ganzer Code:

public class WordCount2 { 

    public static class TokenizerMapper 
     extends Mapper<Object, Text, Text, IntWritable>{ 

    //... 
    private static Cache<String, String> cache; 
    @Override 
    public void setup(Context context) throws IOException, 
     InterruptedException { 
     //... 
     initCache(); 
    } 

    private void initCache() { 
     CachingProvider provider = Caching.getCachingProvider(); 
     Properties properties = new Properties(); 
     properties.put("blazingcache.mode","clustered");   
     properties.put("blazingcache.zookeeper.connectstring","localhost:1281"); 
     properties.put("blazingcache.zookeeper.sessiontimeout","40000");   
     properties.put("blazingcache.zookeeper.path","/blazingcache");   
     CacheManager cacheManager = provider.getCacheManager(provider.getDefaultURI(), provider.getDefaultClassLoader(), properties); 
     MutableConfiguration<String, String> cacheConfiguration = new MutableConfiguration<>(); 
     cache = cacheManager.createCache("example", cacheConfiguration); 
    } 

    @Override 
    public void map(Object key, Text value, Context context 
        ) throws IOException, InterruptedException { 
     //... 
     cache.put(word.toString(), one.toString()); 
     } 
    } 
    } 

    //... 
} 

Das Problem an der Linie ist:

cache.put(word.toString(), one.toString()); 

in Map-Funktion.

Wenn diese Zeile in den Code eingefügt wird, verschlechtert sich die Leistung des gesamten Jobs plötzlich. (Ich verwende Eclipse, um das WordCount-Beispiel im lokalen Modus auszuführen).
Warum passiert das und wie kann ich es beheben?

Antwort

0

Ich bin mir nicht sicher, was die Ursache Ihres Problems ist, können Sie versuchen, Ihre Protokolle zu überprüfen und suchen Sie nach "Verbindungsereignissen" und Ausnahmen in lazzingcache.xxx Loggern.

Bitte beachten Sie, dass ein Cache.put eventuell andere Clients benachrichtigen muss, die eine Kopie der Daten hosten, und dies ist eine Netzwerkoperation. In solchen MapReduce-Jobs ist es möglich, dass viele Clients einen Verweis auf dasselbe "Wort" haben. Denken Sie daran, den CacheManager zu schließen, da jeder CacheManager einen CacheClient erstellt und Ressourcen und Benachrichtigungen erhält.

Wenn der zugrunde liegende CacheClient im getrennten Modus arbeitet, kann er langsamer werden, da er ohne Verbindung zum Cache-Server die Konsistenz des Caches nicht garantieren kann und so lange Zeit für eine Verbindung gerüstet ist.

ich Ihnen Fall wiedergegeben haben, müssen Sie diese Zeilen bearbeiten:

1) Sie müssen „erstellen“, um den Cache nur einmal

try { 
    cache = cacheManager.createCache("example", cacheConfiguration); 
} catch (CacheException alreadyCreated) {     
} 
cache = cacheManager.getCache("example"); 

2) keine statische Bezug auf die Verwendung Cache 3) entfernen Sie die Zeile, die der Beispielcode läuft sehr gut mit diesen Änderungen

properties.put("blazingcache.mode", "clustered"); 

Entdeckung von Cache-Servern ermöglicht.

Wenn Sie im echten Cluster-Modus laufen wollen, müssen Sie einen Zookkeeper-Cluster und mindestens einen lazingcache-Server starten. Ohne zookeeper bekomme ich diese Fehlerschleife:

16/07/08 13:26:14 INFO zookeeper.ClientCnxn: Öffnungs Socket-Verbindung zum Server localhost.localdomain/127.0.0.1: 1281. Will nicht versuchen, authentifizieren mit SASL (unbekannter Fehler) 16/07/08 13:26:14 WARN zookeeper.ClientCnxn: Sitzung 0x0 für Server Null, unerwarteten Fehler, Schließen Socket-Verbindung und versucht, erneut verbinden java.net.ConnectException : Connessione rifiutata bei sun.nio.ch.SocketChannelImpl.checkConnect (native Methode) bei sun.nio.ch.SocketChannelImpl.finishConnect (SocketChannelImpl.java:717) bei org.apache.zookeeper.ClientCnxnSocketNIO.doTransport (ClientCnxnSocketNIO .java: 361) um org.apache.zookeeper.ClientCnxn $ SendThread.run (ClientCnxn.java: 1081) 16/07/08 13:26:15 INFO mapreduce.Job: Job job_local7226039_0001 läuft im Uber-Modus: falsch 16/07/08 13:26:15 INFO mapreduce.Job: Karte 0% reduzieren 0 % 16/07/08 13:26:16 INFO zookeeper.ClientCnxn: Öffnen Socket-Verbindung zum Server localhost.localdomain/127.0.0.1: 1281. mit SASL (unbekannter Fehler) zu authentifizieren 16.07.08 13.26.16 wird nicht versuchen WARN zookeeper.ClientCnxn: Session 0x0 für Server null, unerwarteter Fehler, Socket-Verbindung zu schließen und versuchen, wieder

Sie sollten

bei blazingcache Unterstützung Mailinglisten um Hilfe bitten
+0

Dank Ihre Antwort! – nd07

0

Wenn Sie im lokalen Modus zu testen sind (Einzel JVM), die ist besser, diese Zeilen zu entfernen, und versuchen Sie es erneut:

properties.put("blazingcache.mode","clustered");   
properties.put("blazingcache.zookeeper.connectstring","localhost:1281"); 
properties.put("blazingcache.zookeeper.sessiontimeout","40000");   
properties.put("blazingcache.zookeeper.path","/blazingcache");