1 Hive简介
Hive是一个数据仓库基础工具,在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。
它提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。但是不要把Hive当作以下东西:
- 一个关系数据库
- 一个设计用于联机事务处理(OLTP)
- 实时查询和行级更新的语言
它只是一个数据仓库,存放的都是文件。Hive有具以下特点:
- 它存储架构在一个数据库中并处理数据到HDFS
- 它是专为OLAP设计
- 它提供SQL类型语言查询叫HiveQL或HQL
- 它是熟知,快速,可扩展和可扩展的
2 常用操作
由于Hive操作与SQL语句有一定程度上的不同,故记录一下。
- 创建表:
1 create table tmp.tbl_website_about(domain string, home string, about string, service string, product string);
- 增加字段:
1 ALTER TABLE tmp.tbl_website_about ADD COLUMNS(language STRING);
- 保留字段,其余字段全删除:
1 ALTER TABLE tmp.tbl_website_about REPLACE COLUMNS(language STRING);
注意,该代码表示只保留language字段,其余全删除。
- 插入多条数据:
1 insert into tmp.tbl_website_about values('1','2','3','4','5','6'),('q','w','e','r','t','y');
注意,因为Hive是默认以换行符作为字段分隔符,所以在插入文本时往往会因换行符导致若干问题出现,此问题暂无解决方法,只能将\n\r替换为空格后再进行存储,也可以参考这篇文章。 - 删除表中所有数据:
1 truncate table tmp.tbl_website_about;
- 删除表(可恢复):
1 drop table tmp.tbl_website_about;
- 永久删除表(不可恢复):
1 drop table tmp.tbl_website_about purge;
3 Tidb数据库的表中数据复制到Hive
- 进入到HIve的服务器内,并进入指定用户,例如:
1 $ ssh emr-v2-gateway 2 $ sudo su - hadoop
- 通过以下指令进入到spark-shell。
1 spark-shell --executor-memory 8g --driver-memory 4g --num-executors 5
- 通过以下指令复制表内容。
1 val df = spark.sql("select * from tidb_spider.tbl_website_about") 2 df.write.mode("overwrite").saveAsTable("tmp.tbl_website_about_test")
注意,overwrite表示全覆盖,即使表字段不同,也会根据Tidb中的字段结构重新规划字段结构。
4 CSV文件导入HIve
在实际应用中,往往需要将CSV文件导入到Hive中,方便于多表查询。
将本机文件上传至将远程服务器可以参考这篇文章,CSV文件转为Hive可以参考以下步骤。
- 根据SCV的字段结构在hive中创建表,例如:
1 create table tmp.website_about_dolang(domain string, language string) row format delimited fields terminated by ',';
注意,一定要以逗号为分隔符。
- 进入到HIve的服务器内,并进入指定用户,例如:
1 $ ssh emr-v2-gateway 2 $ sudo su - hadoop
- 输入 hive 指令,进入HIve。
- 输入以下指令,导表。
1 $ load data local inpath '/home/hadoop/andrew/domainLanguage.csv' overwrite into table website_about_dolang;