Hive 入门
来源:互联网 发布:微信开源mars源码分析 编辑:程序博客网 时间:2024/05/17 04:30
官网:hive.apache.org
首先,Hive是数据仓库。可以用类SQL的语言来跑MR,可以理解为Hadoop的客户端。一方面Hive 数据都来自HDFS,另一方面Hive的代码需要提交到Hadoop中去执行,来跑MR。
HiveQL或者HQL,实际上是Hive将SQL提交,后翻译成MR,在HDFS上执行。所以Hive由解释器(解释成Java代码,提交到MR执行)、编译器、优化器等功能。
Hive在运行时元数据存储在关系型数据库中。不推荐默认的,可以使用mysql代替。具体的配置文件在conf/hive-site.xml里的ConnectionURL里面.
hive的语法和sql很像,举例
CREATE TABLE t_person(id int,name string,hobby array<string>,character map<string, string>)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','COLLECTION ITEMS TERMINATED BY '_'MAP KEYS TERMINATED BY ':';对应的example:1, zhangsan, sports_books_TV, sex:man_color:red
另外,只有查所有数据的时候才不执行MR, 比如:select * from table 时
创建分区表,分区实际上是个文件夹,表名就是文件夹名。每一个分区,实际上就是这个文件夹下的不同文件。分区可以根据时间、区域等进行划分,如每天一个分区或者每个城市一个分区,只要写下 where pt=20170707这样的条件即可查询指定时间得到数据。
CREATE TABLE e_stu(id int,sname string,city string) PARTITIONED BY (ds string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','sTORED AS TEXTFILE;导入数据(在hive中执行)LOAD DATA LOCAL INPATH '/home/zkpk/ecaoyng/input/estu.txt' OVERWRITE INTO TABLE e_stu PARTITION (ds='2017-07-07')LOAD DATA LOCAL INPATH '/home/zkpk/ecaoyng/input/estu2.txt' INTO TABLE e_stu PARTITION (ds='2017-07-08')hive> select * from e_stu;OK1 young linyi 2017-07-072 jerry dalian 2017-07-073 ian dalian 2017-07-071 hello usa 2017-07-082 world France 2017-07-083 hadoop English 2017-07-084 hive spain 2017-07-08Time taken: 0.087 seconds, Fetched: 7 row(s)hive> select * from e_stu where ds = '2017-07-07';OK1 young linyi 2017-07-072 jerry dalian 2017-07-073 ian dalian 2017-07-07Time taken: 0.211 seconds, Fetched: 3 row(s)hive> hive> insert into table e_stu > partition (ds = '2017-09-10') > select id,sname,city from e_stu;hive> select * from e_stu where ds = '2017-09-10';OK1 young linyi 2017-09-102 jerry dalian 2017-09-103 ian dalian 2017-09-101 hello usa 2017-09-102 world France 2017-09-103 hadoop English 2017-09-104 hive spain 2017-09-10
那么hive的文件在哪里查看?从50070的页面中的browse directory 中的user目录下/user/hive/warehouse/day0525.db/e_stu 可以看到有两个文件夹
hive的四种数据导入方式,旧的版本不支持insert into values,但新版本已经支持。
http://blog.csdn.net/lifuxiangcaohui/article/details/40588929
因为mysql中存储元数据,所以启动hive的时候需要启动mysql。但启动是有时会遇到如下的提示:
Another MySQL daemon already running with the same unix socket.解决方案:find / -name mysql.sock将mysql.sock(e.g. /var/lib/mysql/mysql.sock)删除,重启service即可
export将表中的数据导出到hdfs.
未完待续
- Hive 入门
- Hive 入门
- hive入门
- hive入门
- hive入门
- hive入门
- Hive入门
- hive入门
- HIVE入门
- hive 入门
- hive入门
- Hive入门
- Hive入门
- HIVE入门
- Hive入门
- hive入门
- Hive入门
- Hive 入门
- Android Animation——drawable animation
- Billboard (线段树 单点更新)
- 如何快速转载CSDN中的博客
- Unsupported major.minor version 52.0
- Etl项目中涉及的Json对象与Json字符串的转化、JSON字符串与Java对象的转换
- Hive 入门
- 数字在排序数组中出现的次数
- [POJ]2983 Is the Information Reliable? 差分约束判有无解(判负环)
- Linux strace命令
- 好用的cad快速看图vip破解版免费使用
- JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
- nginx HTML网页乱码
- hibernate基本用法<一>:ORM,PO,POJO集合组件键映射
- gRPC vs Thrift