2016-10-12 6 views
0

kann jeder muß erklären, wie regionCoprocessor Trog laden shell.i nicht korrekte Informationen über das Laden bekommen können und Coprocessor.Thanks im VorausWie für Schritt Coprozessor Schritt zum Laden

+0

Sorry, Sie haben in Shell gefragt, ich antwortete für Java. Verpasste das Wort "Shell". Wie auch immer, könnte hilfreich für jemand anderen sein .. Ich bin mir nicht sicher auf Shell. Habe noch nie wirklich intensiv an HBase-Shell gearbeitet – Mallikarjun

Antwort

1

Bitte gehen Sie folgendermaßen bereitstellen:

Schritt 1: eine Schnittstelle erstellen und org.apache.hadoop.hbase.ipc.CoprocessorProtocol

Schritt 2 erweitern: definieren Sie die Methode in der Schnittstelle, die Sie einmal Koprozessor Anruf ausführen möchten ist

gemacht

Schritt 3: eine Instanz von 4 Erstellen HTable

Schritt: Rufen Sie die HTable.coprocessorExec() Verfahren mit allen erforderlichen Parameter

finden Sie das folgende Beispiel:

Im Beispiel Wir versuchen, eine Liste von Studenten zu bekommen, deren Registrierungsnummer in einen Bereich fällt, der uns interessiert.

Erstellen von Schnittstellenprotokoll:

public interface CoprocessorTestProtocol extends org.apache.hadoop.hbase.ipc.CoprocessorProtocol{ 
    List<Student> getStudentList(byte[] startRegistrationNumber, byte[] endRegistrationNumber) throws IOException; 
} 

Probe-Studenten-Klasse:

public class Student implements Serializable{ 
    byte[] registrationNumber; 
    String name; 

    public void setRegistrationNumber(byte[] registrationNumber){ 
     this.registrationNumber = registrationNumber; 
    } 

    public byte[] getRegistrationNumber(){ 
     return this.registrationNumber; 
    } 

    public void setName(String name){ 
     this.name = name; 
    } 

    public int getName(){ 
     return this.name; 
    } 

    public String toString(){ 
     return "Student[ registration number = " + Bytes.toInt(this.getRegistrationNumber()) + " name = " + this.getName() + " ]" 
    } 
} 

Model-Klasse: [Wenn die Geschäftslogik Daten von HBase zu erhalten geschrieben]

public class MyModel extends org.apache.hadoop.hbase.coprocessor.BaseEndpointCoprocessor implements CoprocessorTestProtocol{ 

    @Override 
    List<Student> getStudentList(byte[] startRegistrationNumber, byte[] endRegistrationNumber){ 
     Scan scan = new Scan(); 
     scan.setStartRow(startRegistrationNumber); 
     scan.setStopRow(endRegistrationNumber); 

     InternalScanner scanner = ((RegionCoprocessorEnvironment) getEnvironment()).getRegion().getScanner(scan); 

     List<KeyValue> currentTempObj = new ArrayList<KeyValue>(); 
     List<Student> studentList = new ArrayList<Student>(); 

     try{ 
      Boolean hasNext = false; 
      Student student; 

      do{ 
       currentTempObj.clear(); 
       hasNext = scanner.next(currentTempObj); 

       if(!currentTempObj.isEmpty()){ 
        student = new Student(); 
        for(KeyValue keyValue: currentTempObj){ 
         bytes[] qualifier = keyValue.getQualifier(); 
         if(Arrays.equals(qualifier, Bytes.toBytes("registrationNumber"))) 
          student.setRegistrationNumber(keyValue.getValue()); 
         else if(Arrays.equals(qualifier, Bytes.toBytes("name"))) 
          student.setName(Bytes.toString(keyValue.getValue())); 
        } 
        StudentList.add(student); 
       } 
      }while(hasNext); 

     }catch (Exception e){ 
      // catch the exception the way you want 
     } 
     finally{ 
      scanner.close(); 
     } 
    } 
} 

Client-Klasse: [wo der Anruf an Koprozessor wird]

public class MyClient{ 

    if (args.length < 2) { 
     System.out.println("Usage : startRegistrationNumber endRegistrationNumber"); 
     return; 
    } 

    public List<Student> displayStudentInfo(int startRegistrationNumber, int endRegistrationNumber){ 
     final byte[] startKey=Bytes.toBytes(startRegistrationNumber); 
     final byte[] endKey=Bytes.toBytes(endRegistrationNumber); 


    String zkPeers = SystemInfo.getHBaseZkConnectString(); 
    Configuration configuration=HBaseConfiguration.create(); 
    configuration.set(HConstants.ZOOKEEPER_QUORUM, zkPeers); 

    HTableInterface table = new HTable(configuration, TABLE_NAME); 

     Map<byte[],List<Student>> allRegionOutput; 

     allRegionOutput = table.coprocessorExec(CoprocessorTestProtocol.class, startKey,endKey, 
       new Batch.Call<CoprocessorTestProtocol, List<Student>>() { 
      public List<Student> call(CoprocessorTestProtocol instance)throws IOException{ 
       return instance.getStudentList(startKey, endKey); 
      } 
     }); 

     table.close(); 

     List<Student> anotherList = new ArrayList<Student>(); 

     for (List<Student> studentData: allRegionOutput.values()){ 
      anotherList.addAll(studentData); 
     } 

     return anotherList; 
    } 

    public static void main(String args){ 

     if (args.length < 2) { 
      System.out.println("Usage : startRegistrationNumber endRegistrationNumber"); 
      return; 
     } 

     int startRegistrationNumber = args[0]; 
     int endRegistrationNumber = args[1]; 

     for (Student student : displayStudentInfo(startRegistrationNumber, endRegistrationNumber)){ 
      System.out.println(student); 
     } 
    } 
} 

Bitte beachten Sie: Bitte haben Sie einen besonderen Blick auf Scanner.next(Object) Methode im Beispiel. Dies gibt boolesch zurück und speichert das aktuelle Objekt in Object Argument

Verwandte Themen