Hue

一、概念

  1. HUE=Hadoop User Experience
  2. Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。
  3. 通过使用Hue,可以在浏览器端的Web控制台上与Hadoop集群进行交互,来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行HiveSQL语句,浏览HBase数据库等等。

二、Hue能做什么

1、访问HDFS和文件浏览
2、通过web调试和开发hive以及数据结果展示
3、查询solr和结果展示,报表生成
4、通过web调试和开发impala交互式SQL Query
5、spark调试和开发
6、Pig开发和调试
7、oozie任务的开发,监控,和工作流协调调度
8、Hbase数据查询和修改,数据展示
9、Hive的元数据(metastore)查询
10、MapReduce任务进度查看,日志追踪
11、创建和提交MapReduce,Streaming,Java job任务
12、Sqoop2的开发和调试
13、Zookeeper的浏览和编辑
14、数据库(MySQL,PostGres,SQlite,Oracle)的查询和展示

三、oozie执行流介绍

Bundle
Schedule
WorkFlow
Action

他们之间的关系是一个Bundle可以包括多个Schedule,一个Schedule只可以有一个Workflow,一个Workflow可以包含多个Action,每个Action里面可以包含一个脚本,脚本类型支持很多种,如 Java map-reduce, Streaming map-reduce, Pig, Hive, Sqoop and Distcp。下图是一个WorkFlow,同时在一个Workflow中你可以定义Action执行策略,前提有多个Action。

四、oozie系统常量介绍

常量表示形式 含义说明
${coord:minutes(int n)} 返回日期时间:从一开始,周期执行n分钟
${coord:hours(int n)} 返回日期时间:从一开始,周期执行n * 60分钟
${coord:days(int n)} 返回日期时间:从一开始,周期执行n 24 60分钟
${coord:months(int n)} 返回日期时间:从一开始,周期执行n M 24 * 60分钟(M表示一个月的天数)
${coord:endOfDays(int n)} 返回日期时间:从当天的最晚时间(即下一天)开始,周期执行n 24 60分钟
${coord:endOfMonths(1)} 返回日期时间:从当月的最晚时间开始(即下个月初),周期执行n 24 60分钟
${coord:current(int n)} 返回日期时间:从一个Coordinator动作(Action)创建时开始计算,第n个dataset实例执行时间
${coord:dataIn(String name)} 在输入事件(input-events)中,解析dataset实例包含的所有的URI
${coord:dataOut(String name)} 在输出事件(output-events)中,解析dataset实例包含的所有的URI
${coord:offset(int n, String timeUnit)} 表示时间偏移,如果一个Coordinator动作创建时间为T,n为正数表示向时刻T之后偏移,n为负数向向时刻T之前偏移,timeUnit表示时间单位(选项有MINUTE、HOUR、DAY、MONTH、YEAR)
${coord:hoursInDay(int n)} 指定的第n天的小时数,n>0表示向后数第n天的小时数,n=0表示当天小时数,n<0表示向前数第n天的小时数
${coord:daysInMonth(int n)} 指定的第n个月的天数,n>0表示向后数第n个月的天数,n=0表示当月的天数,n<0表示向前数第n个月的天数
${coord:tzOffset()} ataset对应的时区与Coordinator Job的时区所差的分钟数
${coord:latest(int n)} 最近以来,当前可以用的第n个dataset实例
${coord:future(int n, int limit)} 当前时间之后的dataset实例,n>=0,当n=0时表示立即可用的dataset实例,limit表示dataset实例的个数
${coord:nominalTime()} nominal时间等于Coordinator Job启动时间,加上多个Coordinator Job的频率所得到的日期时间。例如:start=”2009-01-01T24:00Z”,end=”2009-12-31T24:00Z”,frequency=” $ {coord:days(1)}”,frequency=”${coord:days(1)}”,则nominal时间为:2009-01-02T00:00Z、2009-01-03T00:00Z、2009-01-04T00:00Z、…、2010-01-01T00:00Z
${coord:actualTime()} Coordinator动作的实际创建时间。例如:start=”2011-05-01T24:00Z”,end=”2011-12-31T24:00Z”,frequency=”${coord:days(1)}”,则实际时间为:2011-05-01,2011-05-02,2011-05-03,…,2011-12-31
${coord:user()} 启动当前Coordinator Job的用户名称
${coord:dateOffset(String baseDate, int instance, String timeUnit)} 计算新的日期时间的公式:newDate = baseDate + instance * timeUnit,如:baseDate=’2009-01-01T00:00Z’,instance=’2′,timeUnit=’MONTH’,则计算得到的新的日期时间为’2009-03-01T00:00Z’。
${coord:formatTime(String timeStamp, String format)} 格式化时间字符串,format指定模式
例如:
昨天日期
${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, ‘DAY’), ‘yyyyMMdd’)}
这个系统常量可以放在Schedule中传参给Workflow.

五、oozie向shell传参

参数处理    说明
$#    传递到脚本的参数个数
$*    以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$    脚本运行的当前进程ID号
$!    后台运行的最后一个进程的ID号
$@    与$*相同,但是使用时加引号,并在引号中返回每个参数。如" $@“用「”」括起来的情况、以"$1" “$2” … " $n" 的形式输出所有参数。
$-    显示Shell使用的当前选项,与set命令功能相同。
$?    显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

六、impala-shell基本知识

参数 描述
-B or —delimited 导致使用分隔符分割的普通文本格式打印查询结果。当为其他 Hadoop 组件生成数据时有用。对于避免整齐打印所有输出的性能开销有用,特别是使用查询返回大量的结果集进行基准测试的时候。使用 —output_delimiter 选项指定分隔符。使用 -B 选项常用于保存所有查询结果到文件里而不是打印到屏幕上。在 Impala 1.0.1 中添加
–print_header 是否打印列名。整齐打印时是默认启用。同时使用 -B 选项时,在首行打印列名
-o filename or —output_file filename 保存所有查询结果到指定的文件。通常用于保存在命令行使用 -q 选项执行单个查询时的查询结果。对交互式会话同样生效;此时你只会看到获取了多少行数据,但看不到实际的数据集。当结合使用 -q 和 -o 选项时,会自动将错误信息输出到 /dev/null(To suppress these incidental messages when combining the -q and -o options, redirect stderr to /dev/null)。在 Impala 1.0.1 中添加
–output_delimiter=character 当使用 -B 选项以普通文件格式打印查询结果时,用于指定字段之间的分隔符(Specifies the character to use as a delimiter between fields when query results are printed in plain format by the -B option)。默认是制表符 tab (’\t’)。假如输出结果中包含了分隔符,该列会被引起且/或转义( If an output value contains the delimiter character, that field is quoted and/or escaped)。在 Impala 1.0.1 中添加
-p or —show_profiles 对 shell 中执行的每一个查询,显示其查询执行计划 (与 EXPLAIN 语句输出相同) 和发生低级故障(low-level breakdown)的执行步骤的更详细的信息
-h or —help 显示帮助信息
-i hostname or —impalad=hostname 指定连接运行 impalad 守护进程的主机。默认端口是 21000。你可以连接到集群中运行 impalad 的任意主机。假如你连接到 impalad 实例通过 —fe_port 标志使用了其他端口,则应当同时提供端口号,格式为 hostname:port
-q query or —query=query 从命令行中传递一个查询或其他 shell 命令。执行完这一语句后 shell 会立即退出。限制为单条语句,可以是 SELECT, CREATE TABLE, SHOW TABLES, 或其他 impala-shell 认可的语句。因为无法传递 USE 语句再加上其他查询,对于 default 数据库之外的表,应在表名前加上数据库标识符(或者使用 -f 选项传递一个包含 USE 语句和其他查询的文件)
-f query_file or —query_file=query_file 传递一个文件中的 SQL 查询。文件内容必须以分号分隔
-k or —kerberos 当连接到 impalad 时使用 Kerberos 认证。如果要连接的 impalad 实例不支持 Kerberos,将显示一个错误
-s kerberos_service_name or —kerberos_service_name=name Instructs impala-shell to authenticate to a particular impalad service principal. 如何没有设置 kerberos_service_name ,默认使用 impala。如何启用了本选项,而试图建立不支持 Kerberos 的连接时,返回一个错误(If this option is used in conjunction with a connection in which Kerberos is not supported, errors are returned)
-V or —verbose 启用详细输出
–quiet 关闭详细输出
-v or —version 显示版本信息
-c 查询执行失败时继续执行
-r or —refresh_after_connect 建立连接后刷新 Impala 元数据,与建立连接后执行 REFRESH 语句效果相同
-d default_db or —database=default_db 指定启动后使用的数据库,与建立连接后使用 USE 语句选择数据库作用相同,如果没有指定,那么使用 default 数据库
-l 启用 LDAP 认证
-u 当使用 -l 选项启用 LDAP 认证时,提供用户名(使用短用户名,而不是完整的 LDAP 专有名称(distinguished name)) ,shell 会提示输入密码