【转】hive简介安装 配置常见问题和例子
原文来自: http://blog.csdn.net/zhumin726/article/details/8027802
1 HIVE概述
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,HIVE的设计,可以轻松实现数据汇总,ad-hoc查询和分析大量的数据。它提供了一种称为HIVE QL的查询语言,基于sql的语法,使用户熟悉HIVE QL的语法容易做ad-hoc查询,汇总和数据分析,同时,HIVE QL也使传统的map / reduce的程序员能够插入他们的自定义映射器和减速器做更复杂的分析,可能不支持通过内置的语言能力。
HIVE不能做的事情:Hadoop是一个批量处理系统,Hadoop的工作往往具有较高的延迟,并在作业提交和调度产生大量的间接成本。因此 - HIVE查询的延迟通常是非常高(分钟),即使涉及的数据集,是非常小的(比如一个几百兆字节)。HIVE的目的是提供可以接受对小数据集或测试查询的延迟(但不是最优的)交互式数据浏览,查询。HIVE是不适合联机事务处理和不提供实时查询和行级的更新。
2 HIVE安装
2.1安装
从源代码进行安装
$ svn co http://svn.apache.org/repos/asf/hive/trunkhive
$ cd HIVE
$ ant clean package
$ cd build/dist
$ ls
README.txt
bin/ (all the shell scripts)
lib/ (required jar files)
conf/ (configuration files)
examples/ (sample input andquery files)
从稳定版本安装
下载HIVE-x.y.z:
解压缩
tar -xzvf HIVE-x.y.z.tar.gz
设置环境变量
cd HIVE-x.y.z
export HIVE_HOME={{pwd}}
export PATH=$HIVE_HOME/bin:$PATH
2.2 运行
在运行前,需要先这是环境变量HADOOP_HOME
并且在hadoop中建文件系统
$HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/HIVE/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/HIVE/warehouse
HIVE的运行方式有以下几种
Cli 命令行模式HIVE_HOME/bin/HIVE
Hwi web接口HIVE_HOME/bin/HIVE –service hwi
配置HIVE-site
<property>
<name>HIVE.hwi.listen.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>HIVE.hwi.listen.port</name>
<value>9999</value>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-0.9.0.war </value>
<description>Thisis the WAR file with the jsp content for Hive Web Interface</description>
</property>
可以通过http://ip:9999/hwi访问,界面进行操作
Hiveserver bin/hive –service hiveserver 可以使用Trift,JDBC,ODBC进行访问,默认端口10000,也可以通过环境变量设置HIVE_PORT
Jar Java调用
假如需要把HIVE的元数据存储在其他数据库中可以通过配置HIVE-site.xml来定义如下:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:MySQL://10.10.21.52:3306/hive?characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
注:一定要拷贝数据库驱动到HIVE/lib下
2.3常见问题
问题 : FAILED:Error in metadata: javax.jdo.JDODataStoreException: Error(s) were found whileauto-creating/validating the datastore for classes. The errors are printed inthe log, and are attached to this exception.
NestedThrowables:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Specified key was toolong; max key length is 1000 bytes
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
或者是
FAILED: Error in metadata: MetaException(message:Got exception:org.apache.thrift.transport.TTransportException null)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Specified key was too long; max key length is 767 bytes
FAILED: Execution Error, return code 1 fromorg.apache.hadoop.hive.ql.exec.DDLTask
解决方法:alterdatabase hivedb character set latin1;
问题:Exceptionin thread "main" java.lang.NoClassDefFoundError: jline/ArgumentCompletor$ArgumentDelimiter
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Caused by: java.lang.ClassNotFoundException: jline.ArgumentCompletor$ArgumentDelimiter
at java.NET.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.Net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
解决方法:jline版本不一致,把HADOOP_HOME/lib和HIVE_HOME/lib下的jline-**.jar版本一致就可以了,复制其中一个高版本覆盖另一个。
3 HIVE表结构
3.1数据类型
类型相关联的表中的列。支持下列基本类型:
整数
TINYINT - 1字节的整数
SMALLINT - 2个字节的整数
INT - 4字节整数
BIGINT - 8个字节的整数
布尔类型
BOOLEAN - TRUE /FALSE
浮点数
FLOAT - 单精度
双 -双精度
String类型
STRING - 在指定的字符集的字符序列
类型进行转换例如TYNTINT可以转换成INT,单不能反转,除非使用CAST,数字可以转换成字符串,字符转换成数字需要: CAST(‘1’ AS INT)
复杂类型:
Array数组
Map图
Struct结构
例如:
CREATE TABLE complex(
Col1ARRAY<INT>,
Col2MAP<STRING,INT>,
COL3 STRCUT<a:STRING,b:INT,c:DOUBLE>
)
Select col1[0],col2[‘a’],col3.b from complex;
3.2数据单元
按粒度的顺序:
数据库:单独的表和其他数据单元命名冲突的命名空间。支持create database **和use **缺省数据库名是default。
表:均质单位的数据有相同的模式。一个表的一个例子可能是PAGE_VIEWS表,每行可包括以下各列(架构):
时间戳 -这是INT类型,对应到UNIX时间戳,当网页被浏览的。
用户ID -这是标识该用户浏览页面的BIGINT类型。
page_url -是STRING类型捕获页面的位置。
referer_url -这是的的STRING,捕捉用户从那里到达当前页面的页面位置。
IP -这是字符串类型,抓住了IP地址的页面请求。
分区:每个表只能有一个或多个分区键决定如何将数据存储。分区-除了存储单元-使用户能够有效地识别出满足一定条件的行。
桶 :在每个分区中的数据可依次分为桶的表中的某些列的哈希函数值的基础上。 例如通过用户ID来划分捅,我们可以在所有用户集合的随机样本上快速计算基于用户的查询。
3.3存储格式
Hive从2个维度对表进行管理,行格式和文件格式。航格式指行和一行中的字段如何存储,按照HIVE的术语,行格式的定义由SerDe(serializer-Deserializer序列化反序列化工具)定义
如果创建表时没有使用ROW FORMAT或者STORED AS字句,那么HIVE默认使用文本格式,一行存储一个数据行。
Row format derde ‘SerDe名’ with SERDEPROPERTIES (key1=value,key2=value2)STORED AS
SEQUENCEFILE/RCFILE/ TEXTFILE…
例如ngixn日志使用:CREATE TABLE log (host STRING,identity STRING,user STRING,time STRING,request STRING,status STRING,size STRING,referer STRING,agent STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?","output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")STORED AS TEXTFILE;
4 HIVE QL
4.1DDL
显示数据库:showdatabases;
建数据库createdatabase db1;
切换数据库:usedb1;
显示所有表showtables;
显示一部分表名匹配的表 :SHOW TABLES '.*s';
建表:
CREATE TABLE invites (foo INT, bar STRING)[ PARTITIONED BY (ds STRING)];
查看表结构
DESCRIBE 表名
修改表列名
Alter table PERSON age to age1
增加表列
Alter table PERSON add columns (ageINT);
删除表DROPTABLE表名;
4.2DML
导入数据:
LOAD DATA INPATH ‘文件地址' OVERWRITE INTO TABLE表名;
4.3SQL
SELECTS and FILTERS
SELECT a.foo FROM invites a WHEREa.ds='2008-08-15';
ORDER BY
SELECT a.foo FROM invites a ORDER BY a.dsdesc/asc
INSERT OVERWRITETABLE表名
[PARTITION(..)]
select语句
GROUP BY
FROM invites a INSERT OVERWRITE TABLEevents SELECT a.bar, count(*) WHERE a.foo > 0 GROUP BY a.bar;
JOIN
FROM pokes t1 JOIN invites t2 ON (t1.bar =t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;
多表插入:
From源表名
Insert OVERWRITE table表1名select字句1
Insert OVERWRITE table表2名select字句2
Insert OVERWRITE table表3名select字句3
子查询:
Select * from (select * from … where. …) twhere t.name=’zhangsan’
视图:
Create view 视图名称
As select语句
5用户定义函数
如果你写的HIVEQL无法满足要求,可以使用HIVE的内置函数来解决。也成为用户定义函数Hive有三种UDF普通UDF,UDAF用户定义聚集函数 UDTF用户定义表生成函数
编写用户定义函数UDF
必须继承UDF,实现evaluate()方法
package com.quickjob;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public classStrip extendsUDF {
private Textresult=new Text();
public Text evaluate(Textstr){
if(str==null)
return null;
result.set(StringUtils.strip(str.toString()));
returnresult;
}
}
打包以后拖到hive_home目录下Hive命令行下加入
ADD JAR/home/hadoop/hive-0.9.0-bin/hadoop-utill-0.0.1-SNAPSHOT.jar
为JAVA类增加别名
CreateTEMPORARY FUNCTION strip AS ‘com.quickjob. Strip’
使用
selectstrip('asdsa') from pokes
编写UDAF需要继承 UADF,并且实现5个方法
init(),iterate,terminatePartial,merge,terminate
打包以后拖到hive_home目录下Hive命令行下加入
ADD JAR/home/hadoop/hive-0.9.0-bin/hadoop-utill-0.0.1-SNAPSHOT.jar;
CreateTEMPORARY FUNCTION maxnum AS ‘com.quickjob.TestUDAF’;
Select maxnum(foo)from pokes;
6JDBC链接
例子:
后台服务 ./hive --service hwi
客户端:
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection("jdbc:hive://10.10.21.53:10000/default","","");
StringquerySQL="select * from getlog t where t.URL like '%.apk' or t.URL1 like '%.apk'or t.URL2 like '%.apk' ;";
Statementstmt = con.createStatement();
ResultSetres = stmt.executeQuery(querySQL);
while (res.next()) {
System.out.println("Result: key:"+res.getString(1) +"??–>??value:"+res.getString(2));
}
return 0
【转】hive简介安装 配置常见问题和例子的更多相关文章
- 【转】 hive简介,安装 配置常见问题和例子
原文来自: http://blog.csdn.net/zhumin726/article/details/8027802 1 HIVE概述 Hive是基于Hadoop的一个数据仓库工具,可以将结构化 ...
- Hive的安装配置
Hive的安装配置 Hive的安装配置 安装前准备 下载Hive版本1.2.1: 1.[root@iZ28gvqe4biZ ~]# wget http://mirror.bit.edu.cn/apac ...
- 01 Node.js简介, 安装&配置
Node.js 简介 Node.js 是什么 Node.js 有着强大而灵活的包管理器(node package manager,npm) 目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开 ...
- [Hive_2] Hive 的安装&配置
0. 说明 在安装好 Hadoop 集群和 ZooKeeper 分布式的基础上装好 MySQL,再进行 Hive 安装配置 1. 安装 1.1 将 Hive 安装包通过 Xftp 发送到 /home/ ...
- Hive 组件安装配置
下载和解压安装文件 基础环境和安装准备 Hive组件的部署规划和软件包路径如下: (1)当前环境中已安装 Hadoop全分布系统 (2)本地安装 MySQL数据库(账号 root,密码 Passwor ...
- Hbase简介安装配置
HBase —— Hadoop Database的简称 ,hbase 是分布式,稀疏的,持久化的,多维有序映射,它基于行键rowkey,列键column key,时间戳timestamp建立索引.它是 ...
- Hive 2、Hive 的安装配置(本地MySql模式)
一.前提条件 安装了Zookeeper.Hadoop HDFS HA 安装方法: http://www.cnblogs.com/raphael5200/p/5154325.html 二.安装Mysq ...
- ansible简介安装配置
ansible简介 ansible是一款,自动化运维管理工具.顾名思义是用于批量去管理及安装服务及批量管理主机. ansible与saltstack对比 ansible优点:配置简单,部署容易除主管理 ...
- Hive 3、Hive 的安装配置(本地derby模式)
这种方式是最简单的存储方式,只需要在hive-site.xml做如下配置便可; $ vim hive-site.xml <configuration> <property> ...
随机推荐
- linux命令补全 忘记命令只记得开头
linux的shell不仅提供上下箭头来翻阅历史使用过的命令,还提供命令补全功能. 例如,你想创建一个文件夹,只记得是m开头的命令,此时可以: ①输入m ②按键盘上的Tab键两次 (有可能还出现这句话 ...
- Spring MVC 与 web开发
转载:http://coderbee.net/index.php/java/20140719/959 项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开 ...
- log4jdbc-remix安装配置
1.maven安装依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w ...
- 102. Binary Tree Level Order Traversal
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- Frequent values && Ping pong
Frequent values 题意是不同颜色区间首尾相接,询问一个区间内同色区间的最长长度. 网上流行的做法,包括翻出来之前POJ的代码也是RMQ做法,对于序列上的每个数,记录该数向左和向右延续的最 ...
- RedMine项目管理系统安装问题(Linux版一键安装包)
安装环境 操作环境:VMware下安装的Parrot Security OS 系统 使用软件:bitnami-redmine---linux-x64-installer.run 问题描述: 安装步骤与 ...
- Ubuntu 12.04下搭建Qt开发环境
http://download.qt.io/official_releases/qt/ Ubuntu 环境下Gtk与Qt编译环境安装与配置(系统环境是Ubuntu 12.04) 1.配置基础开发环境G ...
- 正确认识Android的内存管理机制,合理关闭进程 (一)
随着大家收货后会有很多乐粉晒内存,为啦方便大家,在网上搜集了一些相关Andriod管理的相关机制合理管理内存,整理下发个贴. 首先要知道Android系统是基于Linux 2.6内核开发的开源操作系统 ...
- bzoj4008
好题,这题可以分开算每个技能的贡献 orz popoqqq http://blog.csdn.net/popoqqq/article/details/45365759 ..,..] of double ...
- IDE模式下安装Windows 7强行改回ACHI后不断重启的解决方法
问题描述:用U盘启动进PE装的Win7,由于PE认不出硬盘,只好进BIOS设置硬盘模式为IDE才安装上.结果安装完系统后,在BIOS中强行修改硬盘模式为ACHI模式后,Win7开机不断重启,进不了系统 ...