【转】 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
同时,大家可以关注我的个人博客:
http://www.cnblogs.com/zlslch/ 和 http://www.cnblogs.com/lchzls/ http://www.cnblogs.com/sunnyDream/
详情请见:http://www.cnblogs.com/zlslch/p/7473861.html
人生苦短,我愿分享。本公众号将秉持活到老学到老学习无休止的交流分享开源精神,汇聚于互联网和个人学习工作的精华干货知识,一切来于互联网,反馈回互联网。
目前研究领域:大数据、机器学习、深度学习、人工智能、数据挖掘、数据分析。 语言涉及:Java、Scala、Python、Shell、Linux等 。同时还涉及平常所使用的手机、电脑和互联网上的使用技巧、问题和实用软件。 只要你一直关注和呆在群里,每天必须有收获
对应本平台的讨论和答疑QQ群:大数据和人工智能躺过的坑(总群)(161156071)
【转】 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> ...
随机推荐
- 2013 Multi-University Training Contest 5 k-th point
刚开始我也不知道怎么做,后来慢慢就推出来了…… 对于样例 2 1 0,结果是2/3 2 2 0,结果是4/5 3 2 0,结果是6/7 3 2 1,结果是9/14=6/7*3/4 …… 之后就会发现每 ...
- 深入理解ClassLoader(五)—类的卸载
原文地址:http://yhjhappy234.blog.163.com/blog/static/316328322011101413730764/?suggestedreading&wumi ...
- easyui源码翻译1.32--datagrid(数据表格)
前言 此前网上有easyui1.25的源码 应该算是比较老的版本 之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34 1.33开始支持css3 算是又一个转折 但是 ...
- PHP基础语法2
数组 PHP有两种数组:索引数组.关联数组. 函数 自定义函数 自定义函数通过将一组代码封装起来,使代码进行复用,程序结构与逻辑更加清晰 返回值 使用return关键字可以使函数返回值,可以返回包括数 ...
- 基于http.sys来开发的,真的是非常稳定
真正的WEB服务器是不会用Indy写的.因为它是基于每连接每线程的. 其实真正的服务器需要下很多功夫,无法快速开发的.比如说,字符串处理.玩服务器基本上就是玩内存.举个例子: var str:Ansi ...
- Android的Handler几种常见的传值方式
public class handlerThread2 extends Activity { @Override protected void onCreate(Bundle savedInstanc ...
- unity3d游戏开发 —— 倒计时
using UnityEngine;using System.Collections; public class CoolTime : MonoBehaviour { // Use this for ...
- 通过ngx-lua来统计Nginx上的虚拟主机性能数据
Web server调研分析 Filed under: Web Server — cmpan @ 2012-10-29 20:38:34 摘要 简单可依赖的架构首先需要有一个简单可依赖的前端WebSe ...
- javacript序列化表单数据
在前端开发时,用到表单交互的比较多,在我们实现一些异步操作数据时,表单数据的序列化就显得尤为重要了.下面我们一起来看看如何进行序列化. 如,我们在进行提交表单时,地址栏里会显示这样的东东:name=z ...
- short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确
这个问题以前碰到过,也研究过,发表一下: 如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确.这两个表达式都被称为赋值表达式.第二个表达式使用的是简单赋值操作 ...