hive初步学习.docx
- 文档编号:6686772
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:10
- 大小:200.20KB
hive初步学习.docx
《hive初步学习.docx》由会员分享,可在线阅读,更多相关《hive初步学习.docx(10页珍藏版)》请在冰豆网上搜索。
hive初步学习
超人学院:
HIVE介绍
主要介绍
背景及体系结构
1背景
应用于工业的商务智能收集分析所需的数据集正在大量增长,使得传统的数据仓库解决方案变得过于昂贵。
Hadoop是一个流行的开源map-reduce实现,用于像yahoo,Facebook一类的公司。
来存储和处理商用硬件上的大范围数据集。
然而map-reduce程序模型还是处于很低级别,即需要开发者来书写客户程序,这些程序往往难于维护与重用。
用hbase做数据库,但由于hbase没有类sql查询方式,所以操作和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面的hql查询。
hive也叫做数据仓库。
2定义
Hive是基于Hadoop(HDFS,MapReduce)的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
本质是将SQL转换为MapReduce程序。
3体系结构
Hive本身建立在Hadoop的体系结构上,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行。
并按照该计划生成MapReduce任务后交给Hadoop集群处理,Hive的体系结构如图1-1所示:
图1-1Hive的体系结构
4Hive的数据存储
Hive的存储是建立在Hadoop文件系统之上的。
Hive本身没有专门的数据存储格式,也不能为数据建立索引,用户可以自由地组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符就可以解析数据了。
Hive中主要包含四类数据模型:
表(Table)、外部表(ExternalTable)、分区(Partition)和桶(Bucket)。
Hive中的表和数据库中的表在概念上是类似的,每个表在Hive中都有一个对应的存储目录。
例如一个表pokes在HDFS中的路径为/warehouse/pokes,其中/warehouse是hive-site.xml配置文件中由${hive.metastore.warehouse.dir}指定的数据仓库的目录。
Hive中每个分区都对应数据库中相应分区列的一个索引,但是分区的组织方式和传统关系型数据库不同。
在Hive中,表中的一个分区对应表下的一个目录,所有分区的数据都存储在对应的目录中。
例如,图1-2中htable表中包含year、month和day三个分区,分别对应三个目录:
对于year=2012,month=01,day=01的HDFS子目录为:
/warehouse/htable/year=2012/month=01/day=01;对于year=2012,month=02,day=14的HDFS子目录为:
/warehouse/htable/year=2012/month=02/day=14;
桶对指定列进行哈希计算时,根据哈希值切分数据,每个桶对应一个文件。
例如,将图1-2中htable表中属性列Uniqueid列分散到32个桶中,首先要对Uniqueid进行hash计算,对应哈希值为0的桶写入HDFS的目录为:
/warehouse/htable/year=2012/month=01/day=01/part-0;对应哈希值为1的桶写入HDFS的目录为:
/warehouse/htable/year=2012/month=01/day=01/part-1。
图1-2Hive数据存储
一、hive功能简介
功能简介PARTITIONEDBY关键字为表格分区
4.通过CLUSTEREDBY关键字将PATITION划分成BUCKET
5.定义每条记录的存储格式,包括:
字段之间如何分隔;
集合字段中的元素如何分隔;
Map的key值如何分隔
6.指定存储格式为Hadoop的SequenceFile
(2)查看表结构
DESCRIBEtablename;
(3)修改表格
为表格添加字段
ALTERTABLEpokesADDCOLUMNS(new_colINT);
(4)删除表格
DROPTABLEtablename;
DML
(1)、导入数据
导入操作,只是将文件复制到对应的表格目录中,并不会对文档的schema进行校验
从HDFS导入
LOADDATAINPATH'data.txt'INTOTABLEpage_viewPARTITION(date='2008-06-08',country='US')
从本地导入,并覆盖原数据
LOADDATALOCALINPATH'data.txt'OVERWRITEINTOTABLEpage_viewPARTITION(date='2008-06-08',country='US')
Hive体系结构
hiveserver
hiveserver启动方式:
hive--servicehiveserver
HiveServer支持多种连接方式:
Thrift、JDBC、ODBC
metastore
metastore用来存储hive的元数据信息(表格、数据库定义等),默认情况下是和hive绑定的,部署在同一个JVM中,将元数据存储到Derby中
这种方式不好的一点是没有办法为一个Hive开启多个实例(Derby在多个服务实例之间没有办法共享)
Hive提供了增强配置,可将数据库替换成MySql等关系数据库,将存储数据独立出来在多个服务实例之间共享
甚至还可以将metastoreService也独立出来,部署到其他JVM中去,在通过远程调用的方式去访问
metastore的常用配置:
hive.metastore.warehouse.dir存储表格数据的目录
hive.metastore.local使用内嵌的metastore服务(默认为true)
hive.metastore.uris如果不使用内嵌的metastore服务,需指定远端服务的uri
javax.jdo.option.ConnectionURL所使用数据库的url
javax.jdo.option.ConnectionDriverName数据库驱动类
javax.jdo.option.ConnectionUserName连接用户名
javax.jdo.option.ConnectionPassword连接密码
hive数据存储格式
定义表格时如不指定RowFormat和StoredAs从句,hive采用如下默认配置:
CREATETABLE...
ROWFORMATDELIMITED
FIELDSTERMINATEDBY'\001'
COLLECTIONITEMSTERMINATEDBY'\002'
MAPKEYSTERMINATEDBY'\003'
LINESTERMINATEDBY'\n'
STOREDASTEXTFILE;
默认为纯文本文件TEXTFILE
如果存储的数据不是纯文本,而包含二进制的数据,可用SequenceFile和RCFile
RCFile:
基于列存储,类似于HBase,查询Table时,如果要检索的数据不是整条记录,而是具体的column,RCFile较比SequenceFile高效一些,只需遍历指定column对应的数据文件即可
使用RCFile,创建Table时使用如下语法:
CREATETABLE...
ROWFORMATSERDE'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'
STOREDASRCFILE;
除此之外,Hive还可通过正则表达式的方式指定输入数据源的格式:
CREATETABLEstations(usafSTRING,wbanSTRING,nameSTRING)
ROWFORMATSERDE'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITHSERDEPROPERTIES(
"input.regex"="(\\d{6})(\\d{5})(.{29}).*"
);
参考资料:
http:
//www.alidata.org/archives/595
https:
//cwiki.apache.org/confluence/display/Hive/Home
hadoop权威指南
二、hive的安装和配置
详细步骤1.download
wget.au/pub/apache//hive/stable/hive-0.8.1.tar.gz
tarzxfhive-0.8.1.tar.gz
只需要在一个节点上安装
2.设置环境变量
vi.bash_profile
exportJAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
exportHADOOP_HOME=/home/hadoop/hadoop-1.0.0
exportHIVE_HOME=/home/hadoop/hive-0.8.1
exportHADOOP_CONF_DIR=$HOME/conf
exportHIVE_CONF_DIR=$HOME/hive-conf
exportCLASSPATH=$HIVE_HOME/lib:
$JAVA_HOME/lib:
$JAVA_HOME/jre/lib:
$HADOOP_HOME
exportPATH=$HIVE_HOME/bin:
$HADOOP_HOME/bin:
$JAVA_HOME/bin:
/sbin/:
/bin:
$PATH
3.配置hive
cp-rhive-0.8.1/conf$HIVE_CONF_DIR/
cd$HIVE_CONF_DIR/
cphive-default.xml.templatehive-default.xml
cathive-env.sh
exportHADOOP_HEAPSIZE=512
exportHIVE_CONF_DIR=/home/hadoop/hive-conf
3.测试
$hive
hive>showtables;
OK
Timetaken:
4.824seconds
hive>createtablehwz(idint,namestring);
OK
Timetaken:
0.566seconds
hive>select*fromhwz;
OK
Timetaken:
0.361seconds
$hadoopdfs-lsr/user/hive
Warning:
$HADOOP_HOMEisdeprecated.
drwxr-xr-x-hadoopsupergroup02012-03-2212:
36/user/hive/warehouse
drwxr-xr-x-hadoopsupergroup02012-03-2212:
36/user/hive/warehouse/hwz
4.配置Metastore用mysql数据库,这样才可以多用户同时访问
a.createuseranddatabaseforhiveinmysql
createdatabasehive;
GRANTallONhive.*TOhive@'%'IDENTIFIEDBY'hivepass';
b.changemetastoretousemysql
cathive-site.xml
mysql:
//slave1:
3306/hive?
createDatabaseIfNotExist=true
c.检查
$hive
hive>usedw2;
OK
Timetaken:
3.43seconds
hive>createtablehwz2(idint,namestring)rowformatdelimitedFIELDSTERMINATEDBY',';
OK
Timetaken:
2.519seconds
hive>showtables;
OK
hwz2
Timetaken:
0.419seconds
hive>loaddatalocalinpath'demo.txt'overwriteintotablehwz2;
Copyingdatafromfile:
/home/hadoop/demo.txt
Copyingfile:
file:
/home/hadoop/demo.txt
Loadingdatatotabledw2.hwz2
Deletedhdfs:
//master:
9000/user/hive/warehouse/dw2.db/hwz2
OK
Timetaken:
0.557seconds
hive>select*fromhwz2;
OK
12jack
12jack
12jack
12jack
12jack
12jack
12jack
12jack
$hadoopdfs-lsr/user/hive
Warning:
$HADOOP_HOMEisdeprecated.
drwxr-xr-x-hadoopsupergroup02012-03-2215:
36/user/hive/warehouse
drwxr-xr-x-hadoopsupergroup02012-03-2215:
48/user/hive/warehouse/dw2.db
drwxr-xr-x-hadoopsupergroup02012-03-2215:
48/user/hive/warehouse/dw2.db/hwz2
-rw-r--r--2hadoopsupergroup12012012-03-2215:
48/user/hive/warehouse/dw2.db/hwz2/demo.txt
drwxr-xr-x-hadoopsupergroup02012-03-2212:
36/user/hive/warehouse/hwz
drwxr-xr-x-hadoopsupergroup02012-03-2215:
36/user/hive/warehouse/hwz2
-rw-r--r--2hadoopsupergroup12012012-03-2215:
36/user/hive/warehouse/hwz2/demo.txt
$hadoopdfs-cat/user/hive/warehouse/dw2.db/hwz2/demo.txt|head
Warning:
$HADOOP_HOMEisdeprecated.
12,jack
12,jack
12,jack
12,jack
12,jack
12,jack
12,jack
12,jack
12,jack
12,jack
d.在mysql中验证建立的新表
mysql>usehive;
Databasechanged
mysql>showtables;
+-----------------+
|Tables_in_hive|
+-----------------+
|BUCKETING_COLS|
|CDS|
|COLUMNS_V2|
|DATABASE_PARAMS|
|DBS|
|PARTITION_KEYS|
|SDS|
|SD_PARAMS|
|SEQUENCE_TABLE|
|SERDES|
|SERDE_PARAMS|
|SORT_COLS|
|TABLE_PARAMS|
|TBLS|
+-----------------+
14rowsinset(0.00sec)
9.常见错误
error1:
-------------------------------------------------
hive>showtables;
FAILED:
Errorinmetadata:
javax.jdo.JDOFatalInternalException:
Errorcreatingtransactionalconnectionfactory
Solution:
Hive不带mysqlJDBC驱动,自己安装:
wget
tarzxfmysql-connector-java-5.1.18.tar.gz
cdmysql-connector-java-5.1.18
cpmysql-connector*.jar$HIVE_HOME/lib
error2:
-------------------------------------------------
hive>showtables;
FAILED:
Errorinmetadata:
javax.jdo.JDOException:
Couldntobtainanewsequence(uniqueid):
Cannotexecutestatement:
impossibletowritetobinarylogsinceBINLOG_FORMAT=STATEMENTandatleastonetableusesastorageenginelimitedtorow-basedlogging.InnoDBislimitedtorow-loggingwhentransactionisolationlevelisREADCOMMITTEDorREADUNCOMMITTED.
Solution:
在mysql中设置binlog_format='MIXED'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- hive 初步 学习