介绍
本文简单介绍安装hive之前的准备, 安装hive时的配置和hive的简单使用, 作为一篇入门级的文章吧.
安装前的准备
linux的安装
hive是运行在hadoop平台上的应用, 因此需要先安装hadoop平台. 虽然, hadoop平台提供windows版本, 但是由于这个版本没有经过严格的测试, 而且这个windows版本是运行在mingw32上面的,
mingw32经常会出现一些莫名奇妙的问题, 所以这里不建议使用windows平台. 再加上, hadoop需要使用ssh, 而windows下并没有提供ssh, 这也增加了windows下部署hadoop的难度.
linux有众多衍生版, 这里选择opensuse作为安装的操作系统. 由于安装过程都是图形化界面操作, 这边就不再一一介绍.
jdk的安装
hadoop的运行需要使用jdk, apache hadoop的项目网站上也介绍了, 为了使hadoop发挥出最大的效率, 建议安装oracle jdk.
对于linux操作系统, 一般使用libreoffice作为默认office软件, 而这款软件需要使用jre才能运行, 因此, opensuse默认安装openjdk.
为了方便jdk各个版本之间的切换, opensuse提供了一个叫做”update-alternatives”的工具. 具体配置详见博主写的一篇博客.
hadoop的安装
为了能够运行hive, 需要搭建hadoop集群. 对于hadoop集群, 可以分为分布式集群和伪分布集群. 集群类型的选择也要看自己的硬件设备.
两种集群的搭建可以分别参考博主以前写的博客.
hive的安装与配置
hive下载
hive安装包需要从apache hive项目网站上下载. 项目网站上提供了二进制包和源代码. 方便起见, 可以选择编译好的二进制包. 当然, 为了更好的性能, 可以选择下载源代码进行编译.
hive安装
hive安装需要三样东西:
- jdk jdk版本需要1.7以上, 本文选择使用1.8
- hadoop hadoop支持2.x和1.x, 本文使用2.6
- 操作系统 最好使用linux操作系统. 本文选择opensuse 13.2
使用”tar”命令解压安装包, 并把hive放到相应的位置, 本文放在/opt/目录下:
tar -xzvf hive-x.y.z.tar.gz
mv ./hive-x.y.z /opt/hive
将hive的安装目录添加到环境变量, 并将hive的bin目录添加到PATH变量中:
export HIVE_HOME=/opt/hive/
export PATH=$HIVE_HOME/bin:$PATH
将hadoop的安装目录添加环境变量:
export HADOOP_HOME=/opt/hadoop
另外需要在hdfs中创建”/tmp”目录和”/user/hive/warehouse”, 分别用于存储表和临时文件.
hive提供了四种运行hive的方式,分别是:
- Hive CLI
- HiveServer2 和 Beeline
- HCatalog
- WebHCat (Templeton)
hive CLI
因为hive的bin目录已经添加了path变量, 因此, 可以直接使用hive命令启动:
hive
HiveServer2 和 Beeline
beeline提供多用户, 更加安全的服务, 因此beeline用得比较多.
hiveserver2启动时默认的地址是”localhost:10000”, 因此, 在使用beeline连接的时候, 需要使用” jdbc:hive2://localhost:10000”作为参数.
相关的命令如下:
hiveserver2
beeline -u jdbc:hive2://localhost:10000
同时也可以将 Beeline和HiveServer2在同一个进程里启动, 用于测试:
beeline -u jdbc:hive2://
HCatalog的使用
运行HCatalog相对简单了, 分别运行服务端和客户端程序, 服务端命令:
$HIVE_HOME/hcatalog/sbin/hcat_server.sh start
客户端命令:
$HIVE_HOME/hcatalog/bin/hcat
WebHCat的使用
WebHCat提供一个网页版的hive, 命令为:
$HIVE_HOME/hcatalog/sbin/webhcat_server.sh
hive的一些配置
hive默认的配置文件为”
hive是运行在hadoop之上的, 所以hive可以自定义hadoop的配置.
默认情况下, hive使用Berby数据库作为默认元数据存储介质. 这个数据是由java编写的文件数据库, 一次只能有一个实例进行访问.
从而使得hive只能打开一个实例. 为了解决这个问题, 可以把元数据存储迁移到mysql上面.
修改hive-site.xml, 修改一下内容
<property>
<name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createData baseIfNotExist=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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>test</value>
<description>password to use against metastore database</description>
</property>
hive的简单使用
创建表格
hive的表格分为内部表和外部表, 将内部表删除时, 会删除hive用户目录下的数据文件, 而外部表只是删除hive目录下的文件夹信息.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[SKEWED BY (col_name, col_name, ...)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
增删改查
同sql语句