2011-06-29 13 views
1

私はこのメソッドを使いましたが、ハイブの完了したジョブ(例:eventListener!)を外挿する方法を見つけることができません。助けてください!編集 - 私はあなたがクライアントから(私がマッピングされたので、私は50%完成しました)得ることができると思っていました(私がコマンドを上書きするコマンドを提出したならば)。 Briskを持つOpsCenter(Datastaxによる)はこれを非常に行います。Hive - JobTracking?

import java.util.List; 

import org.apache.hadoop.hive.metastore.api.MetaException; 
import org.apache.hadoop.hive.service.HiveServerException; 
import org.apache.hadoop.hive.service.ThriftHive; 
import org.apache.hadoop.hive.service.ThriftHive.Client; 
import org.apache.thrift.TException; 
import org.apache.thrift.protocol.TBinaryProtocol; 
import org.apache.thrift.transport.TSocket; 

public class Hive { 

    static Client client; 
    static TSocket transport; 

    public static void main(String args[]) throws HiveServerException, 
      TException, MetaException { 

     transport = new TSocket("hiveserver", 
       10000); 
     transport.setTimeout(999999999); 

     TBinaryProtocol protocol = new TBinaryProtocol(transport); 
     client = new ThriftHive.Client(protocol); 
     transport.open(); 

     System.out.println("Starting map job..."); 

     Thread mapReduceThread = new Thread(new HiveQuery(
       "SELECT COUNT(*) FROM myHiveTable")); 
     mapReduceThread.start(); 

     System.out.println("Waiting on map..."); 
    } 

    private static class HiveQuery implements Runnable { 

     private String hql; 

     public HiveQuery(String hql) { 
      this.setHql(hql); 
     } 

     public void run() { 
      long start = System.currentTimeMillis(); 

      // Blocking 
      try { 
       client.execute(this.getHql()); 
      } catch (HiveServerException e) { 
       e.printStackTrace(); 
      } catch (TException e) { 
       e.printStackTrace(); 
      } 

      List<String> responseList = null; 
      try { 
       responseList = client.fetchAll(); 
      } catch (HiveServerException e) { 
       e.printStackTrace(); 
      } catch (TException e) { 
       e.printStackTrace(); 
      } 

      long elapsedTimeMillis = System.currentTimeMillis() - start; 
      float elapsedTime = elapsedTimeMillis/1000F; 

      System.out.println("Job took: " + elapsedTime + " seconds"); 

      for (String response : responseList) { 
       System.out.println("Response: " + response); 
      } 

      transport.close(); 
      System.out.println("Closed transport"); 
      System.exit(0); 
     } 

     public void setHql(String hql) { 
      this.hql = hql; 
     } 

     public String getHql() { 
      return hql; 
     } 
    } 

} 
+0

クエリ自体がブロックされているため、ジョブに関する詳細情報を取得する方法があるかどうかはわかりません。あなたはハイブからより多くの情報を得ることができましたか?私はjobIdとおそらく%stuffを探しています。 – xinit

答えて

0

外挿法とはどういう意味ですか?

Hadoopで%完成した人物で推測できるとは思えませんが、それが上がったらもっと多くの仕事が起こったという事実を除きます。 「ああ、それは20秒残っている」とか、そういうことは言えません。

+0

私はあなたが "私はマッピングが完了しているので、それで50%完成しました"と思っていました。 OpsCenter/Brisk for Cassandraがこれを行います。 –

+0

これはおそらく私が最初に述べたはずのものです:) –