ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alexantone...@apache.org
Subject [2/5] ambari git commit: AMBARI-10035. Hive View: Retrieve history from ATS (alexantonenko)
Date Thu, 12 Mar 2015 20:23:02 GMT
http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/routes/index/history-query/index.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/routes/index/history-query/index.js b/contrib/views/hive/src/main/resources/ui/hive-web/app/routes/index/history-query/index.js
index be5d1f9..5959938 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/routes/index/history-query/index.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/routes/index/history-query/index.js
@@ -18,6 +18,7 @@
 
 import Ember from 'ember';
 import constants from 'hive/utils/constants';
+import utils from 'hive/utils/functions';
 
 export default Ember.Route.extend({
   setupController: function (controller, model) {
@@ -28,10 +29,16 @@ export default Ember.Route.extend({
       subroute = existingTab.get('subroute');
     }
 
-    if (subroute) {
-      this.transitionTo(subroute, model);
+    // filter out hdfs jobs
+    if (utils.isInteger(model.get('id'))) {
+      if (subroute) {
+        this.transitionTo(subroute, model);
+      } else {
+        this.transitionTo(constants.namingConventions.subroutes.jobLogs, model);
+      }
     } else {
-      this.transitionTo(constants.namingConventions.subroutes.jobLogs, model);
+      this.transitionTo(constants.namingConventions.subroutes.historyQuery, model);
+      this.controllerFor(constants.namingConventions.routes.index).set('model', model);
     }
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/styles/app.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/styles/app.scss b/contrib/views/hive/src/main/resources/ui/hive-web/app/styles/app.scss
index 6a1d35c..7085c85 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/styles/app.scss
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/styles/app.scss
@@ -20,6 +20,7 @@
 
 $panel-background: #f5f5f5;
 $placeholder-color: #aaa;
+$border-color: #ddd;
 
 @-webkit-keyframes fadeIn {
   0% {opacity: 0;}
@@ -50,10 +51,23 @@ $placeholder-color: #aaa;
   -webkit-animation-name: fadeOut;
           animation-name: fadeOut;
 }
+
 #content {
   padding: 20px 0;
 }
 
+#index-content {
+  display: flex;
+}
+
+#visual-explain, #tez-ui {
+  position: absolute;
+  left: 0;
+  width: 0;
+  z-index: 99;
+  background: white;
+}
+
 #alerts-container {
   position: absolute;
   left: 15px;
@@ -78,7 +92,7 @@ aside  hr {
 }
 
 .toolbox {
-  margin-top: 15px;
+  margin: 15px 15px 0 0;
 
   insert-udfs {
     display: inline-block;
@@ -97,6 +111,10 @@ aside  hr {
   color: $placeholder-color;
 }
 
+.form-group {
+  margin-bottom: 0;
+}
+
 .secondary-row {
   background: $panel-background;
 }
@@ -109,12 +127,12 @@ aside  hr {
 }
 
 .CodeMirror {
-  border: 0 1px solid #ddd;
+  border: 0 1px solid $border-color;
 }
 
 .grip {
   height: 20px;
-  border: 0 1px 1px solid #ddd;
+  border: 0 1px 1px solid $border-color;
   background-color: $panel-background;
   color: #bbb;
   text-align: center;
@@ -133,19 +151,19 @@ aside  hr {
   background-color: white;
 }
 
-.Unknown {
+.UNKNOWN {
   color: gray;
 }
 
-.Running, .Pending, .Initialized, .fa-edit {
+.RUNNING, .PENDING, .INITIALIZED, .fa-edit {
   color: orange;
 }
 
-.Finished {
+.SUCCEEDED {
   color: green;
 }
 
-.Canceled, .Error {
+.CANCELED, .ERROR {
   color: red;
 }
 
@@ -153,7 +171,7 @@ dropdown .fa-remove {
   color: red;
 }
 
-.Closed {
+.CLOSED {
   color: blue;
 }
 
@@ -162,6 +180,35 @@ dropdown .fa-remove {
   padding-right: 0;
 }
 
+.main-content {
+  flex-grow: 1;
+}
+
+.query-menu {
+  margin-top: 57px;
+
+  span, popover {
+    cursor: pointer;
+    overflow: hidden;
+    display: block;
+    border-bottom: 1px solid $border-color;
+    padding: 10px;
+  }
+}
+
+.queries-icon {
+  font-size: 20px;
+
+  &.active {
+    color: #428bca;
+  }
+
+  &.text-icon {
+    font-size: 12px;
+    font-weight: 800;
+  }
+}
+
 .alert {
   margin-bottom: 5px;
   padding-bottom: 10px;
@@ -231,7 +278,7 @@ body {
   height: 36px;
   background: url("/img/spinner.gif");
   background-repeat: no-repeat;
-  margin: 0px auto;
+  margin: 0 auto;
 
   &.small {
     background-size: 20px;
@@ -257,25 +304,18 @@ body {
   padding-right: 0 !important;
 }
 
-.popover-right {
-  z-index: 92;
-  float: right;
-  position: relative;
-}
-
 .query-editor-panel .panel-body {
   position: relative;
+  padding-right: 0;
 }
-.settings-toggle {
+
+.settings-containers-toggle {
   position: absolute;
   top: 0;
   right: 25px;
   cursor: pointer;
 }
 
-.settings-toggle.active {
-  color: #428bca;
-}
 .settings-container {
   width: 100%;
   overflow-y: scroll;
@@ -286,8 +326,8 @@ body {
   position: absolute;
   padding: 0 15px;
   z-index: 1000;
-  border: 1px solid #ddd;
 
+  border: 1px solid $border-color;
   -webkit-animation-duration: .5s;
           animation-duration: .5s;
   -webkit-animation-fill-mode: both;
@@ -302,14 +342,25 @@ body {
 
 .setting {
   float: left;
-  margin: 0 10px 10px 0;
+  padding-right: 10px;
+  padding-top: 10px;
+
+  .input-group {
+    width: 100%;
+  }
+  .input-group-addon {
+    text-align: justify;
+    width: 50%;
+  }
 }
 
 .setting .remove {
   line-height: 30px;
-  margin-left: 10px;
   font-size: 18px;
   cursor: pointer;
+  position: absolute;
+  right: -5px;
+  top: -10px;
 }
 
 tabs {
@@ -320,8 +371,3 @@ tabs {
 tree-view ul li {
   padding-left: 10px;
 }
-
-.runOnTez {
-  float: right;
-  margin: 0
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/_typeahead-widget.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/_typeahead-widget.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/_typeahead-widget.hbs
new file mode 100644
index 0000000..4083ad6
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/_typeahead-widget.hbs
@@ -0,0 +1,17 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/popover-widget.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/popover-widget.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/popover-widget.hbs
index fee80c7..f7c6d9c 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/popover-widget.hbs
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/components/popover-widget.hbs
@@ -16,4 +16,4 @@
 * limitations under the License.
 }}
 
-<div class="hide"> {{yield}} </div>
+<span class="hide"> {{yield}} </span>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases-search-results.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases-search-results.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases-search-results.hbs
index 38f6b66..354d7bd 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases-search-results.hbs
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases-search-results.hbs
@@ -45,4 +45,4 @@
   </div>
 {{else}}
   <h4>{{t "labels.noTablesMatches"}} "{{tablesSearchTerm}}"</h4>
-{{/if}}
\ No newline at end of file
+{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases.hbs
index 115bd70..a0ce19f 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases.hbs
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/databases.hbs
@@ -21,8 +21,8 @@
 
     {{typeahead-widget
         content=model
-        optionValuePath="content.id"
-        optionLabelPath="content.name"
+        optionValuePath="id"
+        optionLabelPath="name"
         selection=selectedDatabase
     }}
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/history.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/history.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/history.hbs
index 22c2ff3..313a233 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/history.hbs
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/history.hbs
@@ -47,8 +47,8 @@
           {{item.title}}
         {{/link-to}}
         </td>
-        <td {{bind-attr class=item.status}}>{{item.status}}</td>
-        <td>{{date-binding item "dateSubmitted"}}</td>
+        <td {{bind-attr class=item.uppercaseStatus}}>{{all-uppercase item.status}}</td>
+        <td>{{date-binding item "dateSubmittedTimestamp"}}</td>
         <td>{{item.duration}}</td>
         <td>
           <a class="fa fa-expand pull-right"></a>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/index.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/index.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/index.hbs
index 622af66..b8d1d3b 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/index.hbs
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/index.hbs
@@ -16,67 +16,87 @@
 * limitations under the License.
 }}
 
-<aside class="col-md-3 col-xs-12 pull-left no-padding">
-  {{render 'databases'}}
-</aside>
+<div id="index-content">
+  <div class="main-content">
+    <aside class="col-md-3 col-xs-12 no-padding">
+      {{render 'databases'}}
+    </aside>
 
-<div class="col-md-9 col-xs 12 pull-left query-container">
+    <div class="col-md-9 col-xs-12 query-container">
+      {{render 'alerts'}}
 
-  {{render 'alerts'}}
-  {{#panel-widget headingTranslation="titles.query.editor" classNames="query-editor-panel"}}
-    {{#popover-widget classNames="fa fa-info-circle popover-right" titleTranslation="popover.queryEditorHelp.title" }}
-      <ul>
-        <li>{{t 'popover.queryEditorHelp.content.line1'}}</li>
-        <li>{{t 'popover.queryEditorHelp.content.line2'}}</li>
-        <li>{{t 'popover.queryEditorHelp.content.line3'}}</li>
-      </ul>
-    {{/popover-widget}}
+      {{#panel-widget headingTranslation="titles.query.editor" classNames="query-editor-panel"}}
+        {{render 'open-queries'}}
 
-    {{render 'open-queries'}}
+        <div class="toolbox">
+          <button type="button" class="btn btn-sm btn-success execute-query"
+                  {{bind-attr class="canExecute::disabled"}}
+                  {{action "executeQuery"}}>
+            {{t "buttons.execute"}}
+          </button>
+          <button type="button" class="btn btn-sm btn-default"
+                  {{bind-attr class="canExecute::disabled"}}
+                  {{action "explainQuery"}}>
+            {{t "buttons.explain"}}
+          </button>
+          <button type="button" class="btn btn-sm btn-default save-query-as" {{action "saveQuery"}}>{{t "buttons.saveAs"}}</button>
 
-    <div class="toolbox">
-      <button type="button" class="btn btn-sm btn-success execute-query"
-              {{bind-attr class="canExecute::disabled"}}
-              {{action "executeQuery"}}>
-        {{t "buttons.execute"}}
-      </button>
-      <button type="button" class="btn btn-sm btn-default"
-              {{bind-attr class="canExecute::disabled"}}
-              {{action "explainQuery"}}>
-        {{t "buttons.explain"}}
-      </button>
-      <button type="button" class="btn btn-sm btn-default save-query-as" {{action "saveQuery"}}>{{t "buttons.saveAs"}}</button>
+          {{render 'insert-udfs'}}
 
-      {{render 'insert-udfs'}}
+          <button type="button" class="btn btn-sm btn-primary  pull-right" {{action "addQuery"}}>{{t "buttons.newQuery"}}</button>
+        </div>
+      {{/panel-widget}}
 
-      <button type="button" class="btn btn-sm btn-primary  pull-right" {{action "addQuery"}}>{{t "buttons.newQuery"}}</button>
-    </div>
-  {{/panel-widget}}
-
-  {{#if queryParams}}
-    {{#panel-widget headingTranslation="titles.query.parameters"}}
-      <div class="form-horizontal">
-        {{#each param in queryParams}}
-          <div {{bind-attr class=":form-group param.value:has-success:has-error"}}>
-            <label class="col-sm-3 control-label">{{param.name}}</label>
-              <div class="col-sm-9">
-                {{input value=param.value placeholder="value" class="form-control"}}
+      {{#if queryParams}}
+        {{#panel-widget headingTranslation="titles.query.parameters"}}
+          <div class="form-horizontal">
+            {{#each param in queryParams}}
+              <div {{bind-attr class=":form-group param.value:has-success:has-error"}}>
+                <label class="col-sm-3 control-label">{{param.name}}</label>
+                  <div class="col-sm-9">
+                    {{input value=param.value placeholder="value" class="form-control"}}
+                  </div>
               </div>
+            {{/each}}
           </div>
-        {{/each}}
-      </div>
-    {{/panel-widget}}
+        {{/panel-widget}}
+      {{/if}}
+
+      {{#if displayJobTabs}}
+        {{#panel-widget headingTranslation="titles.query.process"
+                        isLoading=model.isRunning
+                        menuItems=downloadMenu
+                        menuHeadingTranslation="titles.download"
+                        classNames="query-process-results-panel"}}
+          {{#tabs-widget tabs=queryProcessTabs selectedTab=selectedQueryProcessTab}}
+            {{outlet}}
+          {{/tabs-widget}}
+        {{/panel-widget}}
+      {{/if}}
+    </div>
+  </div>
+
+  {{#if tezUI.showOverlay}}
+    {{render 'tez-ui'}}
   {{/if}}
 
-  {{#if displayJobTabs}}
-    {{#panel-widget headingTranslation="titles.query.process"
-                    isLoading=model.isRunning
-                    menuItems=downloadMenu
-                    menuHeadingTranslation="titles.download"
-                    classNames="query-process-results-panel"}}
-      {{#tabs-widget tabs=queryProcessTabs selectedTab=selectedQueryProcessTab}}
-        {{outlet}}
-      {{/tabs-widget}}
-    {{/panel-widget}}
+  {{#if visualExplain.showOverlay}}
+    {{render 'visual-explain'}}
   {{/if}}
+
+  <div class="query-menu">
+    {{#popover-widget classNames="fa fa-info-circle queries-icon" titleTranslation="popover.queryEditorHelp.title" }}
+      <ul>
+        <li>{{t 'popover.queryEditorHelp.content.line1'}}</li>
+        <li>{{t 'popover.queryEditorHelp.content.line2'}}</li>
+        <li>{{t 'popover.queryEditorHelp.content.line3'}}</li>
+      </ul>
+    {{/popover-widget}}
+
+    <span {{bind-attr class="settings.showOverlay:active :fa :fa-gear :queries-icon"}} {{action 'toggleOverlay' 'settings'}}></span>
+
+    <span {{bind-attr class="visualExplain.showOverlay:active :fa :fa-bar-chart :queries-icon"}} {{action 'toggleOverlay' 'visualExplain'}}></span>
+
+    <span {{bind-attr class="tezUI.showOverlay:active :queries-icon :text-icon"}} {{action 'toggleOverlay' 'tezUI'}}>TEZ</span>
+  </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/queries.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/queries.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/queries.hbs
index 6187dfe..692a462 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/queries.hbs
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/queries.hbs
@@ -41,38 +41,40 @@
   </thead>
   <tbody>
     {{#each query in this}}
-      <tr>
-        <td>
-          {{#link-to "index.savedQuery" query}}
-            {{query.shortQuery}}
-          {{/link-to}}
-        </td>
+      {{#unless query.isNew}}
+        <tr>
+          <td>
+            {{#link-to "index.savedQuery" query}}
+              {{query.shortQuery}}
+            {{/link-to}}
+          </td>
 
-        <td>
-          {{#link-to "index.savedQuery" query}}
-            {{query.title}}
-          {{/link-to}}
-        </td>
+          <td>
+            {{#link-to "index.savedQuery" query}}
+              {{query.title}}
+            {{/link-to}}
+          </td>
 
-        <td>{{query.dataBase}}</td>
+          <td>{{query.dataBase}}</td>
 
-        <td>{{query.owner}}</td>
+          <td>{{query.owner}}</td>
 
-        <td>
-          {{#unless query.isNew}}
-            <div class="btn-group pull-right">
-              <span data-toggle="dropdown">
-                <a class="fa fa-gear"></a>
-              </span>
-              <ul class="dropdown-menu" role="menu">
-                {{#each link in controller.links}}
-                  <li {{action 'executeAction' link query}}><a>{{tb-helper link}}</a></li>
-                {{/each}}
-              </ul>
-            </div>
-          {{/unless}}
-        </td>
-      </tr>
+          <td>
+            {{#unless query.isNew}}
+              <div class="btn-group pull-right">
+                <span data-toggle="dropdown">
+                  <a class="fa fa-gear"></a>
+                </span>
+                <ul class="dropdown-menu" role="menu">
+                  {{#each link in controller.links}}
+                    <li {{action 'executeAction' link query}}><a>{{tb-helper link}}</a></li>
+                  {{/each}}
+                </ul>
+              </div>
+            {{/unless}}
+          </td>
+        </tr>
+      {{/unless}}
     {{/each}}
   </tbody>
 </table>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/settings.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/settings.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/settings.hbs
index 15741802..791b7d0 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/settings.hbs
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/settings.hbs
@@ -16,37 +16,44 @@
 * limitations under the License.
 }}
 
-<span {{bind-attr class="showSettingsOverlay:active :fa :fa-gear :settings-toggle"}} {{action 'toggleOverlay'}}></span>
+{{#if showOverlay}}
+  <div class="settings-container fadeIn">
+    <h3> Settings
+      <button class="btn btn-success btn-xs" {{action 'add'}}><i class="fa fa-plus"></i> Add</button>
+    </h3>
 
-{{#if showSettingsOverlay}}
-<div class="settings-container fadeIn">
-  <h3>Settings
-    <button class="btn btn-success btn-xs" {{action 'add'}}><i class="fa fa-plus"></i> Add</button>
+    {{#each setting in currentSettings.settings}}
+      <div class="setting col-md-6 col-sm-12">
+        <form>
+          <div class="form-group">
+            <div class="input-group">
+              <div class="input-group-addon">
+                {{typeahead-widget
+                    content=predefinedSettings
+                    optionLabelPath="name"
+                    optionValuePath="name"
+                    selection=setting.key
+                    create="addKey"
+                }}
+              </div>
+              <div {{bind-attr class=":input-group-addon setting.valid::has-error"}}>
 
-    <div class="checkbox btn btn-primary btn-xs runOnTez">
-        <label for="runOnTez">
-          {{input type="checkbox" checked=querySettings.runOnTez id="runOnTez"}} {{t "buttons.runOnTez"}}
-        </label>
-    </div>
-  </h3>
+                {{#if setting.key.values}}
+                  {{select-widget items=setting.key.values
+                                  labelPath="value"
+                                  selectedValue=setting.selection
+                                  defaultLabelTranslation="placeholders.select.value"
+                  }}
+                {{else}}
+                  {{input class="input-sm form-control" placeholderTranslation="placeholders.select.value" value=setting.selection.value}}
+                {{/if}}
 
-  {{#each setting in querySettings.settings}}
-    <div class="setting">
-      <form class="form-inline">
-        <div class="form-group">
-          <div class="input-group">
-            <div class="input-group-addon">
-              {{input class="input-sm form-control" placeholder="Key" value=setting.key}}
-            </div>
-            <div class="input-group-addon">
-              {{input class="input-sm form-control" placeholder="Value" value=setting.value}}
-              <span class="fa fa-times-circle remove" {{action 'remove' setting}}></span>
+                <span class="fa fa-times-circle remove pull-right" {{action 'remove' setting}}></span>
+              </div>
             </div>
           </div>
-        </div>
-      </form>
-    </div>
-  {{/each}}
-
-</div>
+        </form>
+      </div>
+    {{/each}}
+  </div>
 {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/tez-ui.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/tez-ui.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/tez-ui.hbs
new file mode 100644
index 0000000..f9b8d9c
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/tez-ui.hbs
@@ -0,0 +1,22 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+<div id="tez-ui">
+  {{#panel-widget headingTranslation="titles.query.tez"}}
+  {{/panel-widget}}
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/visual-explain.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/visual-explain.hbs b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/visual-explain.hbs
new file mode 100644
index 0000000..a823ef2
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/templates/visual-explain.hbs
@@ -0,0 +1,22 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+<div id="visual-explain">
+  {{#panel-widget headingTranslation="titles.query.visualExplain"}}
+  {{/panel-widget}}
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/constants.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/constants.js b/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/constants.js
index c9b1fda..888275d 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/constants.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/constants.js
@@ -17,6 +17,7 @@
  */
 
 import Ember from 'ember';
+import helpers from 'hive/utils/functions';
 
 export default Ember.Object.create({
   appTitle: 'Hive',
@@ -62,6 +63,8 @@ export default Ember.Object.create({
     database: 'database',
     databases: 'databases',
     openQueries: 'open-queries',
+    visualExplain: 'visual-explain',
+    tezUI: 'tez-ui',
     file: 'file',
     fileResource: 'file-resource',
     fileResources: 'file-resources',
@@ -79,15 +82,83 @@ export default Ember.Object.create({
     settings: 'settings'
   },
 
+  hiveParameters: [
+    {
+      name: 'hive.tez.container.size',
+      values: [
+        Ember.Object.create({ value: 'true' }),
+        Ember.Object.create({ value: 'false' })
+      ]
+    },
+    {
+      name: 'hive.prewarm.enabled',
+      validate: helpers.regexes.digits
+    },
+    {
+      name: 'hive.prewarm.numcontainers',
+      values: [
+        Ember.Object.create({ value: 'one' }),
+        Ember.Object.create({ value: 'two' }),
+        Ember.Object.create({ value: 'three' })
+      ]
+    },
+    {
+      name: 'hive.tez.auto.reducer.parallelism',
+      value: 'test'
+    },
+    {
+      name: 'hive.execution.engine'
+    },
+    {
+      name: 'hive.vectorized.execution.enabled'
+    },
+    {
+      name: 'tez.am.resource.memory.mb'
+    },
+    {
+      name: 'tez.am.container.idle.release-timeout-min.millis'
+    },
+    {
+      name: 'tez.am.container.idle.release-timeout-max.millis'
+    },
+    {
+      name: 'tez.queue.name'
+    },
+    {
+      name: 'tez.runtime.io.sort.mb'
+    },
+    {
+      name: 'tez.runtime.sort.threads'
+    },
+    {
+      name: 'tez.runtime.optimize.shared.fetch'
+    },
+    {
+      name: 'tez.runtime.compress.codec'
+    },
+    {
+      name: 'tez.runtime.shuffle.keep-alive.enabled'
+    },
+    {
+      name: 'tez.grouping.min-size'
+    },
+    {
+      name: 'tez.grouping.max-size'
+    },
+    {
+      name: 'tez.generate.debug.artifacts'
+    }
+  ],
+
   statuses: {
-    unknown: "Unknown",
-    initialized: "Initialized",
-    running: "Running",
-    finished: "Finished",
-    canceled: "Canceled",
-    closed: "Closed",
-    error: "Error",
-    pending: "Pending"
+    unknown: "UNKNOWN",
+    initialized: "INITIALIZED",
+    running: "RUNNING",
+    succeeded: "SUCCEEDED",
+    canceled: "CANCELED",
+    closed: "CLOSED",
+    error: "ERROR",
+    pending: "PENDING"
   },
 
   alerts: {

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/functions.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/functions.js b/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/functions.js
index ab4f8e5..a63dc5b 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/functions.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/utils/functions.js
@@ -22,7 +22,7 @@ import Ember from 'ember';
 
 export default Ember.Object.create({
   isInteger: function (x) {
-    return (x^0) === x;
+    return !isNaN(x);
   },
 
   isDate: function(date) {
@@ -31,6 +31,19 @@ export default Ember.Object.create({
 
   regexes: {
     allUppercase: /^[^a-z]*$/,
-    whitespaces: /^(\s*).*$/
+    whitespaces: /^(\s*).*$/,
+    digits: /^\d+$/
+  },
+
+  insensitiveCompare: function (sourceString) {
+    var args = Array.prototype.slice.call(arguments, 1);
+
+    if (!sourceString) {
+      return;
+    }
+
+    return args.find(function (arg) {
+      return sourceString.match(new RegExp('^' + arg + '$', 'i'));
+    });
   }
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/views/tez-ui.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/views/tez-ui.js b/contrib/views/hive/src/main/resources/ui/hive-web/app/views/tez-ui.js
new file mode 100644
index 0000000..c14fd34
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/views/tez-ui.js
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Ember from 'ember';
+
+export default Ember.View.extend({
+  didInsertElement: function () {
+    var target = this.$('#tez-ui');
+
+    target.css('min-height', $('.main-content').height());
+    target.animate({ width: $('.main-content').width() }, 'fast');
+  },
+
+  willDestroyElement: function () {
+    var target = this.$('#tez-ui');
+
+    target.css('min-height', 0);
+    target.css('width', 0);
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/app/views/visual-explain.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/views/visual-explain.js b/contrib/views/hive/src/main/resources/ui/hive-web/app/views/visual-explain.js
new file mode 100644
index 0000000..4a887e2
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/views/visual-explain.js
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Ember from 'ember';
+
+export default Ember.View.extend({
+  didInsertElement: function () {
+    var target = this.$('#visual-explain');
+
+    target.css('min-height', $('.main-content').height());
+    target.animate({ width: $('.main-content').width() }, 'fast');
+  },
+
+  willDestroyElement: function () {
+    var target = this.$('#visual-explain');
+
+    target.css('min-height', 0);
+    target.css('width', 0);
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/bower.json
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/bower.json b/contrib/views/hive/src/main/resources/ui/hive-web/bower.json
index a4c2aca..161a626 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/bower.json
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/bower.json
@@ -4,20 +4,20 @@
     "handlebars": "2.0.0",
     "jquery": "^1.11.1",
     "ember": "1.9.0",
-    "ember-data": "1.0.0-beta.11",
+    "ember-data": "1.0.0-beta.14.1",
     "ember-resolver": "~0.1.7",
     "loader.js": "stefanpenner/loader.js#1.0.1",
     "ember-cli-shims": "stefanpenner/ember-cli-shims#0.0.3",
     "ember-cli-test-loader": "rwjblue/ember-cli-test-loader#0.0.4",
     "ember-load-initializers": "stefanpenner/ember-load-initializers#0.0.2",
-    "ember-qunit": "0.1.8",
-    "ember-qunit-notifications": "0.0.4",
+    "ember-qunit": "0.2.8",
+    "ember-qunit-notifications": "0.0.7",
     "qunit": "~1.15.0",
     "bootstrap": "~3.2.0",
     "ember-i18n": "~2.9.0",
     "blanket": "~1.1.5",
     "jquery-ui": "~1.11.2",
-    "selectize": "~0.11.2",
+    "selectize": "~0.12.0",
     "pretender": "0.1.0"
   },
   "resolutions": {

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/package.json
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/package.json b/contrib/views/hive/src/main/resources/ui/hive-web/package.json
index 52e908a..c2523b1 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/package.json
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/package.json
@@ -15,7 +15,7 @@
   },
   "repository": "https://github.com/stefanpenner/ember-cli",
   "engines": {
-    "node": ">= 0.10.0"
+    "node": ">= 0.10.32"
   },
   "author": "",
   "license": "MIT",
@@ -24,7 +24,7 @@
     "bower": ">= 1.3.12",
     "broccoli-asset-rev": "0.3.1",
     "broccoli-sass": "^0.3.2",
-    "ember-cli": "0.1.2",
+    "ember-cli": "0.1.15",
     "ember-cli-blanket": "^0.2.2",
     "ember-cli-content-security-policy": "0.3.0",
     "ember-cli-font-awesome": "0.0.4",
@@ -34,12 +34,12 @@
     "ember-cli-jquery-ui": "0.0.12",
     "ember-cli-moment": "0.0.1",
     "ember-cli-pretender": "^0.3.1",
-    "ember-cli-qunit": "0.1.0",
-    "ember-cli-selectize": "0.0.7",
-    "ember-data": "1.0.0-beta.10",
+    "ember-cli-qunit": "0.3.7",
+    "ember-cli-selectize": "0.0.19",
+    "ember-data": "1.0.0-beta.14.1",
     "ember-dynamic-component": "0.0.1",
     "ember-export-application-global": "^1.0.0",
     "express": "^4.8.5",
-    "glob": "^4.0.5"
+    "glob": "4.4.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/tests/integration/query-editor-test.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/tests/integration/query-editor-test.js b/contrib/views/hive/src/main/resources/ui/hive-web/tests/integration/query-editor-test.js
index 235a225..19c2356 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/tests/integration/query-editor-test.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/tests/integration/query-editor-test.js
@@ -59,7 +59,7 @@ test('Can execute query', function() {
   click('.execute-query');
 
   andThen(function() {
-    ok(find('.query-process-results-panel .nav-tabs li:nth-child(2)').hasClass('active'), 'Results tab is visible');
+    equal(find('.query-process-results-panel').length, 1, 'Job tabs are visible.');
   });
 });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/history-test.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/history-test.js b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/history-test.js
index c43cfda..51d4112 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/history-test.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/history-test.js
@@ -40,10 +40,10 @@ test('date range is set correctly', function () {
 
   var history = Ember.ArrayProxy.create({ content: [
     Ember.Object.create({
-      dateSubmitted: min
+      dateSubmittedTimestamp: min
     }),
     Ember.Object.create({
-      dateSubmitted: max
+      dateSubmittedTimestamp: max
     })
   ]});
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/queries-test.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/queries-test.js b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/queries-test.js
index 0ed7dd7..d14f2cc 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/queries-test.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/queries-test.js
@@ -30,18 +30,3 @@ test('controller is initialized', function() {
 
   equal(component.get('columns.length'), 4, 'Columns are initialized correctly');
 });
-
-test('Should hide new queries', function() {
-  expect(1);
-
-  var queries = [
-    { isNew: true },
-    { isNew: false}
-  ];
-
-  var controller = this.subject({
-    queries: queries
-  });
-
-  equal(controller.get('model.length'), 1, 'Hide new queries from the list');
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/settings-test.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/settings-test.js b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/settings-test.js
new file mode 100644
index 0000000..ef1b3d8
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/settings-test.js
@@ -0,0 +1,97 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Ember from 'ember';
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('controller:settings', 'SettingsController', {
+  needs: [
+    'controller:databases',
+    'controller:index',
+    'controller:open-queries',
+    'controller:loaded-files',
+    'controller:index/history-query/results',
+    'controller:index/history-query/explain',
+    'controller:columns',
+    'controller:udfs',
+    'controller:index/history-query/logs'
+  ]
+});
+
+test('can add a setting', function() {
+  var controller = this.subject();
+
+  ok(!controller.get('currentSettings.settings.length'), 'No initial settings');
+
+  Ember.run(function() {
+    controller.send('add');
+  });
+
+  equal(controller.get('currentSettings.settings.length'), 1, 'Can add settings');
+});
+
+test('hasSettings return true if there are settings', function() {
+  var controller = this.subject();
+
+  ok(!controller.hasSettings(null), 'No settings => return false');
+
+  Ember.run(function() {
+    controller.send('add');
+  });
+
+  ok(controller.hasSettings(null), '1 setting => returns true');
+});
+
+test('setSettingForQuery', function() {
+  var controller = this.subject();
+
+  var settings = [ Ember.Object.create({key: 'key', value: 'value'}) ];
+
+  Ember.run(function() {
+    controller.setSettingForQuery(1, settings);
+  });
+
+  equal(controller.get('currentSettings.settings.firstObject.key'), settings.get('key'), 'It sets the settings for specified query');
+});
+
+test('validate', function() {
+  var predefinedSettings = [
+    {
+      name: 'some.key',
+      validate: new RegExp(/^\d+$/) // digits
+    }
+  ];
+
+  var controller = this.subject({
+    predefinedSettings: predefinedSettings
+  });
+
+  var settings = [
+    Ember.Object.create({key: { name: 'some.key' }, value: 'value'}),
+    Ember.Object.create({key: { name: 'some.key' }, value: '123'})
+  ];
+
+  Ember.run(function() {
+    controller.setSettingForQuery(1, settings);
+  });
+
+  var currentSettings = controller.get('model.firstObject.settings');
+  console.log(currentSettings);
+  ok(!currentSettings.get('firstObject.valid'), "First setting doesn\' pass validataion");
+  ok(currentSettings.get('lastObject.valid'), 'Second setting passes validation');
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/tez-ui-test.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/tez-ui-test.js b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/tez-ui-test.js
new file mode 100644
index 0000000..f2755c5
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/tez-ui-test.js
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {
+  moduleFor,
+  test
+} from 'ember-qunit';
+
+moduleFor('controller:tez-ui', 'TezUiController', {
+  // Specify the other units that are required for this test.
+  // needs: ['controller:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function() {
+  var controller = this.subject();
+  ok(controller);
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/visual-explain-test.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/visual-explain-test.js b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/visual-explain-test.js
new file mode 100644
index 0000000..1ab84e2
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/controllers/visual-explain-test.js
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {
+  moduleFor,
+  test
+} from 'ember-qunit';
+
+moduleFor('controller:visual-explain', 'VisualExplainController', {
+  // Specify the other units that are required for this test.
+  // needs: ['controller:foo']
+});
+
+// Replace this with your real tests.
+test('it exists', function() {
+  var controller = this.subject();
+  ok(controller);
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/views/visual-explain-test.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/views/visual-explain-test.js b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/views/visual-explain-test.js
new file mode 100644
index 0000000..97faea6
--- /dev/null
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/tests/unit/views/visual-explain-test.js
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {
+  moduleFor,
+  test
+} from 'ember-qunit';
+
+moduleFor('view:visual-explain', 'VisualExplainView');
+
+// Replace this with your real tests.
+test('it exists', function() {
+  var view = this.subject();
+  ok(view);
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/view.xml b/contrib/views/hive/src/main/resources/view.xml
index b936c6d..b1d9ce6 100644
--- a/contrib/views/hive/src/main/resources/view.xml
+++ b/contrib/views/hive/src/main/resources/view.xml
@@ -19,22 +19,30 @@
     <label>Hive</label>
     <version>0.0.1</version>
 
+    <min-ambari-version>1.7.*</min-ambari-version>
+
     <!-- HDFS Configs -->
     <parameter>
         <name>webhdfs.url</name>
-        <description>WebHDFS FileSystem URI (example: webhdfs://namenode:50070)</description>
+        <description>Enter the WebHDFS FileSystem URI. Typically this is the dfs.namenode.http-address property in the hdfs-site.xml configuration. URL must be accessible from Ambari Server.</description>
+        <label>WebHDFS FileSystem URI</label>
+        <placeholder>webhdfs://namenode:50070</placeholder>
         <required>true</required>
     </parameter>
 
     <parameter>
         <name>webhdfs.username</name>
-        <description>User and doAs for proxy user for HDFS</description>
+        <description>doAs for proxy user for HDFS. By default, uses the currently logged-in Ambari user.</description>
+        <label>WebHDFS Username</label>
         <required>false</required>
     </parameter>
 
     <parameter>
         <name>webhdfs.auth</name>
-        <description>Semicolon-separated authentication configs. Default: auth=SIMPLE</description>
+        <description>Semicolon-separated authentication configs.</description>
+        <label>WebHDFS Authentication</label>
+        <placeholder>auth=SIMPLE</placeholder>
+        <default-value>auth=SIMPLE</default-value>
         <required>false</required>
     </parameter>
 
@@ -42,40 +50,62 @@
 
     <parameter>
         <name>dataworker.username</name>
-        <description>The username (defaults to ViewContext username)</description>
+        <description>The dataworker username. By default, users the currently logged-in Ambari user.</description>
+        <label>Dataworker Username</label>
         <required>false</required>
     </parameter>
 
     <parameter>
         <name>scripts.dir</name>
-        <description>HDFS directory path to store Hive scripts (example: /users/${username})</description>
+        <description>HDFS directory path to store Hive scripts.</description>
+        <label>Scripts HDFS Directory</label>
+        <placeholder>/user/${username}/hive/scripts</placeholder>
+        <default-value>/user/${username}/hive/scripts</default-value>
         <required>true</required>
     </parameter>
 
     <parameter>
         <name>jobs.dir</name>
-        <description>HDFS directory path to store Hive job status (example: /users/${username})</description>
+        <description>HDFS directory path to store Hive job status.</description>
+        <label>Jobs HDFS Directory</label>
+        <placeholder>/user/${username}/hive/jobs</placeholder>
+        <default-value>/user/${username}/hive/jobs</default-value>
         <required>true</required>
     </parameter>
 
     <parameter>
         <name>hive.host</name>
-        <description>HiveServer2 hostname or IP (example: 127.0.0.1)</description>
+        <description>Enter the HiveServer2 host. Host must be accessible from Ambari Server.</description>
+        <label>HiveServer2 Host</label>
+        <placeholder>127.0.0.1</placeholder>
         <required>true</required>
     </parameter>
 
     <parameter>
         <name>hive.port</name>
-        <description>HiveServer2 Thrift port (example: 10000)</description>
+        <description>HiveServer2 Thrift port (example: 10000).</description>
+        <label>HiveServer2 Thrift port</label>
+        <placeholder>10000</placeholder>
+        <default-value>10000</default-value>
         <required>true</required>
     </parameter>
 
     <parameter>
         <name>hive.auth</name>
-        <description>Semicolon-separated authentication configs. Default: auth=NOSASL</description>
+        <description>Semicolon-separated authentication configs.</description>
+        <label>Hive Authentication</label>
+        <placeholder>auth=NONE</placeholder>
+        <default-value>auth=NONE</default-value>
         <required>false</required>
     </parameter>
 
+    <parameter>
+        <name>yarn.ats.url</name>
+        <description>The URL to the YARN Application Timeline Server, used to provide Jobs information, typically, this is the yarn.timeline-service.webapp.address property in the yarn-site.xml configuration.</description>
+        <placeholder>http://yarn.ats.address:8188</placeholder>
+        <required>true</required>
+    </parameter>
+
     <resource>
         <name>savedQuery</name>
         <plural-name>savedQueries</plural-name>
@@ -107,7 +137,7 @@
         <name>job</name>
         <plural-name>jobs</plural-name>
         <id-property>id</id-property>
-        <resource-class>org.apache.ambari.view.hive.resources.jobs.JobImpl</resource-class>
+        <resource-class>org.apache.ambari.view.hive.resources.jobs.viewJobs.JobImpl</resource-class>
         <provider-class>org.apache.ambari.view.hive.resources.jobs.JobResourceProvider</provider-class>
         <service-class>org.apache.ambari.view.hive.resources.jobs.JobService</service-class>
     </resource>
@@ -133,7 +163,7 @@
             <id-property>id</id-property>
         </entity>
         <entity>
-            <class>org.apache.ambari.view.hive.resources.jobs.JobImpl</class>
+            <class>org.apache.ambari.view.hive.resources.jobs.viewJobs.JobImpl</class>
             <id-property>id</id-property>
         </entity>
         <entity>

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/files/FileServiceTest.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/files/FileServiceTest.java b/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/files/FileServiceTest.java
index 7ce2dd3..a5a0f48 100644
--- a/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/files/FileServiceTest.java
+++ b/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/files/FileServiceTest.java
@@ -55,7 +55,12 @@ public class FileServiceTest extends HDFSTest {
   @AfterClass
   public static void shutDown() throws Exception {
     HDFSTest.shutDown(); // super
-    HdfsApi.dropAllConnections(); //cleanup API connection
+  }
+
+  @Override
+  @After
+  public void tearDown() throws Exception {
+    fileService.getSharedObjectsFactory().clear(HdfsApi.class);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/8dbdbf66/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/jobs/ATSParserTest.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/jobs/ATSParserTest.java b/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/jobs/ATSParserTest.java
new file mode 100644
index 0000000..ced7772
--- /dev/null
+++ b/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/jobs/ATSParserTest.java
@@ -0,0 +1,411 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.view.hive.resources.jobs;
+
+import org.apache.ambari.view.hive.resources.jobs.atsJobs.*;
+import org.apache.commons.codec.binary.Base64;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.junit.Assert;
+import org.junit.Test;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class ATSParserTest {
+  @Test
+  public void testBase64() throws Exception {
+    System.out.println(Arrays.toString(Base64.decodeBase64("HWvpjKiERZCy_le4s-odOQ")));
+  }
+
+  @Test
+  public void testGetHiveJobsList() throws Exception {
+    IATSParser jobLoader = new ATSParser(new ATSRequestsDelegateStub());
+
+    List<HiveQueryId> jobs = jobLoader.getHiveQuieryIdsList("hive");
+
+    Assert.assertEquals(1, jobs.size());
+
+    HiveQueryId job = jobs.get(0);
+    Assert.assertEquals("hive_20150209144848_c3a5a07b-c3b6-4f57-a6d5-3dadecdd6fd0", job.entity);
+    Assert.assertEquals(1423493324L, job.starttime);
+    Assert.assertEquals("hive", job.user);
+    Assert.assertEquals(1423493342L - 1423493324L, job.duration);
+    Assert.assertEquals("select count(*) from z", job.query);
+
+    Assert.assertEquals(1, job.dagNames.size());
+    Assert.assertEquals("hive_20150209144848_c3a5a07b-c3b6-4f57-a6d5-3dadecdd6fd0:4", job.dagNames.get(0));
+
+    Assert.assertEquals(2, job.stages.size());
+  }
+
+  @Test
+  public void testGetTezDAGByName() throws Exception {
+    IATSParser jobLoader = new ATSParser(new ATSRequestsDelegateStub());
+
+    TezDagId tezDag = jobLoader.getTezDAGByName("hive_20150209144848_c3a5a07b-c3b6-4f57-a6d5-3dadecdd6fd0:4");
+
+    Assert.assertEquals("application_1423156117563_0005", tezDag.applicationId);
+    Assert.assertEquals("SUCCEEDED", tezDag.status);
+  }
+
+  protected static class ATSRequestsDelegateStub implements ATSRequestsDelegate {
+
+    @Override
+    public JSONObject hiveQueryIdList(String username) {
+      return (JSONObject) JSONValue.parse(
+          "{ \"entities\" : [ { \"domain\" : \"DEFAULT\",\n" +
+              "        \"entity\" : \"hive_20150209144848_c3a5a07b-c3b6-4f57-a6d5-3dadecdd6fd0\",\n" +
+              "        \"entitytype\" : \"HIVE_QUERY_ID\",\n" +
+              "        \"events\" : [ { \"eventinfo\" : {  },\n" +
+              "              \"eventtype\" : \"QUERY_COMPLETED\",\n" +
+              "              \"timestamp\" : 1423493342843\n" +
+              "            },\n" +
+              "            { \"eventinfo\" : {  },\n" +
+              "              \"eventtype\" : \"QUERY_SUBMITTED\",\n" +
+              "              \"timestamp\" : 1423493324355\n" +
+              "            }\n" +
+              "          ],\n" +
+              "        \"otherinfo\" : { \"MAPRED\" : false,\n" +
+              "            \"QUERY\" : \"{\\\"queryText\\\":\\\"select count(*) from z\\\",\\\"queryPlan\\\":{\\\"STAGE PLANS\\\":{\\\"Stage-1\\\":{\\\"Tez\\\":{\\\"DagName:\\\":\\\"hive_20150209144848_c3a5a07b-c3b6-4f57-a6d5-3dadecdd6fd0:4\\\",\\\"Vertices:\\\":{\\\"Reducer 2\\\":{\\\"Reduce Operator Tree:\\\":{\\\"Group By Operator\\\":{\\\"mode:\\\":\\\"mergepartial\\\",\\\"aggregations:\\\":[\\\"count(VALUE._col0)\\\"],\\\"outputColumnNames:\\\":[\\\"_col0\\\"],\\\"children\\\":{\\\"Select Operator\\\":{\\\"expressions:\\\":\\\"_col0 (type: bigint)\\\",\\\"outputColumnNames:\\\":[\\\"_col0\\\"],\\\"children\\\":{\\\"File Output Operator\\\":{\\\"Statistics:\\\":\\\"Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE\\\",\\\"compressed:\\\":\\\"false\\\",\\\"table:\\\":{\\\"serde:\\\":\\\"org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe\\\",\\\"input format:\\\":\\\"org.apache.hadoop.mapred.TextInputFormat\\\",\\\"output format:\\\":\\\"org.apache.hadoop.hive.
 ql.io.HiveIgnoreKeyTextOutputFormat\\\"}}},\\\"Statistics:\\\":\\\"Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE\\\"}},\\\"Statistics:\\\":\\\"Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE\\\"}}},\\\"Map 1\\\":{\\\"Map Operator Tree:\\\":[{\\\"TableScan\\\":{\\\"alias:\\\":\\\"z\\\",\\\"children\\\":{\\\"Select Operator\\\":{\\\"children\\\":{\\\"Group By Operator\\\":{\\\"mode:\\\":\\\"hash\\\",\\\"aggregations:\\\":[\\\"count()\\\"],\\\"outputColumnNames:\\\":[\\\"_col0\\\"],\\\"children\\\":{\\\"Reduce Output Operator\\\":{\\\"sort order:\\\":\\\"\\\",\\\"value expressions:\\\":\\\"_col0 (type: bigint)\\\",\\\"Statistics:\\\":\\\"Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE\\\"}},\\\"Statistics:\\\":\\\"Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE\\\"}},\\\"Statistics:\\\":\\\"Num rows: 0 Data size: 40 Basic stats: PARTIAL Column stats: COMPLETE\\\"}},\\\"Statistics:\\\":\\\"Num rows
 : 0 Data size: 40 Basic stats: PARTIAL Column stats: COMPLETE\\\"}}]}},\\\"Edges:\\\":{\\\"Reducer 2\\\":{\\\"parent\\\":\\\"Map 1\\\",\\\"type\\\":\\\"SIMPLE_EDGE\\\"}}}},\\\"Stage-0\\\":{\\\"Fetch Operator\\\":{\\\"limit:\\\":\\\"-1\\\",\\\"Processor Tree:\\\":{\\\"ListSink\\\":{}}}}},\\\"STAGE DEPENDENCIES\\\":{\\\"Stage-1\\\":{\\\"ROOT STAGE\\\":\\\"TRUE\\\"},\\\"Stage-0\\\":{\\\"DEPENDENT STAGES\\\":\\\"Stage-1\\\"}}}}\",\n" +
+              "            \"STATUS\" : true,\n" +
+              "            \"TEZ\" : true\n" +
+              "          },\n" +
+              "        \"primaryfilters\" : { \"user\" : [ \"hive\" ] },\n" +
+              "        \"relatedentities\" : {  },\n" +
+              "        \"starttime\" : 1423493324355\n" +
+              "      } ] }"
+      );
+    }
+
+      @Override
+      public JSONObject hiveQueryIdByOperationId(String operationId) {
+          throw new NotImplementedException();
+      }
+
+      @Override
+    public JSONObject tezDagByName(String name) {
+      return (JSONObject) JSONValue.parse(
+          "{ \"entities\" : [ { \"domain\" : \"DEFAULT\",\n" +
+              "        \"entity\" : \"dag_1423156117563_0005_2\",\n" +
+              "        \"entitytype\" : \"TEZ_DAG_ID\",\n" +
+              "        \"events\" : [ { \"eventinfo\" : {  },\n" +
+              "              \"eventtype\" : \"DAG_FINISHED\",\n" +
+              "              \"timestamp\" : 1423493342484\n" +
+              "            },\n" +
+              "            { \"eventinfo\" : {  },\n" +
+              "              \"eventtype\" : \"DAG_STARTED\",\n" +
+              "              \"timestamp\" : 1423493325803\n" +
+              "            },\n" +
+              "            { \"eventinfo\" : {  },\n" +
+              "              \"eventtype\" : \"DAG_INITIALIZED\",\n" +
+              "              \"timestamp\" : 1423493325794\n" +
+              "            },\n" +
+              "            { \"eventinfo\" : {  },\n" +
+              "              \"eventtype\" : \"DAG_SUBMITTED\",\n" +
+              "              \"timestamp\" : 1423493325578\n" +
+              "            }\n" +
+              "          ],\n" +
+              "        \"otherinfo\" : { \"applicationId\" : \"application_1423156117563_0005\",\n" +
+              "            \"counters\" : { \"counterGroups\" : [ { \"counterGroupDisplayName\" : \"org.apache.tez.common.counters.DAGCounter\",\n" +
+              "                      \"counterGroupName\" : \"org.apache.tez.common.counters.DAGCounter\",\n" +
+              "                      \"counters\" : [ { \"counterDisplayName\" : \"NUM_SUCCEEDED_TASKS\",\n" +
+              "                            \"counterName\" : \"NUM_SUCCEEDED_TASKS\",\n" +
+              "                            \"counterValue\" : 2\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"TOTAL_LAUNCHED_TASKS\",\n" +
+              "                            \"counterName\" : \"TOTAL_LAUNCHED_TASKS\",\n" +
+              "                            \"counterValue\" : 2\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"DATA_LOCAL_TASKS\",\n" +
+              "                            \"counterName\" : \"DATA_LOCAL_TASKS\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          }\n" +
+              "                        ]\n" +
+              "                    },\n" +
+              "                    { \"counterGroupDisplayName\" : \"File System Counters\",\n" +
+              "                      \"counterGroupName\" : \"org.apache.tez.common.counters.FileSystemCounter\",\n" +
+              "                      \"counters\" : [ { \"counterDisplayName\" : \"FILE_BYTES_READ\",\n" +
+              "                            \"counterName\" : \"FILE_BYTES_READ\",\n" +
+              "                            \"counterValue\" : 57\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"FILE_BYTES_WRITTEN\",\n" +
+              "                            \"counterName\" : \"FILE_BYTES_WRITTEN\",\n" +
+              "                            \"counterValue\" : 82\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"FILE_READ_OPS\",\n" +
+              "                            \"counterName\" : \"FILE_READ_OPS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"FILE_LARGE_READ_OPS\",\n" +
+              "                            \"counterName\" : \"FILE_LARGE_READ_OPS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"FILE_WRITE_OPS\",\n" +
+              "                            \"counterName\" : \"FILE_WRITE_OPS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"HDFS_BYTES_READ\",\n" +
+              "                            \"counterName\" : \"HDFS_BYTES_READ\",\n" +
+              "                            \"counterValue\" : 287\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"HDFS_BYTES_WRITTEN\",\n" +
+              "                            \"counterName\" : \"HDFS_BYTES_WRITTEN\",\n" +
+              "                            \"counterValue\" : 2\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"HDFS_READ_OPS\",\n" +
+              "                            \"counterName\" : \"HDFS_READ_OPS\",\n" +
+              "                            \"counterValue\" : 16\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"HDFS_LARGE_READ_OPS\",\n" +
+              "                            \"counterName\" : \"HDFS_LARGE_READ_OPS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"HDFS_WRITE_OPS\",\n" +
+              "                            \"counterName\" : \"HDFS_WRITE_OPS\",\n" +
+              "                            \"counterValue\" : 2\n" +
+              "                          }\n" +
+              "                        ]\n" +
+              "                    },\n" +
+              "                    { \"counterGroupDisplayName\" : \"org.apache.tez.common.counters.TaskCounter\",\n" +
+              "                      \"counterGroupName\" : \"org.apache.tez.common.counters.TaskCounter\",\n" +
+              "                      \"counters\" : [ { \"counterDisplayName\" : \"REDUCE_INPUT_GROUPS\",\n" +
+              "                            \"counterName\" : \"REDUCE_INPUT_GROUPS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"REDUCE_INPUT_RECORDS\",\n" +
+              "                            \"counterName\" : \"REDUCE_INPUT_RECORDS\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"COMBINE_INPUT_RECORDS\",\n" +
+              "                            \"counterName\" : \"COMBINE_INPUT_RECORDS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"SPILLED_RECORDS\",\n" +
+              "                            \"counterName\" : \"SPILLED_RECORDS\",\n" +
+              "                            \"counterValue\" : 2\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"NUM_SHUFFLED_INPUTS\",\n" +
+              "                            \"counterName\" : \"NUM_SHUFFLED_INPUTS\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"NUM_SKIPPED_INPUTS\",\n" +
+              "                            \"counterName\" : \"NUM_SKIPPED_INPUTS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"NUM_FAILED_SHUFFLE_INPUTS\",\n" +
+              "                            \"counterName\" : \"NUM_FAILED_SHUFFLE_INPUTS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"MERGED_MAP_OUTPUTS\",\n" +
+              "                            \"counterName\" : \"MERGED_MAP_OUTPUTS\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"GC_TIME_MILLIS\",\n" +
+              "                            \"counterName\" : \"GC_TIME_MILLIS\",\n" +
+              "                            \"counterValue\" : 389\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"CPU_MILLISECONDS\",\n" +
+              "                            \"counterName\" : \"CPU_MILLISECONDS\",\n" +
+              "                            \"counterValue\" : 2820\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"PHYSICAL_MEMORY_BYTES\",\n" +
+              "                            \"counterName\" : \"PHYSICAL_MEMORY_BYTES\",\n" +
+              "                            \"counterValue\" : 490799104\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"VIRTUAL_MEMORY_BYTES\",\n" +
+              "                            \"counterName\" : \"VIRTUAL_MEMORY_BYTES\",\n" +
+              "                            \"counterValue\" : 1558253568\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"COMMITTED_HEAP_BYTES\",\n" +
+              "                            \"counterName\" : \"COMMITTED_HEAP_BYTES\",\n" +
+              "                            \"counterValue\" : 312475648\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"INPUT_RECORDS_PROCESSED\",\n" +
+              "                            \"counterName\" : \"INPUT_RECORDS_PROCESSED\",\n" +
+              "                            \"counterValue\" : 3\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"OUTPUT_RECORDS\",\n" +
+              "                            \"counterName\" : \"OUTPUT_RECORDS\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"OUTPUT_BYTES\",\n" +
+              "                            \"counterName\" : \"OUTPUT_BYTES\",\n" +
+              "                            \"counterValue\" : 3\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"OUTPUT_BYTES_WITH_OVERHEAD\",\n" +
+              "                            \"counterName\" : \"OUTPUT_BYTES_WITH_OVERHEAD\",\n" +
+              "                            \"counterValue\" : 11\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"OUTPUT_BYTES_PHYSICAL\",\n" +
+              "                            \"counterName\" : \"OUTPUT_BYTES_PHYSICAL\",\n" +
+              "                            \"counterValue\" : 25\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"ADDITIONAL_SPILLS_BYTES_WRITTEN\",\n" +
+              "                            \"counterName\" : \"ADDITIONAL_SPILLS_BYTES_WRITTEN\",\n" +
+              "                            \"counterValue\" : 25\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"ADDITIONAL_SPILLS_BYTES_READ\",\n" +
+              "                            \"counterName\" : \"ADDITIONAL_SPILLS_BYTES_READ\",\n" +
+              "                            \"counterValue\" : 25\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"ADDITIONAL_SPILL_COUNT\",\n" +
+              "                            \"counterName\" : \"ADDITIONAL_SPILL_COUNT\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"SHUFFLE_BYTES\",\n" +
+              "                            \"counterName\" : \"SHUFFLE_BYTES\",\n" +
+              "                            \"counterValue\" : 25\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"SHUFFLE_BYTES_DECOMPRESSED\",\n" +
+              "                            \"counterName\" : \"SHUFFLE_BYTES_DECOMPRESSED\",\n" +
+              "                            \"counterValue\" : 11\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"SHUFFLE_BYTES_TO_MEM\",\n" +
+              "                            \"counterName\" : \"SHUFFLE_BYTES_TO_MEM\",\n" +
+              "                            \"counterValue\" : 25\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"SHUFFLE_BYTES_TO_DISK\",\n" +
+              "                            \"counterName\" : \"SHUFFLE_BYTES_TO_DISK\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"SHUFFLE_BYTES_DISK_DIRECT\",\n" +
+              "                            \"counterName\" : \"SHUFFLE_BYTES_DISK_DIRECT\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"NUM_MEM_TO_DISK_MERGES\",\n" +
+              "                            \"counterName\" : \"NUM_MEM_TO_DISK_MERGES\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"NUM_DISK_TO_DISK_MERGES\",\n" +
+              "                            \"counterName\" : \"NUM_DISK_TO_DISK_MERGES\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          }\n" +
+              "                        ]\n" +
+              "                    },\n" +
+              "                    { \"counterGroupDisplayName\" : \"HIVE\",\n" +
+              "                      \"counterGroupName\" : \"HIVE\",\n" +
+              "                      \"counters\" : [ { \"counterDisplayName\" : \"CREATED_FILES\",\n" +
+              "                            \"counterName\" : \"CREATED_FILES\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"DESERIALIZE_ERRORS\",\n" +
+              "                            \"counterName\" : \"DESERIALIZE_ERRORS\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"RECORDS_IN_Map_1\",\n" +
+              "                            \"counterName\" : \"RECORDS_IN_Map_1\",\n" +
+              "                            \"counterValue\" : 3\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"RECORDS_OUT_INTERMEDIATE_Map_1\",\n" +
+              "                            \"counterName\" : \"RECORDS_OUT_INTERMEDIATE_Map_1\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"RECORDS_OUT_Reducer_2\",\n" +
+              "                            \"counterName\" : \"RECORDS_OUT_Reducer_2\",\n" +
+              "                            \"counterValue\" : 1\n" +
+              "                          }\n" +
+              "                        ]\n" +
+              "                    },\n" +
+              "                    { \"counterGroupDisplayName\" : \"Shuffle Errors\",\n" +
+              "                      \"counterGroupName\" : \"Shuffle Errors\",\n" +
+              "                      \"counters\" : [ { \"counterDisplayName\" : \"BAD_ID\",\n" +
+              "                            \"counterName\" : \"BAD_ID\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"CONNECTION\",\n" +
+              "                            \"counterName\" : \"CONNECTION\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"IO_ERROR\",\n" +
+              "                            \"counterName\" : \"IO_ERROR\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"WRONG_LENGTH\",\n" +
+              "                            \"counterName\" : \"WRONG_LENGTH\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"WRONG_MAP\",\n" +
+              "                            \"counterName\" : \"WRONG_MAP\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          },\n" +
+              "                          { \"counterDisplayName\" : \"WRONG_REDUCE\",\n" +
+              "                            \"counterName\" : \"WRONG_REDUCE\",\n" +
+              "                            \"counterValue\" : 0\n" +
+              "                          }\n" +
+              "                        ]\n" +
+              "                    }\n" +
+              "                  ] },\n" +
+              "            \"dagPlan\" : { \"dagName\" : \"hive_20150209144848_c3a5a07b-c3b6-4f57-a6d5-3dadecdd6fd0:4\",\n" +
+              "                \"edges\" : [ { \"dataMovementType\" : \"SCATTER_GATHER\",\n" +
+              "                      \"dataSourceType\" : \"PERSISTED\",\n" +
+              "                      \"edgeDestinationClass\" : \"org.apache.tez.runtime.library.input.OrderedGroupedKVInput\",\n" +
+              "                      \"edgeId\" : \"533454263\",\n" +
+              "                      \"edgeSourceClass\" : \"org.apache.tez.runtime.library.output.OrderedPartitionedKVOutput\",\n" +
+              "                      \"inputVertexName\" : \"Map 1\",\n" +
+              "                      \"outputVertexName\" : \"Reducer 2\",\n" +
+              "                      \"schedulingType\" : \"SEQUENTIAL\"\n" +
+              "                    } ],\n" +
+              "                \"version\" : 1,\n" +
+              "                \"vertices\" : [ { \"additionalInputs\" : [ { \"class\" : \"org.apache.tez.mapreduce.input.MRInputLegacy\",\n" +
+              "                            \"initializer\" : \"org.apache.hadoop.hive.ql.exec.tez.HiveSplitGenerator\",\n" +
+              "                            \"name\" : \"z\"\n" +
+              "                          } ],\n" +
+              "                      \"outEdgeIds\" : [ \"533454263\" ],\n" +
+              "                      \"processorClass\" : \"org.apache.hadoop.hive.ql.exec.tez.MapTezProcessor\",\n" +
+              "                      \"vertexName\" : \"Map 1\"\n" +
+              "                    },\n" +
+              "                    { \"additionalOutputs\" : [ { \"class\" : \"org.apache.tez.mapreduce.output.MROutput\",\n" +
+              "                            \"name\" : \"out_Reducer 2\"\n" +
+              "                          } ],\n" +
+              "                      \"inEdgeIds\" : [ \"533454263\" ],\n" +
+              "                      \"processorClass\" : \"org.apache.hadoop.hive.ql.exec.tez.ReduceTezProcessor\",\n" +
+              "                      \"vertexName\" : \"Reducer 2\"\n" +
+              "                    }\n" +
+              "                  ]\n" +
+              "              },\n" +
+              "            \"diagnostics\" : \"\",\n" +
+              "            \"endTime\" : 1423493342484,\n" +
+              "            \"initTime\" : 1423493325794,\n" +
+              "            \"numCompletedTasks\" : 2,\n" +
+              "            \"numFailedTaskAttempts\" : 0,\n" +
+              "            \"numFailedTasks\" : 0,\n" +
+              "            \"numKilledTaskAttempts\" : 0,\n" +
+              "            \"numKilledTasks\" : 0,\n" +
+              "            \"numSucceededTasks\" : 2,\n" +
+              "            \"startTime\" : 1423493325803,\n" +
+              "            \"status\" : \"SUCCEEDED\",\n" +
+              "            \"timeTaken\" : 16681,\n" +
+              "            \"vertexNameIdMapping\" : { \"Map 1\" : \"vertex_1423156117563_0005_2_00\",\n" +
+              "                \"Reducer 2\" : \"vertex_1423156117563_0005_2_01\"\n" +
+              "              }\n" +
+              "          },\n" +
+              "        \"primaryfilters\" : { \"applicationId\" : [ \"application_1423156117563_0005\" ],\n" +
+              "            \"dagName\" : [ \"hive_20150209144848_c3a5a07b-c3b6-4f57-a6d5-3dadecdd6fd0:4\" ],\n" +
+              "            \"status\" : [ \"SUCCEEDED\" ],\n" +
+              "            \"user\" : [ \"hive\" ]\n" +
+              "          },\n" +
+              "        \"relatedentities\" : {  },\n" +
+              "        \"starttime\" : 1423493325578\n" +
+              "      } ] }"
+      );
+    }
+  }
+}
\ No newline at end of file


Mime
View raw message