You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/03/12 20:31:27 UTC
[2/6] ambari git commit: AMBARI-10035. Hive View: Retrieve history
from ATS (alexantonenko)
http://git-wip-us.apache.org/repos/asf/ambari/blob/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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/db973127/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