Hive入门
hive是一个数据仓库,用于存储海量格式化数据,方便开发人员对其使用SQL语言进行数据分析。
它的所有表中的数据存放在 hdfs 文件系统中,保证了数据的可靠性,安全性
它的表的描述信息 metastore(包括表字段定义、文件在hdfs中的映射位置)存放在单独的数据库中,默认的是derby本地文件数据库,大多情况下使用 mysql 进行存储
7.1.1 derby数据库的特点
derby数据库以metastore_db文件形式存储在本地HIVE_HOME/bin目录下,因为是以当前启动hive脚本的目录作为参照的。如果切换至其他目录下,重新启动hive脚本,则会在该目录下重新创建一个metastore_db文件。
该数据库的缺点:
1.只支持一个连接
2. 不能共享数据
所以一般应用中,我们使用mysql最为hive的metastore
下面将介绍hive(数据仓库)+mysql(metastore)的安装
安装Hive
Hive只在一个节点上安装即可
1 上传tar包
2 解压
tar -zxvf hive-0.9.0.tar.gz -C /itcast/
3 配置mysql metastore(需切换到root用户)
**安装mysql Server**
使用
rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm
【命令安装mysqlserver 出现包冲突的解决方法:
1)切换到 /root目录下,执行如下命令:
rpm -qa | grep mysql
找到mysql的安装目录
2)强制擦除该安装包并解除依赖
rpm -e mysql-libs-5.1.66-2.el6_3.i686 –nodeps
3)再次安装server
rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm
】
为了配置方便,我们将客户端也安装上去
rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm
mysql安装时配置
1)修改mysql的密码
使用默认的提示初始化mysql:
/usr/bin/mysql_secure_installation
(注意:删除匿名用户,允许用户远程连接)
注:如果出现mysql.sock找不到的错误
先在/usr/share/mysql目录下尝试启动mysql.server后再次尝试初始化mysql配置
删除匿名用户:Y
不允许远程连接:n
登陆mysql
mysql -u root -p
password:***(由自己设定)
4 配置hive,将mysql作为hive的metastore
vim hive-site.xml
修改hive-site.xml,删除其他内容,只留如下内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
</property>
</configuration>
添加如下内容:
数据库不存在时创建该数据库
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://itcast**:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
Jdbc名称
<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>123</value>
<description>password to use against metastore database</description>
</property>
(可选配置)
//Metastore在hdfs上自定义的路径
hive.metastore.warehouse.dir
//每次执行hive所产生的log存放路径
hive.querylog.location
5 安装hive和mysql完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
如果出现没有权限的问题,在mysql**授权**(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
为了安全起见,可以缩小授权范围,例如只允许itcast03连接该数据库 :
mysql>GRANT ALL PRIVILEGES ON hive.* TO 'root'@'itcast03' IDENTIFIED BY '123' WITH GRANT OPTION;
代表授权itcast03访问hive数据库下的所有表
*.* ---》 数据库名.表名
刷新数据库配置:
mysql> FLUSH PRIVILEGES;
6 访问hive的方式
1、 hive 命令行模式
直接输入 /$HiveHome/bin/hive 启动hive程序,进入hive命令行,如果在环境变量中已经配置了HIVE_HOME,那么输入:
# hive
就可以启动
或hive –service cli
用于linux平台命令行查询,查询语句基本跟mysql查询语句类似
1.1 hive中“一次使用”命令:hive -e “SQL…”
这种方式的优点在于可以不进入hive命令行,就可以执行Hql语句
例如:
[root@itcast05 ~]# hive -e "select * from student"
Logging initialized using configuration in file:/itcast/apache-hive-0.13.0-bin/conf/hive-log4j.properties
OK
1 tom
2 jerry
3 jim
Time taken: 1.568 seconds, Fetched: 3 row(s)
配合linux的数据重定向,还可以将这个查询数据输出到本地文件中:
[root@itcast05 ~]# hive -S -e "select * from student" > /root/qout1.txt
[root@itcast05 ~]# cat qout1.txt
1 tom
2 jerry
3 jim
1.2 hive中“一次使用”命令:hive -f 本地文件路径
首先需要准备好文件,里面写好了SQL语句内容,比如:
[root@itcast05 ~]# cat hivequery.hql
select * from student;
接着,我们用一下这个 hive -f 命令,像这样:
[root@itcast05 ~]# hive -f /root/hivequery.hql
Logging initialized using configuration in file:/itcast/apache-hive-0.13.0-bin/conf/hive-log4j.properties
OK
1 tom
2 jerry
3 jim
Time taken: 2.114 seconds, Fetched: 3 row(s)
1.3 小技巧:使用hive -e 命令模糊查找hive配置属性名
当用户不能完整记清楚某个属性名时,可以使用下面这个技巧模糊获取这个属性名,免除使用set命令查找。假设用户没记清哪个属性指定了管理表的“warehouse”的路径,通过如下命令可以查看到:
[root@itcast05 ~]# hive -S -e "set" | grep warehouse
hive.metastore.warehouse.dir=/user/hive/warehouse
hive.warehouse.subdir.inherit.perms=false
-S:屏蔽无用提示信息,只显示结果
2、 hive web界面的启动方式(不太常用)
hive –service hwi
用于通过浏览器来访问hive
3、 hive 远程服务 (端口号10000) 启动方式
# hive –service hiveserver &
用java等程序实现通过jdbc等驱动的访问hive就用这种起动方式了,这个是程序员最需要的方式了
也可以自己指定端口 hive --service hiveserver -p 50000 &
(&表示后台运行)
输入完这些指令后终端就在运行hiveserver了,会卡住不动。其实已经在运行了,不用担心。
使用经验:1、3方式居多,2很少用
## 7.8 Hive与传统数据库比较 ##
查询语言 | HiveQL | SQL |
---|---|---|
数据存储位置 | HDFS | Raw Device or 本地FS |
数据格式 | 用户定义 | 系统决定 |
数据更新 | 不支持 | 支持 |
索引 | 新版本有,但弱 | 有 |
执行 | MapReduce | Executor |
执行延迟 | 高 | 低 |
可扩展性 | 高 | 低 |
数据规模 | 大 | 小 |