在昨天的基础上,做的Hive的应用方法
接着已经搭建配置好后,直接在根目录下进行hive(按课件说明,也要先进行启动HDFS和YARN)
创建create//删除drop//查看show//使用use——数据库、表
导入文件/数据:
①把本地的.txt文件里的数据放到hive后:
或先传到本地,再传到HDFS上(可以在第二个上上传到hadoop)
hadoop命令
[Teacher@SZHAStandby ~]$ hadoop fs -put 519.txt /user/hive/warehouse/xp.db/xpp
519.txt是在本地的文件 后面是xp数据库下的xpp的表下
②用load的命令:(没太大区别)
load
先在active创建表——在standby里rz文件/数据--在pwd查找路径——
load data local inpath ‘路径/文件名.txt’
into table 表名;
不加local就是HDFS了;
可以反复的插入数据;
overwrite 覆盖(同名的文件)
直接into :是追加
当然,再次之前,要先在active上把表建好,这里最好不要用简单的创建表的语句,根据不同的条件和需求,一次性完成:
语法 (下拉看说明
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type , … …)]
[PARTITIONED BY (col_name data_type ...)]
[SORTED BY (col_name [ASC|DESC], ...)]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
说明
external可以让用户创建一个外部表,在建表的同时指定一个指向HDFS上的实际数据的路径LOCATION,而不加EXTERNAL关键字是创建内部表,会将数据移动到数据仓库指向HDFS默认路径/user/hive/warehouse/;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和真实数据(表内容)会被一起删除,而外部表只删除元数据,不删除真实数据(表内容);if not exists如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常;
sorted by按字段排序(asc,desc);
stored as存储文件类型如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE;
row format 指定数据切分格式, DELIMITED [FIELDS TERMINATED BY char] [COLLECTION(集合类型--Map或者数组之类的结构,例如这么存储,1,地址信息:中央大街) ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES(行 默认按照回车符) TERMINATED BY char]
partitioned by创建表时指定的partition的分区空间
内部表:存放在指定/默认的路径下
外部表:放在指定的路径下
基本的情况就是:
hive> create table if not exists xpp(id int,name string)
> row format delimited fields terminated by ','; 以,为分割
顺序:建数据库——建表(完整的)——把本地文件传到表里——查询表
hive> select * from xpp;
以及一些基本的条件查询(where)等;
值得注意的是:
在select count(*) from xpp;
这样就开始了进行MapReduce(查询)的进程:
·和一般的情况来说,会很慢,更合适用于大数据集的离线计算
有差错的话,就可能之前的错误操作乱了,重新进hive,重新进一遍你自己的数据库和你自己的表,再进行后面操作。
分区:
创建表的时候,第二行:partitioned by (新的一列名 类型)
插入数据的时候,分区直接在括号里写上:
创建分区的那一行要在row分割那一行的上面
创建的数据库、表、表信息等等可以在:
1.web端看
2.在mysql客户端看