Hadoop 蜂巢作业跟踪?

Hadoop 蜂巢作业跟踪?,hadoop,mapreduce,thrift,hive,Hadoop,Mapreduce,Thrift,Hive,我已经通过了这些方法,但我似乎不知道如何推断Hive中作业的完成百分比(比如eventListener!)。请帮忙!编辑-我想您可以从客户端获得“我已完成映射…因此我已完成50%”(如果我已提交覆盖外部表的命令)。OpsCenter with Brisk(由Datastax提供)正是这样做的 import java.util.List; import org.apache.hadoop.hive.metastore.api.MetaException; import org.apache.ha

我已经通过了这些方法,但我似乎不知道如何推断Hive中作业的完成百分比(比如eventListener!)。请帮忙!编辑-我想您可以从客户端获得“我已完成映射…因此我已完成50%”(如果我已提交覆盖外部表的命令)。OpsCenter with Brisk(由Datastax提供)正是这样做的

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;
        }
    }

}
import java.util.List;
导入org.apache.hadoop.hive.metastore.api.MetaException;
导入org.apache.hadoop.hive.service.HiveServerException;
导入org.apache.hadoop.hive.service.ThriftHive;
导入org.apache.hadoop.hive.service.ThriftHive.Client;
导入org.apache.thrift.TException;
导入org.apache.thrift.protocol.TBinaryProtocol;
导入org.apache.thrift.transport.TSocket;
公共类蜂箱{
静态客户端;
静态TSocket传输;
公共静态void main(字符串args[])引发HiveServerException,
元异常{
传输=新的TSocket(“hiveserver”,
10000);
传输设置超时(999999999);
TBinaryProtocol协议=新的TBinaryProtocol(传输);
客户端=新的ThriftHive.client(协议);
transport.open();
System.out.println(“启动地图作业…”);
Thread mapReduceThread=新线程(新HiveQuery(
“从myHiveTable中选择计数(*”);
mapReduceThread.start();
System.out.println(“等待地图…”);
}
私有静态类HiveQuery实现可运行{
私有字符串hql;
公共HiveQuery(字符串hql){
这个.setHql(hql);
}
公开募捐{
长启动=System.currentTimeMillis();
//阻塞
试一试{
client.execute(this.getHql());
}捕获(HiveServer异常){
e、 printStackTrace();
}捕获(特克斯){
e、 printStackTrace();
}
列表响应列表=null;
试一试{
responseList=client.fetchAll();
}捕获(HiveServer异常){
e、 printStackTrace();
}捕获(特克斯){
e、 printStackTrace();
}
long-elapsedTimeMillis=System.currentTimeMillis()-开始;
浮点数elapsedTime=elapsedTimeMillis/1000F;
System.out.println(“作业耗时:+elapsedTime+“秒”);
for(字符串响应:responseList){
System.out.println(“响应:+Response”);
}
transport.close();
系统输出打印(“封闭式运输”);
系统出口(0);
}
公共void setHql(字符串hql){
this.hql=hql;
}
公共字符串getHql(){
返回hql;
}
}
}

你所说的外推是什么意思


我不认为你可以通过Hadoop中的完成百分比来推断出任何东西,除了这样一个事实:如果它上升,那么会发生更多的工作。你不能说“哦,那意味着我还有20秒”或诸如此类的话。

我想你可以从中得到“我完成了映射…所以我完成了50%”。OpsCenter/Brisk for Cassandra就是这样做的。这可能是我本来应该说的:)因为查询本身被阻塞了,我不确定是否有办法获得更多的工作信息。您能从hive获得更多信息吗?我在找jobId可能还有%的东西。。