基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(六)

原创 2016年08月31日 16:16:51
六、Hue数据可视化实例
        本节先用Impala、DB查询示例说明Hue的数据查询和可视化功能,然后交互式地建立一个定期执行销售订单示例ETL任务的工作流,说明在Hue里是如何操作Oozie工作流引擎的。
1. Impala查询
        在Impala OLAP实例一节中执行了一些查询,现在在Hue里执行查询,直观看一下结果的图形化表示效果。
(1)登录Hue,点击图标进入“我的文档”页面。
(2)点击创建一个名为“销售订单”的新项目。
(3)点击进入Impala查询编辑页面,创建一个新的Impala文档。
(4)在Impala查询编辑页面,选择olap库,然后在编辑窗口输入下面的查询语句。
-- 按产品分类查询销售量和销售额
select t2.product_category pro_category,    
       sum(order_quantity) sum_quantity,  
       sum(order_amount) sum_amount   
  from sales_order_fact t1, product_dim t2  
 where t1.product_sk = t2.product_sk  
 group by pro_category  
 order by pro_category; 

-- 按产品查询销售量和销售额
select t2.product_name pro_name,    
       sum(order_quantity) sum_quantity,  
       sum(order_amount) sum_amount   
  from sales_order_fact t1, product_dim t2  
 where t1.product_sk = t2.product_sk  
 group by pro_name  
 order by pro_name;
        点击“执行”按钮,结果显示按产品分类的销售统计,如下图所示。接着点击“下一页”按钮,结果会显示按产品的销售统计。

(5)点击  “全屏查看结果”按钮,会全屏显示查询结果。

        产品统计结果如下图所示。


        产品统计柱状图如下图所示。
        从图中可以看到,按销售额从大到小排序的产品依次为Hard Disk Drive、Floppy Drive、Flat Panel、Keyboard和LCD Panel。

(6)回到查询编辑页,点击“另存为...”按钮,保存成名为“按产品统计”的查询。
(7)点击“新查询”按钮,按同样的方法再建立一个“按地区统计”的查询。SQL语句如下:
-- 按州查询销售量和销售额
select t3.state state,  
       count(distinct t2.customer_sk) sum_customer_num,  
       sum(order_amount) sum_order_amount   
  from sales_order_fact t1  
 inner join customer_dim t2 on t1.customer_sk = t2.customer_sk  
 inner join customer_zip_code_dim t3 on t1.customer_zip_code_sk = t3.zip_code_sk  
 group by state
 order by state;
 
-- 按城市查询销售量和销售额
select t3.city city,  
       count(distinct t2.customer_sk) sum_customer_num,  
       sum(order_amount) sum_order_amount   
  from sales_order_fact t1  
 inner join customer_dim t2 on t1.customer_sk = t2.customer_sk  
 inner join customer_zip_code_dim t3 on t1.customer_zip_code_sk = t3.zip_code_sk  
 group by city  
 order by city;
        城市统计饼图如下图所示。


        从图中可以看到,mechanicsburg市的销售占整个销售额的一半。

(8)再建立一个“按年月统计”的查询,这次使用动态表单功能,运行时输入年份。SQL语句如下。
-- 按年月查询销售量和销售额
select t4.year*100 + t4.month ym,  
       sum(order_quantity) sum_quantity,  
       sum(order_amount) sum_amount   
  from sales_order_fact t1    
 inner join order_date_dim t4 on t1.order_date_sk = t4.date_sk 
 where (t4.year*100 + t4.month) between $ym1 and $ym2 
 group by ym
 order by ym;
        注意$ym1和$ym2是动态参数,执行此查询,会出现输入框要求输入参数,如下图所示。
        查询2016一年的销售情况,ym1输入201601,ym2输入201612,然后点击“执行查询”,结果线形图如下图所示。
        此结果按查询语句中的order by子句排序。
        至此,我们定义了三个Impala查询,进入“我的文档”页面可以看到default项目中有三个文档,而“销售订单”项目中没有文档,如下图所示。
(9)把这三个文档移动到“销售订单”项目中。
        点击右面列表中的“default”按钮,会弹出“移动到某个项目”页面,点击“销售订单”,如下图所示。

        将三个查询文档都如此操作后,在“销售订单”项目中会出现此三个文档,如下图所示。
        以上用销售订单的例子演示了一下Hue中的Impala查询及其图形化表示。严格地说,无论是Hue还是Zeppelin,在数据可视化上与传统的BI产品相比还很初级,它们只是提供了几种常见的图表,还缺少基本的上卷、下钻、切块、切片、百分比等功能,如果只想用Hadoop生态圈里的数据可视化工具,也只能期待其逐步完善吧。

(10)最后提供一个Hue文档中通过经纬度进行地图定位的示例,其截图如下所示。

2. DB查询
        缺省情况下Hue没有启用DB查询,如果点击“Query Editors” -> “DB 查询”,会提示“当前没有已配置的数据库。”,如下图所示。
        按如下方法配置DB查询。
(1)进入CDH Manager的“Hue” -> “配置”页面,在“类别中选择“服务范围” -> “高级”,然后编辑“hue_safety_valve.ini 的 Hue 服务高级配置代码段(安全阀)”配置项,填写类似如下内容:
[librdbms]
  [[databases]]
    [[[mysql]]]
      # Name to show in the UI.
      nice_name="MySQL DB"
      name=hive
      engine=mysql
      host=172.16.1.102
      port=3306
      user=root
      password=mypassword
        这里配置的是一个MySQL数据库,如下图所示。

 (2)点击“保存更改”按钮,然后点击“操作” -> “重启”,重启Hue服务。

        此时再次在Hue里点击“Query Editors” -> “DB 查询”,则会出现MySQL中hive库表,此库存放的是Hive元数据。此时就可以输入SQL进行查询了,如下图所示。



3. 建立定期执行销售订单示例的ETL工作流
        下面说明建立工作流的详细步骤。
(1)登录Hue的Web主页,点击“Workflows” -> “编辑器” -> “Workflow”,打开“Workflow 编辑器”页面,如下图所示。

(2)点击“Create”按钮,新建一个工作流,页面如下图所示。

        从图中看到,工作流预定义了16种操作,而且Start、End、Kill节点已经存在,不需要(也不能)自己定义。

(3)点击图标,打开工作区页面,如下图所示。

(4)点击图标,显示HDFS上的工作区目录。
(5)执行下面的命令,将相关依赖文件拷贝至工作区目录。
hdfs dfs -put -f /root/mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /user/hue/oozie/workspaces/hue-oozie-1472779112.59
hdfs dfs -put -f /etc/hive/conf.cloudera.hive/hive-site.xml /user/hue/oozie/workspaces/hue-oozie-1472779112.59
hdfs dfs -put -f /root/regular_etl.sql /user/hue/oozie/workspaces/hue-oozie-1472779112.59
hdfs dfs -put -f /root/month_sum.sql /user/hue/oozie/workspaces/hue-oozie-1472779112.59
(6)回到“Workflow 编辑器”页面,拖拽添加三个“Sqoop 1”操作,如下图所示。
        可以看到,因为三个Sqoop并行处理,所以工作流中自动添加了fork节点和join节点。
(7)编辑三个“Sqoop 1”操作。
        第一个“Sqoop 1”操作改名为“sqoop-customer”
        a. Sqoop 命令填写如下命令,用import全量装载客户表:
import --connect jdbc:mysql://cdh1:3306/source?useSSL=false --username root --password mypassword --table customer --hive-import --hive-table rds.customer --hive-overwrite
        b. 点击“文件”,在“选择文件”页面点击“工作区”,选择hive-site.xml文件。
        c. 再次点击“文件”,在“选择文件”页面点击“工作区”,选择mysql-connector-java-5.1.38-bin.jar文件。
        第二个“Sqoop 1”操作改名为“sqoop-product”
        a. Sqoop 命令填写如下命令,用import全量装载产品表:
import --connect jdbc:mysql://cdh1:3306/source?useSSL=false --username root --password mypassword --table product --hive-import --hive-table rds.product --hive-overwrite
        b. 点击“文件”,在“选择文件”页面点击“工作区”,选择hive-site.xml文件。
        c. 再次点击“文件”,在“选择文件”页面点击“工作区”,选择mysql-connector-java-5.1.38-bin.jar文件。
        第三个“Sqoop 1”操作改名为“sqoop-sales_order”
        a. Sqoop 命令填写如下命令,用job增量装载销售订单表:
job --exec myjob_incremental_import --meta-connect jdbc:hsqldb:hsql://cdh2:16000/sqoop
        b. 点击“文件”,在“选择文件”页面点击“工作区”,选择hive-site.xml文件。
        c. 再次点击“文件”,在“选择文件”页面点击“工作区”,选择mysql-connector-java-5.1.38-bin.jar文件。
(8)修改工作流的名称为“regular_etl”,添加工作流的描述为“销售订单定期ETL”,fork节点的名称为“fork-node”,join节点的名称为“join-node”。现在的工作流如下图所示。
(9)在“join-node”节点下,拖拽添加一个“Hive 脚本”操作,“脚本”选择工作区目录下的regular_etl.sql文件,“Hive XML”选择工作区目录下的hive-site.xml文件。修改操作名称为“hive-every-day”。此操作每天执行ETL主流程。
(10)在“hive-every-day”操作下,拖拽添加一个“Hive 脚本”操作,“脚本”选择工作区目录下的month_sum.sql文件,“Hive XML”选择工作区目录下的hive-site.xml文件。修改操作名称为“hive-every-month”。此操作每个月执行一次,生成上月汇总数据快照。现在的工作流如下图所示(“join-node”及其以下部分)。
(11)这步要使用一个小技巧。hive-every-month是每个月执行一次,我们是用天做判断,比如每月1日执行此操作,需要一个decision节点完成date eq 1的判断。在Hue的工作流编辑里,decision节点是由fork节点转换来的,而fork节点是碰到并发操作时自动添加的。因此需要添加一个和“hive-every-month”操作并发的操作来自动添加fork节点。这里选择“停止”操作。现在的工作流如下图所示(“hive-every-day”及其以下部分)。
(12)点击“转换为决策”,条件是如果${date eq 1}转至“hive-every-month”,否则转至“End”。因为不是1号时会转至缺省的“End”节点,所以此时已经不再需要刚才添加的“停止”操作,将其删除。现在的工作流如下图所示(“hive-every-day”及其以下部分)。
        至此我们的regular_etl工作流已经定义完成,点击图标保存,在非编辑模式下,完整的工作流如下图所示。
(13)点击“设置”,在弹出的“Workflow 设置”页面里点击“添加参数”链接,参数名为“date”,值设置为1,如下图所示。

(14)关闭“Workflow 设置”页面,点击 “提交”,弹出“提交 regular_etl?”页面,参数date值为1,如下图所示。

(15)点击“提交”按钮,工作流执行,执行成功结果如下图所示。
        前面的步骤定义了Workflow工作流,要让它定时执行还要定义Coordinator工作流。

(16)点击“Workflows” -> “编辑器” -> “Workflow”,打开“Coordinator 编辑器”页面,如下图所示。
(17)点击“Create”按钮,新建一个工作流,页面如下图所示。
(18)点击“选择 Workflow”链接,在弹出的页面中选择“regular_etl”,如下图所示。
(19)“频率”配置不变,保持缺省的每天一次。
(20)点击“添加参数”链接,将${coord:formatTime(coord:actualTime(), 'd')}作为regular_etl里变量date的值,传递给Workflow。
(21)修改Coordinator工作流的名称为“regular_etl-coord”,点击保存。
        至此我们的Coordinator工作流已经定义完成,现在的工作流在非编辑模式下如下图所示。
(22)点击  “提交”,等待Coordinator工作流执行,执行成功结果如下图所示。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

大数据交互平台Hue的优势

本文系统地讲解了Hue作为大数据分析交互平台的优势!欢迎批评指正!Hue Web应用的架构Hue 是一个Web应用,用来简化用户和Hadoop集群的交互。Hue技术架构,如下图所示,从总体上来讲,Hu...

基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(五)

五、Hue、Zeppelin比较        上一节简单介绍了Hue这种Hadoop生态圈的数据可视化组件,本节讨论另一种类似的产品——Zeppelin。首先介绍一下Zeppelin,然后说明其安装...
  • wzy0623
  • wzy0623
  • 2016年08月30日 16:17
  • 4855

MySql表链接详解(结合Hadoop中的Hive数据仓库)

在做Hadoop黑马日志分析项目的过程中,进行了表的链接。本篇博客将结合Hive详细说明Mysql表链接。: 1、统计每日的pv(浏览量)hive> create table hmbbs_pv ...

基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(二)

二、Hive、Spark SQL、Impala比较        Hive、Spark SQL和Impala三种分布式SQL查询引擎都是SQL-on-Hadoop解决方案,但又各有特点。前面已经讨论了...
  • wzy0623
  • wzy0623
  • 2016年08月19日 12:35
  • 21145

基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(三)

三、Impala OLAP实例        本节使用前面销售订单的例子说明如何使用Impala做OLAP类型的查询,以及实际遇到的问题及解决方案。为了处理SCD和行级更新,我们前面的ETL使用了Hi...
  • wzy0623
  • wzy0623
  • 2016年08月25日 14:38
  • 4495

基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(一)

一、OLAP与Impala简介1. OLAP简介        OLAP是Online Analytical Processing的缩写,意为联机分析处理。此概念最早是由关系数据库之父E.F.Codd...
  • wzy0623
  • wzy0623
  • 2016年08月17日 16:30
  • 9514

基于Hadoop生态圈的数据仓库实践 —— 进阶技术(十二)

十二、间接数据源        本节讨论如何处理间接数据源。间接数据源与维度表具有不同的粒度,因此不能直接装载进数据仓库。在这里通过修改进阶技术(八)——“多路径和参差不齐的层次”里的促销源数据说明怎...
  • wzy0623
  • wzy0623
  • 2016年08月04日 17:23
  • 3408

基于Hadoop生态圈的数据仓库实践 —— ETL(二)

二、使用Hive转换、装载数据1. Hive简介(1)Hive是什么        Hive是一个数据仓库软件,使用SQL读、写、管理分布式存储上的大数据集。它建立在Hadoop之上,具有以下功能和特...
  • wzy0623
  • wzy0623
  • 2016年07月06日 11:46
  • 8892

基于Hadoop生态圈的数据仓库实践 —— ETL(一)

一、使用Sqoop抽取数据 1. Sqoop简介         Sqoop是一个在Hadoop与结构化数据存储(如关系数据库)之间高效传输大批量数据的工具。它在2012年3月被成功孵化,现在已是Ap...
  • wzy0623
  • wzy0623
  • 2016年07月01日 22:54
  • 11487

基于Hadoop生态圈的数据仓库实践 —— ETL(三)

三、使用Oozie定期自动执行ETL1. Oozie简介(1)Oozie是什么        Oozie是一个管理Hadoop作业、可伸缩、可扩展、可靠的工作流调度系统,其工作流作业是由一系列动作构成...
  • wzy0623
  • wzy0623
  • 2016年07月11日 15:05
  • 13644
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(六)
举报原因:
原因补充:

(最多只允许输入30个字)