本文简单介绍安装hive之前的准备, 安装hive时的配置和hive的简单使用, 作为一篇入门级的文章吧.
hive是运行在hadoop平台上的应用, 因此需要先安装hadoop平台. 虽然, hadoop平台提供windows版本, 但是由于这个版本没有经过严格的测试, 而且这个windows版本是运行在mingw32上面的,
mingw32经常会出现一些莫名奇妙的问题, 所以这里不建议使用windows平台. 再加上, hadoop需要使用ssh, 而windows下并没有提供ssh, 这也增加了windows下部署hadoop的难度.
linux有众多衍生版, 这里选择opensuse作为安装的操作系统. 由于安装过程都是图形化界面操作, 这边就不再一一介绍.
hadoop的运行需要使用jdk, apache hadoop的项目网站上也介绍了, 为了使hadoop发挥出最大的效率, 建议安装oracle jdk.
对于linux操作系统, 一般使用libreoffice作为默认office软件, 而这款软件需要使用jre才能运行, 因此, opensuse默认安装openjdk.
为了方便jdk各个版本之间的切换, opensuse提供了一个叫做”update-alternatives”的工具. 具体配置详见博主写的一篇博客.
为了能够运行hive, 需要搭建hadoop集群. 对于hadoop集群, 可以分为分布式集群和伪分布集群. 集群类型的选择也要看自己的硬件设备.
两种集群的搭建可以分别参考博主以前写的博客.
hive安装包需要从apache hive项目网站上下载. 项目网站上提供了二进制包和源代码. 方便起见, 可以选择编译好的二进制包. 当然, 为了更好的性能, 可以选择下载源代码进行编译.
hive安装需要三样东西:
使用”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的bin目录已经添加了path变量, 因此, 可以直接使用hive命令启动:
hive
beeline提供多用户, 更加安全的服务, 因此beeline用得比较多.
hiveserver2启动时默认的地址是”localhost:10000”, 因此, 在使用beeline连接的时候, 需要使用” jdbc:hive2://localhost:10000”作为参数.
相关的命令如下:
hiveserver2
beeline -u jdbc:hive2://localhost:10000
同时也可以将 Beeline和HiveServer2在同一个进程里启动, 用于测试:
beeline -u jdbc:hive2://
运行HCatalog相对简单了, 分别运行服务端和客户端程序, 服务端命令:
$HIVE_HOME/hcatalog/sbin/hcat_server.sh start
客户端命令:
$HIVE_HOME/hcatalog/bin/hcat
WebHCat提供一个网页版的hive, 命令为:
$HIVE_HOME/hcatalog/sbin/webhcat_server.sh
hive默认的配置文件为” HIVEHOME/conf/hive−default.xml",用户可以通过修改" HIVE_HOME/conf/hive-site.xml”对配置进行修改.
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目录下的文件夹信息.
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语句