基础回顾
-
H i v e 数据管理
- hive的表本质就是Hadoop的目录/文件
- hive默认表存放路径一般都是在你工作目录的hive目录里面,按表名做文件夹分开,如果你 有分区表的话,分区值是子文件夹,可以直接在其它的M/R job里直接应用这部分数据
-
Name HDFS Directory Table mobile_user /lbs/mobile_user Partition action = insight, day= 20190406 /lbs/mobile_user/action=insight/day=20190406 Bucket clusted by user into 32 buckets /lbs/mobile_user/action=insight/day=20190406/part-00000
-
H i v e 内部表和外部表
- Hive的create创建表的时候,选择的创建方式:
- – create table
- – create external table
- 特点:
- 在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它 自己来管理的!而表则不一样;
- 在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除 外部表的元数据,数据是不会删除的!
- Hive的create创建表的时候,选择的创建方式:
-
H i v e 中的P a r t i t i o n
- 在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的 数据都存储在对应的目录中
- – 例如:pvs 表中包含 ds 和 city 两个 Partition,则
- – 对应于 ds = 20190406, ctry = US 的 HDFS 子目录为:/wh/pvs/ds=20190406/ctry=US;
- – 对应于 ds = 20190406, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20190406/ctry=CA
- partition是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的 规格和条件进行管理。
- 在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的 数据都存储在对应的目录中
-
H i v e 中的B u c k e t
- hive中table可以拆分成partition,table和partition可以通过‘CLUSTERED BY ’进一步分bucket,bucket中的数据可以通过‘SORT BY’排序。
- create table bucket_user (id int,name string)clustered by (id) into 4 buckets;
- 'set hive.enforce.bucketing = true' 可以自动控制上一轮reduce的数量从而适配bucket的个数,当然,用户也可以自主设置mapred.reduce.tasks去适配 bucket个数
- Bucket主要作用:
- 数据sampling
- 提升某些查询操作效率,例如mapside join
- 查看sampling数据:
-
– hive> select * from student tablesample(bucket 1 out of 2 on id);
-
– tablesampl
-