You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2014/12/01 18:38:00 UTC

ambari git commit: AMBARI-8492 - Pig View: readme + blueprint, minor UI (Jeff Sposetti via tbeerbower)

Repository: ambari
Updated Branches:
  refs/heads/trunk fd635e74c -> 5fc87355a


AMBARI-8492 - Pig View: readme + blueprint, minor UI (Jeff Sposetti via tbeerbower)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5fc87355
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5fc87355
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5fc87355

Branch: refs/heads/trunk
Commit: 5fc87355a8fbd8c25ded9937f340ac131172f52b
Parents: fd635e7
Author: tbeerbower <tb...@hortonworks.com>
Authored: Mon Dec 1 12:37:20 2014 -0500
Committer: tbeerbower <tb...@hortonworks.com>
Committed: Mon Dec 1 12:37:51 2014 -0500

----------------------------------------------------------------------
 contrib/views/pig/blueprint.json                | 179 +++++++++++++++++++
 contrib/views/pig/clustertemplate.json          |  13 ++
 contrib/views/pig/readme.md                     | 168 +++++++++++++++++
 .../resources/ui/pig-web/app/styles/style.less  |  17 +-
 .../resources/ui/pig-web/app/templates/pig.hbs  |   2 +-
 .../ui/pig-web/app/templates/pig/history.hbs    |  10 +-
 .../ui/pig-web/app/templates/pig/udfs.hbs       |   4 +-
 .../ui/pig-web/app/templates/script/job.hbs     |   8 +-
 .../resources/ui/pig-web/app/translations.js    |  38 ++--
 contrib/views/pig/src/main/resources/view.xml   |   9 +-
 10 files changed, 409 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/blueprint.json
----------------------------------------------------------------------
diff --git a/contrib/views/pig/blueprint.json b/contrib/views/pig/blueprint.json
new file mode 100644
index 0000000..e03e9f8
--- /dev/null
+++ b/contrib/views/pig/blueprint.json
@@ -0,0 +1,179 @@
+{
+    "configurations" : [
+        {
+            "capacity-scheduler" : {
+                "yarn.scheduler.capacity.root.default.maximum-am-resource-percent" :  "0.5",
+                "yarn.scheduler.capacity.maximum-am-resource-percent" : "0.5"
+            }
+        },
+        {
+            "cluster-env": {
+                "cluster_name": "PigView",
+                "smokeuser": "ambari-qa",
+                "user_group": "hadoop",
+                "security_enabled": "false"
+            }
+        },
+        {
+            "core-site" : {
+                "hadoop.proxyuser.root.hosts" : "*",
+                "hadoop.proxyuser.root.groups" : "*",
+                "hadoop.proxyuser.hcat.hosts" : "*",
+                "hadoop.proxyuser.hcat.groups" : "*"
+            }
+        },
+        {
+            "hadoop-env": {
+                "dtnode_heapsize" : "250",
+                "hadoop_heapsize" : "250",
+                "namenode_heapsize" : "250",
+                "namenode_opt_newsize": "50",
+                "namenode_opt_maxnewsize": "100",
+                "content" : "\n# Set Hadoop-specific environment variables here.\n\n# The only required environment variable is JAVA_HOME.  All others are\n# optional.  When running a distributed configuration it is best to\n# set JAVA_HOME in this file, so that it is correctly defined on\n# remote nodes.\n\n# The java implementation to use.  Required.\nexport JAVA_HOME={{java_home}}\nexport HADOOP_HOME_WARN_SUPPRESS=1\n\n# Hadoop home directory\nexport HADOOP_HOME=${HADOOP_HOME:-/usr/lib/hadoop}\n\n# Hadoop Configuration Directory\n#TODO: if env var set that can cause problems\nexport HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-{{hadoop_conf_dir}}}\n\n{# this is different for HDP1 #}\n# Path to jsvc required by secure HDP 2.0 datanode\nexport JSVC_HOME={{jsvc_path}}\n\n\n# The maximum amount of heap to use, in MB. Default is 1000.\nexport HADOOP_HEAPSIZE=\"{{hadoop_heapsize}}\"\n\nexport HADOOP_NAMENODE_INIT_HEAPSIZE=\"-Xms{{namenode_heapsize}}\"\n\n# Extra Java runtime options.  Empty by d
 efault.\nexport HADOOP_OPTS=\"-Djava.net.preferIPv4Stack=true ${HADOOP_OPTS}\"\n\n# Command specific options appended to HADOOP_OPTS when specified\nexport HADOOP_NAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xms{{namenode_heapsize}} -Xmx{{namenode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_NAMENODE_OPTS}\"\nHADOOP_JOBTRACKER_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{jtnode_opt_newsize}} -XX:MaxNewSize={{jtnode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintG
 CTimeStamps -XX:+PrintGCDateStamps -Xmx{{jtnode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dmapred.audit.logger=INFO,MRAUDIT -Dhadoop.mapreduce.jobsummary.logger=INFO,JSA ${HADOOP_JOBTRACKER_OPTS}\"\n\nHADOOP_TASKTRACKER_OPTS=\"-server -Xmx{{ttnode_heapsize}} -Dhadoop.security.logger=ERROR,console -Dmapred.audit.logger=ERROR,console ${HADOOP_TASKTRACKER_OPTS}\"\nHADOOP_DATANODE_OPTS=\"-Xmx{{dtnode_heapsize}} -Dhadoop.security.logger=ERROR,DRFAS ${HADOOP_DATANODE_OPTS}\"\nHADOOP_BALANCER_OPTS=\"-server -Xmx{{hadoop_heapsize}}m ${HADOOP_BALANCER_OPTS}\"\n\nexport HADOOP_SECONDARYNAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ${HADOOP_NAMENODE_INIT_HEAPSIZE} -Xmx{{namenode_hea
 psize}} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_SECONDARYNAMENODE_OPTS}\"\n\n# The following applies to multiple commands (fs, dfs, fsck, distcp etc)\nexport HADOOP_CLIENT_OPTS=\"-Xmx${HADOOP_HEAPSIZE}m $HADOOP_CLIENT_OPTS\"\n\n# Extra ssh options.  Empty by default.\nexport HADOOP_SSH_OPTS=\"-o ConnectTimeout=5 -o SendEnv=HADOOP_CONF_DIR\"\n\n# Where log files are stored.  $HADOOP_HOME/logs by default.\nexport HADOOP_LOG_DIR={{hdfs_log_dir_prefix}}/$USER\n\n# History server logs\nexport HADOOP_MAPRED_LOG_DIR={{mapred_log_dir_prefix}}/$USER\n\n# File naming remote slave hosts.  $HADOOP_HOME/conf/slaves by default.\n# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves\n\n# host:path where hadoop code should be rsync'd from.  Unset by default.\n# export HADOOP_MASTER=master:/home/$USER/src/hadoop\n\n# Seconds to sleep between slave commands.  Unset by default.  This\n# can be useful in large clusters, where, e.g., slave rsyncs can\n# otherwise arri
 ve faster than the master can service them.\n# export HADOOP_SLAVE_SLEEP=0.1\n\n# The directory where pid files are stored. /tmp by default.\nexport HADOOP_PID_DIR={{hadoop_pid_dir_prefix}}/$USER\n\n# History server pid\nexport HADOOP_MAPRED_PID_DIR={{mapred_pid_dir_prefix}}/$USER\n\nYARN_RESOURCEMANAGER_OPTS=\"-Dyarn.server.resourcemanager.appsummary.logger=INFO,RMSUMMARY\"\n\n# A string representing this instance of hadoop. $USER by default.\nexport HADOOP_IDENT_STRING=$USER\n\n# The scheduling priority for daemon processes.  See 'man nice'.\n\n# export HADOOP_NICENESS=10\n\n# Use libraries from standard classpath\nJAVA_JDBC_LIBS=\"\"\n#Add libraries required by mysql connector\nfor jarFile in `ls /usr/share/java/*mysql* 2>/dev/null`\ndo\n  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by oracle connector\nfor jarFile in `ls /usr/share/java/*ojdbc* 2>/dev/null`\ndo\n  JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by nodemanager
 \nMAPREDUCE_LIBS={{mapreduce_libs_path}}\nexport HADOOP_CLASSPATH=${HADOOP_CLASSPATH}${JAVA_JDBC_LIBS}:${MAPREDUCE_LIBS}\n\nif [ -d \"/usr/hdp/current/tez-client\" ]; then\n  export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/hdp/current/tez-client/*:/usr/hdp/current/tez-client/lib/*:/etc/tez/conf\nfi\n\n# Setting path to hdfs command line\nexport HADOOP_LIBEXEC_DIR={{hadoop_libexec_dir}}\n\n#Mostly required for hadoop 2.0\nexport JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:/usr/lib/hadoop/lib/native/Linux-amd64-64\n\n#Hadoop logging options\nexport HADOOP_ROOT_LOGGER={{hadoop_root_logger}}\n    "
+            }
+        },
+        {
+            "hive-env": {
+                "content" : "\n if [ \"$SERVICE\" = \"cli\" ]; then\n   if [ -z \"$DEBUG\" ]; then\n     export HADOOP_OPTS=\"$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:+UseParNewGC -XX:-UseGCOverheadLimit\"\n   else\n     export HADOOP_OPTS=\"$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:-UseGCOverheadLimit\"\n   fi\n fi\n\n# The heap size of the jvm stared by hive shell script can be controlled via:\n\nexport HADOOP_HEAPSIZE=\"{{hive_heapsize}}\"\nexport HADOOP_CLIENT_OPTS=\"-Xmx${HADOOP_HEAPSIZE}m $HADOOP_CLIENT_OPTS\"\n\n# Larger heap size may be required when running queries over large number of files or partitions.\n# By default hive shell scripts use a heap size of 256 (MB).  Larger heap size would also be\n# appropriate for hive server (hwi etc).\n\n\n# Set HADOOP_HOME to point to a specific hadoop install directory\nHADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n\n# Hive Configuration Dir
 ectory can be controlled by:\nexport HIVE_CONF_DIR={{hive_config_dir}}\n\n# Folder containing extra ibraries required for hive compilation/execution can be controlled by:\nif [ \"${HIVE_AUX_JARS_PATH}\" != \"\" ]; then\n  export HIVE_AUX_JARS_PATH=${HIVE_AUX_JARS_PATH}\nelif [ -d \"/usr/lib/hive-webhcat/\" ]; then\n  export HIVE_AUX_JARS_PATH=/usr/lib/hive-webhcat/share/hcatalog/hive-hcatalog-core-*.jar\nelse\n  export HIVE_AUX_JARS_PATH=/usr/hdp/current/hive-webhcat/share/hcatalog/hive-hcatalog-core.jar\nfi\nexport METASTORE_PORT={{hive_metastore_port}}\n    "
+            }
+        },
+        {
+            "hbase-site" : {
+                "hbase.security.authorization": "true",
+                "hbase.rpc.engine": "org.apache.hadoop.hbase.ipc.SecureRpcEngine",
+                "hbase_master_heapsize": "250",
+                "hbase_regionserver_heapsize": "250",
+                "hbase.rpc.protection": "PRIVACY"
+            }
+        },
+        {
+            "hdfs-site" : {
+                "dfs.block.size" : "34217472",
+                "dfs.replication" : "1",
+                "dfs.namenode.accesstime.precision" : "3600000",
+                "dfs.nfs3.dump.dir" : "/tmp/.hdfs-nfs",
+                "dfs.nfs.exports.allowed.hosts" : "* rw",
+                "dfs.datanode.max.xcievers" : "1024",
+                "dfs.block.access.token.enable" : "false"
+            }
+        },
+        {
+            "hive-site" : {
+                "javax.jdo.option.ConnectionPassword" : "hive",
+                "hive.tez.container.size" : "250",
+                "hive.tez.java.opts" : "-server -Xmx200m -Djava.net.preferIPv4Stack=true",
+                "hive.heapsize" : "250",
+                "hive.users.in.admin.role" : "hive",
+                "hive_metastore_user_passwd" : "hive",
+                "hive.server2.enable.impersonation": "true",
+                "hive.compactor.check.interval": "300s",
+                "hive.compactor.initiator.on": "true",
+                "hive.compactor.worker.timeout": "86400s",
+                "hive.enforce.bucketing": "true",
+                "hive.support.concurrency": "true",
+                "hive.exec.dynamic.partition.mode": "nonstrict",
+                "hive.server2.enable.doAs": "false",
+                "hive.txn.manager": "org.apache.hadoop.hive.ql.lockmgr.DbTxnManager",
+                "hive.txn.max.open.batch": "1000",
+                "hive.txn.timeout": "300",
+                "hive.security.authorization.enabled": "false"
+            }
+        },
+        {
+            "mapred-env": {
+                "jobhistory_heapsize" : "250"
+            }
+        },
+        {
+            "mapred-site" : {
+                "mapreduce.map.memory.mb" : "250",
+                "mapreduce.reduce.memory.mb" : "250",
+                "mapreduce.task.io.sort.mb" : "64",
+                "yarn.app.mapreduce.am.resource.mb" : "250",
+                "yarn.app.mapreduce.am.command-opts" : "-Xmx200m",
+                "mapred.job.reduce.memory.mb" : "250",
+                "mapred.child.java.opts" : "-Xmx200m",
+                "mapred.job.map.memory.mb" : "250",
+                "io.sort.mb" : "64",
+                "mapreduce.map.java.opts" : "-Xmx200m",
+                "mapreduce.reduce.java.opts" : "-Xmx200m"
+            }
+        },
+        {
+            "nagios-env":{
+                "nagios_contact" : "admin@localhost.localdomain",
+                "nagios_web_login" : "nagiosadmin",
+                "nagios_web_password" : "admin"
+            }
+        },
+        {
+            "tez-site" : {
+                "tez.am.java.opts" : "-server -Xmx200m -Djava.net.preferIPv4Stack=true -XX:+UseNUMA -XX:+UseParallelGC",
+                "tez.am.resource.memory.mb" : "250",
+                "tez.dag.am.resource.memory.mb" : "250",
+                "yarn.app.mapreduce.am.command-opts" : "-Xmx200m"
+            }
+        },
+        {
+            "webhcat-site" : {
+                "webhcat.proxyuser.hcat.hosts" : "*",
+                "webhcat.proxyuser.hcat.groups" : "*"
+            }
+        },
+        {
+            "yarn-env": {
+                "apptimelineserver_heapsize" : "250",
+                "resourcemanager_heapsize" : "250",
+                "nodemanager_heapsize" : "250",
+                "yarn_heapsize" : "250"
+            }
+
+        },
+        {
+            "yarn-site" : {
+                "yarn.nodemanager.resource.memory-mb": "2250",
+                "yarn.nodemanager.vmem-pmem-ratio" : "10",
+                "yarn.scheduler.minimum-allocation-mb" : "250",
+                "yarn.scheduler.maximum-allocation-mb" : "2250",
+                "yarn.nodemanager.pmem-check-enabled" : "false",
+                "yarn.acl.enable" : "false",
+                "yarn.resourcemanager.webapp.proxyuser.hcat.groups" : "*",
+                "yarn.resourcemanager.webapp.proxyuser.hcat.hosts" : "*"
+            }
+        }
+    ],
+    "host_groups" : [
+        {
+            "name" : "single_host",
+            "components" : [
+                {"name": "APP_TIMELINE_SERVER"},
+                {"name" : "DATANODE"},
+                {"name" : "GANGLIA_SERVER"},
+                {"name" : "HDFS_CLIENT"},
+                {"name" : "HISTORYSERVER"},
+                {"name" : "HIVE_CLIENT"},
+                {"name" : "HIVE_METASTORE"},
+                {"name" : "HIVE_SERVER"},
+                {"name" : "MAPREDUCE2_CLIENT"},
+                {"name" : "MYSQL_SERVER"},
+                {"name" : "NAGIOS_SERVER"},
+                {"name" : "NAMENODE"},
+                {"name" : "NODEMANAGER"},
+                {"name" : "PIG"},
+                {"name" : "RESOURCEMANAGER"},
+                {"name" : "SECONDARY_NAMENODE"},
+                {"name" : "TEZ_CLIENT"},
+                {"name" : "WEBHCAT_SERVER"},
+                {"name" : "YARN_CLIENT"},
+                {"name" : "ZOOKEEPER_CLIENT"},
+                {"name" : "ZOOKEEPER_SERVER"}
+            ],
+            "cardinality" : "1"
+        }
+    ],
+    "Blueprints" : {
+        "blueprint_name" : "pig-view",
+        "stack_name" : "HDP",
+        "stack_version" : "2.2"
+    }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/clustertemplate.json
----------------------------------------------------------------------
diff --git a/contrib/views/pig/clustertemplate.json b/contrib/views/pig/clustertemplate.json
new file mode 100644
index 0000000..e41f076
--- /dev/null
+++ b/contrib/views/pig/clustertemplate.json
@@ -0,0 +1,13 @@
+{
+  "blueprint" : "pig-view",
+  "host_groups" :[
+    {
+      "name" : "single_host",
+      "hosts" : [
+        {
+          "fqdn" : "c6403.ambari.apache.org"
+        }
+      ]
+    }
+  ]
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/readme.md
----------------------------------------------------------------------
diff --git a/contrib/views/pig/readme.md b/contrib/views/pig/readme.md
new file mode 100644
index 0000000..c9714bc
--- /dev/null
+++ b/contrib/views/pig/readme.md
@@ -0,0 +1,168 @@
+<!---
+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](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.
+-->
+
+Pig View
+============
+
+Description
+-----
+This View provides a UI to create, save and run pig scripts. You can browse the list of pig scripts you have created and saved.
+You can see the history of runs of the pig scripts, view the logs and download the results. You can also upload and use
+UDFs with your pig scripts.
+
+Requirements
+-----
+
+- Ambari 1.7.0
+- HDFS with WebHDFS configured
+- WebHCat with Pig configured
+
+Build
+-----
+
+The view can be built as a maven project.
+
+    mvn clean install
+
+The build will produce the view archive.
+
+    target/pig-0.1.0-SNAPSHOT.jar
+
+Place the view archive on the Ambari Server and restart to deploy.    
+
+    cp pig-0.1.0-SNAPSHOT.jar /var/lib/ambari-server/resources/views/
+    ambari-server restart
+
+View Definition
+-----
+
+    <!-- HDFS Configs -->
+    <parameter>
+        <name>webhdfs.url</name>
+        <description>WebHDFS FileSystem URL (example: webhdfs://namenode.host:50070)</description>
+        <required>true</required>
+    </parameter>
+
+    <parameter>
+        <name>webhdfs.username</name>
+        <description>User and doAs for proxy user for HDFS</description>
+        <required>false</required>
+    </parameter>
+
+    <!-- WebHCat Configs -->
+    <parameter>
+        <name>webhcat.url</name>
+        <description>WebHCat URL (example: http://webhcat.host:50111/templeton/v1)</description>
+        <required>true</required>
+    </parameter>
+
+    <parameter>
+        <name>webhcat.username</name>
+        <description>User and doAs for proxy user for WebHCat</description>
+        <required>false</required>
+    </parameter>
+
+    <!-- General Configs -->
+    <parameter>
+        <name>dataworker.username</name>
+        <description>The username (defaults to ViewContext username)</description>
+        <required>false</required>
+    </parameter>
+
+    <parameter>
+        <name>scripts.dir</name>
+        <description>HDFS directory path to store Pig scripts (example: /tmp/${username}/scripts)</description>
+        <required>true</required>
+    </parameter>
+
+    <parameter>
+        <name>jobs.dir</name>
+        <description>HDFS directory path to store Pig job status (example: /tmp/${username}/jobs)</description>
+        <required>true</required>
+    </parameter>
+
+    <parameter>
+        <name>store.dir</name>
+        <description>HDFS directory to store meta information about Pig scripts and jobs (example: /tmp/${username}/store)</description>
+        <required>false</required>
+    </parameter>
+
+Cluster Configuration
+-----
+Configure HDFS for a proxy user. In core-site.xml, add the following properties:
+
+    hadoop.proxyuser.root.hosts=*
+    hadoop.proxyuser.root.groups=*
+    hadoop.proxyuser.hcat.hosts=*
+    hadoop.proxyuser.hcat.groups=*
+
+Configure WebHCat for a proxy user. In webhcat-site.xml, add the following properties:
+
+    webhcat.proxyuser.hcat.hosts=*
+    webhcat.proxyuser.hcat.groups=*
+
+Create Hadoop users and make members of the hdfs, hadoop and users groups. For example, to create a user "admin": 
+
+    useradd -G hdfs admin
+    usermod -a -G users admin
+    usermod -a -G hadoop admin
+
+Check the "admin" user has the correct group membership.
+
+    id admin
+    uid=1002(admin) gid=1002(admin) groups=1002(admin),100(users),503(hadoop),498(hdfs)
+
+
+Single Node Cluster
+-----
+
+The following section describes how to use the [Ambari Vagrant](https://cwiki.apache.org/confluence/display/AMBARI/Quick+Start+Guide) setup to create a single-node cluster with the Pig View. 
+
+Install Ambari Server and Ambari Agent.
+
+Manually register Ambari Agent with Server.
+
+Setup and Start Ambari Server.
+
+Create Blueprint using the provided [blueprint.json](blueprint.json) file.
+  
+    POST
+    http://c6401.ambari.apache.org:8080/api/v1/blueprints/pig-view
+
+Create Cluster using the provided [clustertemplate.json](clustertemplate.json) file
+    
+    POST
+    http://c6401.ambari.apache.org:8080/api/v1/clusters/PigView
+
+After the cluster is created, deploy the Pig View into Ambari.
+
+    cp pig-0.1.0-SNAPSHOT.jar /var/lib/ambari-server/resources/views/
+    ambari-server restart
+
+From the Ambari Administration interface, create a Pig view instance.
+
+|Property|Value|
+|---|---|
+| Details: Instance Name | PIG_1 |
+| Details: Display Name | Pig |
+| Details: Description | Save and execute Pig scripts |
+| Properties: webhdfs.url | webhdfs://c6401.ambari.apache.org:50070 |
+| Properties: webhcat.url | http://c6401.ambari.apache.org:50111/templeton/v1 |
+| Properties: scripts.dir | /tmp/${username}/scripts |
+| Properties: jobs.dir | /tmp/${username}/jobs |
+
+Login to Ambari as "admin" and browse to the view instance.
+
+    http://c6401.ambari.apache.org:8080/#/main/views/PIG/0.1.0/PIG_1

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/src/main/resources/ui/pig-web/app/styles/style.less
----------------------------------------------------------------------
diff --git a/contrib/views/pig/src/main/resources/ui/pig-web/app/styles/style.less b/contrib/views/pig/src/main/resources/ui/pig-web/app/styles/style.less
index c8b8576..b9c248a 100644
--- a/contrib/views/pig/src/main/resources/ui/pig-web/app/styles/style.less
+++ b/contrib/views/pig/src/main/resources/ui/pig-web/app/styles/style.less
@@ -24,7 +24,7 @@
 @import './../../bower_components/bootstrap/less/bootstrap.less';
 
 .wrap {
-  padding: 15px;
+  padding: 0px;
 }
 
 .moz-padding (@selector, @pre: ~'', @padding) {
@@ -172,7 +172,7 @@
               text-align: left;
               padding: 0;
               &:hover {
-                color: darken(#fff, 30%);
+                color: #fff;
                 text-decoration: none;
               }
             }
@@ -374,6 +374,7 @@
       padding: 5px;
       background-color: #f5f5f5;
       border-bottom: 1px solid #dddddd;
+      border-radius: 4px;
       .argadd {
         font-size: 13px;
         width:10%;
@@ -486,7 +487,7 @@
       width: 140px;
     }
     th:last-child {
-      width: 110px;
+      width: 260px;
     }
     td > h4 {
       margin: 0;
@@ -506,6 +507,14 @@
   }
 }
 
+.editor-container.CodeMirror-scroll {
+    background-color: #fff;
+}
+
+.main-content {
+    padding-left: 0px;
+}
+
 .job-container {
   .progress-wrap {
     .base-transition( width 200ms linear;);
@@ -535,6 +544,8 @@
     .common-shadow-inset;
     height: 215px;
     border-bottom: 1px solid #dddddd;
+    cursor: not-allowed;
+    background-color: #fcfcfc;
     .CodeMirror-gutters {
       background-color: #fcfcfc;
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig.hbs b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig.hbs
index 881fd82..bf27deb 100644
--- a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig.hbs
+++ b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig.hbs
@@ -48,7 +48,7 @@
 
       {{outlet alert}}
     </div>
-    <div class="col-md-9">
+    <div class="col-md-9 main-content">
       {{outlet}}
     </div>
   </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/history.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/history.hbs b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/history.hbs
index 7e7eb96..7cba9d5 100644
--- a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/history.hbs
+++ b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/history.hbs
@@ -23,7 +23,7 @@
   <table class="table table-striped ">
     <thead> 
       <tr class="label-row">
-        <th>{{t 'common.date'}}</th>
+        <th class="first">{{t 'common.date'}}</th>
         <th>{{t 'scripts.script'}}</th>
         <th>{{t 'job.status'}}</th> 
         <th>{{t 'history.duration'}}</th>
@@ -45,10 +45,10 @@
         <td>{{#unless jobInProgress}}{{durationTime}}{{/unless}}</td>
         <td>
           {{#unless jobInProgress}}
-            <a {{action 'logsPopup' this}} href="#" title="Logs"> <i class="fa fa-file-text-o"></i></a>
-            <a {{action 'resultsPopup' this}} href="#" title="Results"> <i class="fa fa-table"></i></a>
+            <a {{action 'logsPopup' this}} href="#"> <i class="fa fa-file-text-o"></i> {{t 'job.logs'}}</a>
+            <a {{action 'resultsPopup' this}} href="#"> <i class="fa fa-table"></i> {{t 'job.results'}}</a>
           {{/unless}}
-          <a href="#" {{action 'deleteJob' this}} title="Delete"><i class="fa fa-trash-o"></i></a>
+          <a {{action 'deleteJob' this}} href="#"><i class="fa fa-trash-o"></i> {{t 'common.delete'}}</a>
         </td>
       </tr>
     {{/each}}
@@ -61,4 +61,4 @@
 
 {{#if content}}
   {{partial 'partials/paginationControls'}}
-{{/if}}
\ No newline at end of file
+{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/udfs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/udfs.hbs b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/udfs.hbs
index ff901b6..dab5a73 100644
--- a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/udfs.hbs
+++ b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/pig/udfs.hbs
@@ -36,7 +36,7 @@
           <td> {{this.name}}</td>
           <td> {{this.path}}</td>
           <td> {{this.owner}}</td>
-          <td><a href="#" {{action "deleteUdf" this}} >{{t 'common.delete'}}</a></td>
+          <td><a href="#" {{action "deleteUdf" this}} ><i class="fa fa-trash-o"></i> {{t 'common.delete'}}</a></td>
         </tr>
     {{/each}}
     </tbody>
@@ -50,4 +50,4 @@
     <div class="alert alert-info" role="alert">{{t 'udfs.noUDFs'}}</div>
   {{/unless}}
 
-</div>
\ No newline at end of file
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/script/job.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/script/job.hbs b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/script/job.hbs
index bf406a9..5b42f18 100644
--- a/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/script/job.hbs
+++ b/contrib/views/pig/src/main/resources/ui/pig-web/app/templates/script/job.hbs
@@ -55,7 +55,7 @@
       <div class="panel-heading">
         <h4 class="panel-title">
           <a data-toggle="collapse" href="#scriptResults">
-            <i class="toggle-icon fa fa-fw fa-chevron-right"></i>
+            <i class="toggle-icon fa fa-fw fa-chevron-right fa-rotate-90"></i>
             {{t 'job.results'}}
           </a>
           {{#if jobResults.isFulfilled }}
@@ -63,7 +63,7 @@
           {{/if}}
         </h4>
       </div>
-      {{#view "view.collapsePanel" id="scriptResults" class="panel-collapse collapse" }}
+      {{#view "view.collapsePanel" id="scriptResults" class="panel-collapse collapse in" }}
         <div class="panel-body">
         {{#if jobResults.isPending}}
           <pre><div class="spinner-sm"></div></pre>
@@ -112,12 +112,12 @@
       <div class="panel-heading">
         <h4 class="panel-title">
           <a data-toggle="collapse" href="#scriptDetails">
-            <i class="toggle-icon fa fa-fw fa-chevron-right fa-rotate-90"></i>
+            <i class="toggle-icon fa fa-fw fa-chevron-right"></i>
             {{t 'job.script_details'}}
           </a>
         </h4>
       </div>
-      {{#view "view.collapsePanel" id="scriptDetails" class="panel-collapse collapse in" }}
+      {{#view "view.collapsePanel" id="scriptDetails" class="panel-collapse collapse" }}
         <div class="panel-body body-title">
           {{t 'job.script_contents'}}:
         </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/src/main/resources/ui/pig-web/app/translations.js
----------------------------------------------------------------------
diff --git a/contrib/views/pig/src/main/resources/ui/pig-web/app/translations.js b/contrib/views/pig/src/main/resources/ui/pig-web/app/translations.js
index e1bb083..c7bf0b7 100644
--- a/contrib/views/pig/src/main/resources/ui/pig-web/app/translations.js
+++ b/contrib/views/pig/src/main/resources/ui/pig-web/app/translations.js
@@ -30,7 +30,7 @@ Ember.I18n.translations = {
     'history':"History",
     'clone':"Clone",
     'cancel':"Cancel",
-    'discard_changes':"Discard changes",
+    'discard_changes':"Discard Changes",
     'arguments':"Arguments",
     'errorLog':"Stack Trace",
     'showErrorLog':"Show Stack Trace",
@@ -59,14 +59,14 @@ Ember.I18n.translations = {
       'create_script':'New Script',
       'unsaved_changes_warning':'You have unsaved changes in script.',
       'script_title_placeholder': 'Script name',
-      'file_path_placeholder':'Full path to script file',
+      'file_path_placeholder':'/hdfs/path/to/pig/script',
       'file_path_hint':'Leave empty to create file automatically.',
       'copy_created_massage':'{{title}} created successfully.',
       'copy_created':'Copy Created',
       'continue_editing':'Continue Editing',
       'go_to_copy':'Go to Copy',
 
-      'error_empty_title':'Title can not be empty!',
+      'error_empty_title':'Name cannot be empty',
 
       'confirm_delete':'Confirm Delete',
       'confirm_delete_massage':'Are you sure you want to delete {{title}} script?'
@@ -76,17 +76,17 @@ Ember.I18n.translations = {
       'arg_present':'Argument already present',
       'file_exist_error':'File already exist',
       'script_saved':'{{title}} saved!',
-      'script_created':'{{title}} created!',
-      'script_deleted':'{{title}} deleted!',
-      'create_failed':'Failed to create script!',
-      'delete_failed':'Delete failed!',
+      'script_created':'{{title}} created',
+      'script_deleted':'{{title}} deleted',
+      'create_failed':'Failed to create script',
+      'delete_failed':'Delete failed',
       'save_error':'Error while saving script',
       'save_error_reason':'{{message}}',
       'rename_unfinished':'Please rename script first.'
     }
   },
   'editor':{
-    'title_updated':'Title updated.',
+    'title_updated':'Name updated',
     'pig_argument':'Pig argument',
     'pighelper':'PIG helper',
     'udfhelper':'UDF helper',
@@ -109,14 +109,14 @@ Ember.I18n.translations = {
     'jobId':'Job ID',
     'started':'Started',
     'noJobs': "No jobs to display",
-    'kill_job': "Kill job",
+    'kill_job': "Kill Job",
     'script_details': "Script Details",
     'script_contents': "Script contents",
     'alert':{
       'job_started' :'Job started!',
-      'job_killed' :'{{title}} job killed!',
-      'job_kill_error' :'Job kill failed!',
-      'start_filed' :'Job failed to start!',
+      'job_killed' :'{{title}} job killed',
+      'job_kill_error' :'Job kill failed',
+      'start_filed' :'Job failed to start',
       'load_error' :'Error loading job. Reason: {{message}}',
       'stdout_error' :'Error loading STDOUT. \n Status: {{status}} Message: {{message}}',
       'stderr_error' :'Error loading STDERR. \n Status: {{status}} Message: {{message}}',
@@ -145,15 +145,15 @@ Ember.I18n.translations = {
     },
     'noUDFs': "No UDFs to display",
     'alert':{
-      'udf_created':'{{name}} created!',
-      'udf_deleted':'{{name}} deleted!',
-      'create_failed':'Failed to create UDF!',
-      'delete_failed':'Delete failed!'
+      'udf_created':'{{name}} created',
+      'udf_deleted':'{{name}} deleted',
+      'create_failed':'Failed to create UDF',
+      'delete_failed':'Delete failed'
     },
     'modal':{
       'create_udf':'Create UDF',
       'udf_name':'UDF name',
-      'hdfs_path':'HDFS path'
+      'hdfs_path':'/hdfs/path/to/udf'
     }
   },
   'history':{
@@ -162,8 +162,8 @@ Ember.I18n.translations = {
     'load_error':'Error loading pig history.'
   },
   'splash':{
-    'welcome':'Welcome to Apache Pig UI',
-    'please_wait':'Please wait while we test connection to services',
+    'welcome':'Welcome to the Pig View',
+    'please_wait':'Testing connection to services...please wait.',
     'storage_test':'Storage test',
     'hdfs_test':'HDFS test',
     'webhcat_test':'WebHCat test'

http://git-wip-us.apache.org/repos/asf/ambari/blob/5fc87355/contrib/views/pig/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/contrib/views/pig/src/main/resources/view.xml b/contrib/views/pig/src/main/resources/view.xml
index 9c92a3b..89e3c56 100644
--- a/contrib/views/pig/src/main/resources/view.xml
+++ b/contrib/views/pig/src/main/resources/view.xml
@@ -35,7 +35,7 @@
     <!-- WebHCat Configs -->
     <parameter>
         <name>webhcat.url</name>
-        <description>WebHCat URL (example: http://webhcat.host:50111/templeton)</description>
+        <description>WebHCat URL (example: http://webhcat.host:50111/templeton/v1)</description>
         <required>true</required>
     </parameter>
 
@@ -46,7 +46,6 @@
     </parameter>
 
     <!-- General Configs -->
-
     <parameter>
         <name>dataworker.username</name>
         <description>The username (defaults to ViewContext username)</description>
@@ -55,19 +54,19 @@
 
     <parameter>
         <name>scripts.dir</name>
-        <description>HDFS directory path to store Pig scripts (example: /users/${username})</description>
+        <description>HDFS directory to store Pig scripts (example: /user/${username}/scripts)</description>
         <required>true</required>
     </parameter>
 
     <parameter>
         <name>jobs.dir</name>
-        <description>HDFS directory path to store Pig job status (example: /users/${username})</description>
+        <description>HDFS directory to store Pig job status (example: /user/${username}/jobs)</description>
         <required>true</required>
     </parameter>
 
     <parameter>
         <name>store.dir</name>
-        <description>HDFS directory to store meta information about Pig scripts and jobs (example: /users/${username})</description>
+        <description>HDFS directory to store meta information about Pig scripts and jobs (example: /user/${username}/store)</description>
         <required>false</required>
     </parameter>