使用Hive和iReport进行大数据分析

每个JJ Abrams的电视连续剧疑犯追踪从主要人物芬奇先生一个下列叙述情节开始:“ 你是被监视。 政府拥有一个秘密系统-每天每天每小时都会对您进行监视的机器。 我知道是因为...我建造了它。 “当然,我们的技术人员知道得更多。 庞大的电气和软件工程师团队需要花费多年的时间来制造如此高性能的机器,而预算却是无法想象的……或者不是吗? 等一下,我们有了Hadoop ! 现在,由于有了Hadoop ,我们每个人都可以成为Finch先生,预算不高。

在JCG文章“ Hadoop模式介绍-独立,伪分布式,分布式 ”中,JCG合作伙伴Rahul Patodi解释了如何设置Hadoop 。 Hadoop项目已经产生了许多用于分析半结构化数据的工具,但是Hive也许是其中最直观的工具,因为它允许具有SQL背景的任何人提交被描述为SQL查询的MapReduce作业。 Hive可以从命令行界面执行,也可以在服务器模式下运行,而Thrift客户端充当JDBC / ODBC接口,可以访问数据分析和报告应用程序。

在本文中,我们将设置一个Hive服务器,创建一个表,使用文本文件中的数据加载它,然后使用iReport创建一个Jasper Resport。 Jasper报表在Hive服务器上执行SQL查询,然后将其转换为Hadoop执行的MapReduce作业。

注意:我使用运行OpenSuSE 12.1 Linux且安装了MySQL 5.5的Hadoop版本0.20.205,Hive版本0.7.1和iReport版本4.5。

假设你已经安装了Hadoop的下载和安装蜂巢下面的蜂巢 入门维基指令。 默认情况下, Hive是在独立Hadoop模式下运行的CLI模式下安装的。

制作多用户Hive Metastore

默认的Hive安装使用derby嵌入式数据库作为其元存储。 Metastore是Hive维护我们要通过SQL访问的数据的描述的地方。 为了使metastore同时可以从许多用户访问,必须将其移动到独立数据库中。 这是安装MySQL Metastore的方法。

  1. 将MySQL JDBC驱动程序 jar文件复制到〜/ hive-0.7.1-bin / lib目录
  2. 更改〜/ hive-0.7.1-bin / conf目录中的文件hive-default.xml中的以下属性:
    <property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://hyperion/metastore?createDatabaseIfNotExist=true</value><description>JDBC connect string for a JDBC metastore</description>
    </property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description>
    </property><property><name>javax.jdo.option.ConnectionUserName</name><value>foo</value><description>Username to connect to the database</description>
    </property><property><name>javax.jdo.option.ConnectionPassword</name><value>bar</value><description>Password to connect to the database</description>
    </property>
  3. 使用MySQL工作台或MySQL命令行实用程序使用latin1字符集创建模式。 如果Hive找不到模式,它将使用MySQL的默认字符集自行创建模式。 在我的情况下,这是UTF-8,并生成了jdbc错误。 如果要使用命令行实用程序,请键入:
    mysql> CREATE DATABASE  IF NOT EXISTS `metastore` DEFAULT CHARACTER SET latin1 COLLATE latin1_bin;
  4. 在命令提示符下键入Hive以输入Hive CLI并键入:
    hive> SHOW TABLES;
    OK
    testlines
    Time taken: 3.654 seconds
    hive>

    这将填充您新创建的metastore模式。 如果您看到任何错误,请检查您的hive-default.xml配置,并确保您的数据库模式被命名为“ metastore”,其中latin1作为默认字符集。



现在让我们用一些数据填充Hadoop Hive

我们只创建两个名为file01file02的文本文件,每个文件包含:

file01
你好世界再见世界
大家好再见大家

file02
您好Hadoop再见Hadoop
大家好,大家再见

将这些文件从本地文件系统复制到HDFS:

$ hadoop fs -mkdir HiveExample
$ hadoop fs -copyFromLocal ~/file* /user/ssake/HiveExample

转到Hive CLI并创建一个名为testlines的表,该表将在字符串数组中包含每一行的单词:

hive> create table testlines (line array<string>) row format delimited collection items terminated by ' ';

将文本文件加载到Hive中:

hive> load data inpath "/user/ssake/HiveExample/file01" INTO table testlines;
hive> load data inpath "/user/ssake/HiveExample/file02" INTO table testlines;

检查测试行现在是否包含每行的单词:

hive> select * from testlines;
OK
["Hello","World","Bye","World"]
["Hello","Everybody","Bye","Everybody"]
["Hello","Hadoop","Goodbye","Hadoop"]
["Hello","Everybody","Goodbye","Everybody"]
Time taken: 0.21 seconds

现在我们有了一个包含数据的Hive,我们可以将其作为服务器在端口10000中运行,这通常是运行hive服务器的方式:

$ HIVE_PORT=10000
$ hive --service hiveserver

通过此设置,可能有多个Thrift客户端访问我们的Hive服务器。 但是,根据Apache Hive博客 ,多线程Hive功能尚未经过全面测试,因此每个Thrift客户端使用单独的端口和Hive实例更为安全。

创建“字数统计”报告

iReport 4.5支持配置单元数据源,因此让我们使用它来创建一个以配置单元服务器作为数据源运行的报表:

1.创建一个连接到配置单元服务器的数据源

2.使用报告向导生成报告

3.在“ HiveQL查询”输入框中键入以下内容:

select word,count(word) from testlines lateral view explode(line) words as word group by word

让我们简要解释一下上述查询的作用:

我们的源表“ testlines”表只有一个名为“ line”的列,其中包含字符串数组形式的数据。 每个字符串数组代表在导入文件“ file01 ”和“ file02 ”中找到的句子中的单词。

为了正确计算所有输入文件中每个不同单词的出现次数,我们必须将源表中的字符串数组“分解”为一个新单词,其中应包含每个单词。 为此,我们将“侧视图”与HiveQL命令“ explode()”结合使用,如上所示。

在上面的HiveQL查询中,我们创建了一个名为“ words”的新图标表,该表具有一个名为“ word”的列,其中包含从“ testlines”表的每个字符串数组中找到的所有单词。

4.单击…按钮以选择所有文件,然后单击下一步。

5.在设计器视图中,单击“预览”选项卡以执行HiveQL报告

这是我们的报告:

现在,您已经准备好构建使用熟悉的JDBC接口访问Hadoop数据的应用程序!

参考:我们的W4G合作伙伴 Spyros Sakellariou 使用Hive和iReport进行大数据分析


翻译自: https://www.javacodegeeks.com/2012/02/big-data-analytics-with-hive-and.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker集群管理

docker集群管理 ps&#xff1a;docker machine docker swarm docker compose 在Docker Machine发布之前&#xff0c;你可能会遇到以下问题&#xff1a; 你需要登录主机&#xff0c;按照主机及操作系统特有的安装以及配置步骤安装Docker&#xff0c;使其能运行Docker…

从0学java_从零开始学JAVA(一.Java的基础语法)

基本语法编写 Java 程序时&#xff0c;应注意以下几点&#xff1a;大小写敏感&#xff1a;Java 是大小写敏感的&#xff0c;这就意味着标识符 Hello 与 hello 是不同的。类名&#xff1a;对于所有的类来说&#xff0c;类名的首字母应该大写。如果类名由若干单词组成&#xff0c…

mysql添加字符串日期时间_mysql学习笔记--- 字符串函数、日期时间函数

一、常见字符串函数&#xff1a;1、CHAR_LENGTH 获取长度(字符为单位)2、FORMAT 格式化3、INSERT 替换的方式插入4、INSTR 获取位置5、LEFT/RIGHT 取左、取右6、LENGTH 获取长度(字节为单位)7、LTRIM/RTRIM/TRIM 去空格(左/右/自定义)8、STRCMP 字符串比较9、CONCAT 字…

ADO.NET 核心对象简介

ADO.NET ADO.NET是.NET中一组用于和数据源进行交互的面向对象类库&#xff0c;提供了数据访问的高层接口。 ADO.NET类库在System.Data命名空间内&#xff0c;根据我们访问的不同数据库选择命名空间&#xff0c;System.Data.SqlClient。 ADO.NET类最重要的优点是支持数据库以断开…

简学LINGO(三)——实例篇

1. 装配线平衡模型 一个装配线含有一系列的工作站。在终于产品的加工过程中每一个工作站运行一种或者是几种特定的任务。装配线周期是指全部工作站完毕分配给他们各自任务所花费时间的最大值。平衡装配线的目标是为每一个工作站分配加工任务。尽可能使每一个工作站运行同样数量…

Android之卫星菜单的实现

卫星菜单是现在一个非常受欢迎的“控件”&#xff0c;很多Android程序员都趋之若鹜&#xff0c;预览如下图。传统的卫星菜单是用Animation实现的&#xff0c;需要大量的代码&#xff0c;而且算法极多&#xff0c;一不小心就要通宵Debug。本帖贴出用属性动画Animator来实现卫星菜…

为云量身定制您的服务

相信大家都听说过Amazon的AWS。作为业内最为成熟的云服务提供商&#xff0c;其运行规模&#xff0c;稳定性&#xff0c;安全性都已经经过了市场的考验。时至今日&#xff0c;越来越多的应用被部署在了AWS之上。这其中不乏Zynga及Netflix这样著名的服务。 然而这一切并没有停滞不…

在Vaadin和JSF之间选择

随着最新版本的Primefaces 3.0的发布&#xff0c;JSF终于达到了前所未有的成熟度和实用性&#xff0c;使其与其他流行的Rich Internet Applications&#xff08;RIA&#xff09;选项如Google Web Toolkit&#xff08;GWT&#xff09;&#xff0c;ExtJS&#xff0c;Vaadin&#…

flask开发restful api系列(1)

在此之前&#xff0c;向大家说明的是&#xff0c;我们整个框架用的是flask sqlalchemy redis。如果没有开发过web&#xff0c;还是先去学习一下&#xff0c;这边只是介绍如果从开发web转换到开发移动端。如果flask还不是很熟悉&#xff0c;我建议先到这个网站简单学习一下&am…

JS显示当前时间(包含农历时间)

时间格式&#xff1a; JavaScript代码&#xff1a; var sWeek new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");var dNow new Date();var CalendarData new Arra…

MyBatis操作指南-与Spring集成(基于注解)

转载于:https://www.cnblogs.com/weilu2/p/mybatis_spring_integration_basic_on_annotation.html

JVM:如何分析线程转储

本文将教您如何分析JVM线程转储&#xff0c;并查明问题的根本原因。 从我的角度来看&#xff0c;线程转储分析是掌握Java EE生产支持的任何个人最重要的技能。 您可以从线程转储快照中获取的信息量通常远远超出您的想象。 我的目标是与您分享我在过去10年中积累的有关线程转储分…

极光推送JPush的快速集成

首先到极光推送的官网上创建一个应用&#xff0c;填写对应的应用名和包名。 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置&#xff0c;然后要注意的是.so文件的放置位置&#xff1a; 在main目录下新建一个jniLibs文件夹&#xff0c;放在这个文件夹…

elk系列1之入门安装与基本操作

preface 我们每天都要查看服务器的日志&#xff0c;一方面是为了开发的同事翻找日志&#xff0c;另一方面是巡检服务器查看日志&#xff0c;而随着服务器数量以及越来越多的业务上线&#xff0c;日志越来越多&#xff0c;人肉运维相当痛苦了&#xff0c;此时&#xff0c;参考现…

Java 7 –反编译项目硬币

大家好&#xff0c;该是从2012年开始写作的时候了。正如您在其他博客中可能已经看到的那样&#xff0c;有一些更改可以使您使用Java编程时的开发人员生活变得更加轻松&#xff1a;Diamond运算符&#xff0c;Switchs中的Strings&#xff0c;尝试使用资源&#xff0c;多次捕获等 …

在Excel表里面插入背景图

工作中我们会经常用到MS Excel&#xff0c;通常我们打开MS Excel&#xff0c;里面的工作表都是空白单调的背景。当然了&#xff0c;MS Excel可以在工作簿里面插入背景图片。那么问题来了&#xff0c;如果你没有安装Microsoft Office&#xff0c;该如何在Excel文件里面插入好看的…

实现两级下拉框的联动

1.实现两级下拉框的联动。 功能&#xff1a;实现点击年级下拉框&#xff0c;加载对应科目的下拉框。 第一步&#xff1a;首先要加载年级下拉框中的数据。 01.在GradeDAL层&#xff08;数据访问层&#xff09;写一个方法&#xff0c;查询所有年级的信息。 /// <summary>//…

python连接SQL Server取多个结果集:Pymssql模块

基本的用法可以参考&#xff1a;python连接SQL Server&#xff1a;Pymssql模块 和上一篇文章中的代码&#xff0c;只取一个结果集不同&#xff0c;这次会一次运行2个sql语句&#xff0c;然后分别取出2个结果集&#xff0c;打印输出。 代码中有详细的注释&#xff0c;一看就明白…

Xen安全架构sHype/ACM策略配置图文教程

实验要求 1. 熟悉Xen虚拟化平台部署&#xff1b; 2. Xen sHype/ACM安全架构中的Simple TE和Chinese Wall策略及事实上现机制的分析与验证。 第1章 Xen环境部署 1.1 版本号选择 因为Ubuntu使用广泛。软件包易于下载。我们选择Ubuntu系统进行Xen部署…

java弹出虚拟键盘_JS实现电脑虚拟键盘的操作

本文实例为大家分享了JS实现电脑虚拟键盘的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下需求&#xff1a;1.当输入框光标聚焦时&#xff0c;电脑虚拟键盘弹出2.在输入框输入内容时&#xff0c;键盘跟着变化具体实现代码如下&#xff1a;Html部分&#xff1a;电脑键…