转自:http://blog.csdn.net/u014726937/article/details/51983673
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,删除其他内容,只留如下内容:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
添加如下内容:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
(可选配置)
//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连接该数据库 :
- 1
- 1
代表授权itcast03访问hive数据库下的所有表
*.* ---》 数据库名.表名
刷新数据库配置:
- 1
- 1
6 访问hive的方式
1、 hive 命令行模式
直接输入 /$HiveHome/bin/hive 启动hive程序,进入hive命令行,如果在环境变量中已经配置了HIVE_HOME,那么输入:
- 1
- 1
就可以启动
或hive –service cli
用于Linux平台命令行查询,查询语句基本跟mysql查询语句类似
1.1 hive中“一次使用”命令:hive -e “SQL…”
这种方式的优点在于可以不进入hive命令行,就可以执行Hql语句
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
配合linux的数据重定向,还可以将这个查询数据输出到本地文件中:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
1.2 hive中“一次使用”命令:hive -f 本地文件路径
首先需要准备好文件,里面写好了SQL语句内容,比如:
- 1
- 2
- 1
- 2
接着,我们用一下这个 hive -f 命令,像这样:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
1.3 小技巧:使用hive -e 命令模糊查找hive配置属性名
当用户不能完整记清楚某个属性名时,可以使用下面这个技巧模糊获取这个属性名,免除使用set命令查找。假设用户没记清哪个属性指定了管理表的“warehouse”的路径,通过如下命令可以查看到:
- 1
- 2
- 3
- 1
- 2
- 3
-S:屏蔽无用提示信息,只显示结果
2、 hive web界面的启动方式(不太常用)
hive –service hwi
用于通过浏览器来访问hive
3、 hive 远程服务 (端口号10000) 启动方式
- 1
- 1
用Java等程序实现通过jdbc等驱动的访问hive就用这种起动方式了,这个是程序员最需要的方式了
也可以自己指定端口 hive --service hiveserver -p 50000 &
(&表示后台运行)
输入完这些指令后终端就在运行hiveserver了,会卡住不动。其实已经在运行了,不用担心。
使用经验:1、3方式居多,2很少用
## 7.8 Hive与传统数据库比较 ##
查询语言 | HiveQL | SQL |
---|---|---|
数据存储位置 | HDFS | Raw Device or 本地FS |
数据格式 | 用户定义 | 系统决定 |
数据更新 | 不支持 | 支持 |
索引 | 新版本有,但弱 | 有 |
执行 | MapReduce | Executor |
执行延迟 | 高 | 低 |
可扩展性 | 高 | 低 |
数据规模 | 大 | 小 |