AMBARI-20573. Hive view 2.0 fails on LLAP (Gaurav Nagar via nitirajrathore)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a3d4a1e1 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a3d4a1e1 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a3d4a1e1 Branch: refs/heads/branch-2.5 Commit: a3d4a1e11df93443b6e819f681d86d610511ac0b Parents: 62f99b6 Author: Nitiraj Singh Rathore <nitiraj.rath...@gmail.com> Authored: Tue Apr 4 12:43:23 2017 +0530 Committer: Nitiraj Singh Rathore <nitiraj.rath...@gmail.com> Committed: Tue Apr 4 13:03:12 2017 +0530 ---------------------------------------------------------------------- .../apache/ambari/server/view/ViewRegistry.java | 51 ++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/a3d4a1e1/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java index 058a2c2..24eceb2 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java @@ -84,6 +84,7 @@ import org.apache.ambari.server.orm.entities.ViewEntity; import org.apache.ambari.server.orm.entities.ViewEntityEntity; import org.apache.ambari.server.orm.entities.ViewInstanceDataEntity; import org.apache.ambari.server.orm.entities.ViewInstanceEntity; +import org.apache.ambari.server.orm.entities.ViewInstancePropertyEntity; import org.apache.ambari.server.orm.entities.ViewParameterEntity; import org.apache.ambari.server.orm.entities.ViewResourceEntity; import org.apache.ambari.server.orm.entities.ViewURLEntity; @@ -92,6 +93,8 @@ import org.apache.ambari.server.security.authorization.AuthorizationHelper; import org.apache.ambari.server.security.authorization.ResourceType; import org.apache.ambari.server.security.authorization.RoleAuthorization; import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Service; +import org.apache.ambari.server.state.ServiceComponent; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.stack.OsFamily; import org.apache.ambari.server.utils.VersionUtils; @@ -985,7 +988,7 @@ public class ViewRegistry { try { if (checkAutoInstanceConfig(autoConfig, stackId, event.getServiceName(), serviceNames)) { - installAutoInstance(clusterId, clusterName, viewEntity, viewName, viewConfig, autoConfig, roles); + installAutoInstance(clusterId, clusterName, cluster.getService(event.getServiceName()), viewEntity, viewName, viewConfig, autoConfig, roles); } } catch (Exception e) { LOG.error("Can't auto create instance of view " + viewName + " for cluster " + clusterName + @@ -997,9 +1000,10 @@ public class ViewRegistry { } } - private void installAutoInstance(Long clusterId, String clusterName, ViewEntity viewEntity, String viewName, ViewConfig viewConfig, AutoInstanceConfig autoConfig, Collection<String> roles) throws SystemException, ValidationException { + private void installAutoInstance(Long clusterId, String clusterName, Service service, ViewEntity viewEntity, String viewName, ViewConfig viewConfig, AutoInstanceConfig autoConfig, Collection<String> roles) throws SystemException, ValidationException { LOG.info("Auto creating instance of view " + viewName + " for cluster " + clusterName + "."); ViewInstanceEntity viewInstanceEntity = createViewInstanceEntity(viewEntity, viewConfig, autoConfig); + updateHiveLLAPSettingsIfRequired(viewInstanceEntity, service); viewInstanceEntity.setClusterHandle(clusterId); installViewInstance(viewInstanceEntity); setViewInstanceRoleAccess(viewInstanceEntity, roles); @@ -1014,6 +1018,47 @@ public class ViewRegistry { } + /** + * Checks is service is 'HIVE' and INTERACTIVE_SERVICE(LLAP) is enabled. Then, it sets the view instance + * parameter 'use.hive.interactive.mode' for the 'AUTO_INSTANCE_VIEW' to be true. + * @param viewInstanceEntity + * @param service + */ + private void updateHiveLLAPSettingsIfRequired(ViewInstanceEntity viewInstanceEntity, Service service) { + String INTERACTIVE_KEY = "use.hive.interactive.mode"; + String LLAP_COMPONENT_NAME = "HIVE_SERVER_INTERACTIVE"; + String viewVersion = viewInstanceEntity.getViewDefinition().getVersion(); + String viewName = viewInstanceEntity.getViewDefinition().getViewName(); + if(!viewName.equalsIgnoreCase("HIVE") || viewVersion.equalsIgnoreCase("1.0.0")) { + return; + } + + try { + ServiceComponent component = service.getServiceComponent(LLAP_COMPONENT_NAME); + if (component.getServiceComponentHosts().size() == 0) { + // The LLAP server is not installed in any of the hosts. Hence, return; + return; + } + + for (Map.Entry<String, String> property : viewInstanceEntity.getPropertyMap().entrySet()) { + if (INTERACTIVE_KEY.equals(property.getKey()) && (!"true".equalsIgnoreCase(property.getValue()))) { + ViewInstancePropertyEntity propertyEntity = new ViewInstancePropertyEntity(); + propertyEntity.setViewInstanceName(viewInstanceEntity.getName()); + propertyEntity.setViewName(viewInstanceEntity.getViewName()); + propertyEntity.setName(INTERACTIVE_KEY); + propertyEntity.setValue("true"); + propertyEntity.setViewInstanceEntity(viewInstanceEntity); + viewInstanceEntity.getProperties().add(propertyEntity); + } + } + + } catch (AmbariException e) { + LOG.error("Failed to update '{}' parameter for viewName: {}, version: {}. Exception: {}", + INTERACTIVE_KEY, viewName, viewVersion, e); + } + + } + private String getUrlName(ViewInstanceEntity viewInstanceEntity) { return viewInstanceEntity.getViewEntity().getCommonName().toLowerCase() + "_" + viewInstanceEntity.getInstanceName().toLowerCase(); } @@ -1931,7 +1976,7 @@ public class ViewRegistry { try { if (checkAutoInstanceConfig(autoInstanceConfig, stackId, service, serviceNames)) { - installAutoInstance(clusterId, clusterName, viewEntity, viewName, viewConfig, autoInstanceConfig, roles); + installAutoInstance(clusterId, clusterName, cluster.getService(service), viewEntity, viewName, viewConfig, autoInstanceConfig, roles); } } catch (Exception e) { LOG.error("Can't auto create instance of view " + viewName + " for cluster " + clusterName +