情景假设
仅仅产出关于结构数据的数据报告无法使上级满足,因此需要使用其他方法展现数据价值。
提出第二个问题:被浏览最多次的商品销售得最多吗?
hadoop可以在不重建整个数据库得情况下存储非结构和半结构数据,因此我们可以存储和处理日志事件数据。在这一章,我们会使用网页点击流数据(使用Flume来提取)。并且我们会实时提取、转换样本网络点击流数据
Flume是一个可伸缩的实时框架,当您将数据传输到可伸缩的处理平台(如Hadoop)时,可以遍历、过滤和聚合数据。
将结构数据和非结构数据关联起来
1 上传数据
首先将网络日志数据从本地上传到HDFS。在终端中使用代码:
sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse/original_access_logs
sudo -u hdfs hadoop fs -copyFromLocal /opt/examples/log_file/access.log.2 /user/hive/warehouse/original_access_logs
上传完成后可以使用
hadoop fs -ls /user/hive/warehouse/original_access_logs
来确认是否上传日志数据。
2 建立Hive表并通过Impala和Hue查询数据
建立表:
(1)利用Hive的SerDes,
SERDES是英文SERializer(串行器)/DESerializer(解串器)的简称。它是一种主流的时分多路复用(TDM)、点对点(P2P)的串行通信技术。即在发送端多路低速并行信号被转换成高速串行信号,经过传输媒体(光缆或铜线),最后在接收端高速串行信号重新转换成低速并行信号。这种点对点的串行通信技术充分利用传输媒体的信道容量,减少所需的传输信道和器件引脚数目,提升信号的传输速度,从而大大降低通信成本。
系统的设计师们会采用串行器/解串器(SERDES)技术的高速串行接口来取代传统的并行总线架构。基于SERDES的设计增加了带宽,减少了信号数量,同时带来了诸如减少布线冲突、降低开关噪声、更低的功耗和封装成本等许多好处。而SERDES技术的主要缺点是需要非常精确、超低抖动的元件来提供用于控制高数据速率串行信号所需的参考时钟。即使严格控制元件布局,使用长度短的信号并遵循信号走线限制,这些接口的抖动余地仍然是非常小的。
使用正则表达式将日志文件解析为独立的fields
(2)将数据从中间表转换为不需要SerDe的表中。这可以提高查询速度(当使用Impala进行查询时)
我们将使用一个名为Beeline的Hive的命令行JDBC用户来查询Hive表。首先在终端将其激活:
beeline -u jdbc:hive2://quickstart:/default -n admin -d org.apache.hive.jdbc.Hivedriver
接着在terminal中使用网页上的代码完成上面两个步骤即可。由于Impala不市场更新中间数据,因此当创建新表时我们需要更新中间数据。所以接下来我们需要打开HUE界面使用代码:
invalidate metadata;
并刷新表的列表,就可以看到日志数据表。
继续使用SQL语句查询tokenized_access_logs中的数据,可以得出:
对比之前的产品购买前十名,可以看出有一个产品经常被浏览但从未被购买——其实是因为在产品界面的销售路径存在拼写错误,导致没有收集到相关信息。