1、概述

要理解Hive中的表,要回溯到Hive的性质。
Hive实质是转换器,接收用户输入的类SQL语句,转换成MapReduce作业,类似rdbms的引擎。
根本内容还是HDFS和MapReduce作业。
所以:

  1. 表是对HDFS目录的映射,特别类似Oracle的外部表
  2. 表的创建是在HDFS上创建目录,并在元数据里添加了映射
  3. 表数据加载、导出就是目录文件的移入、移除。

2、内部表

create table stu (sno int ,sname string ,sex string,sage int,sdept string)
	  row format delimited fields terminated by ',';

建表:说明表字段和数据类型,指明字段与文件列的映射。
ps:在hdfs上创建同名目录,表对应目录。

2.1 加载数据

load data local inpath 'F:\hadoop-test\test_data.csv' into table stu;

ps:加载数据实质是上传文件到表对应的HDFS目录。
相应的,把文件复制一份,就相当于insert到表了。

3、外部表

create table testtab_ext (testid string,barno int,result string,testtime int )
	row format delimited fields terminated by ','
	location 'hdfs://local:9000/hiveExternal';

ps:外部表是对应到目录的,该目录下所有符合格式要求的文件都对应表内数据。
外部表的好处是,只用元数据映射,删除时仅删除元数据。方便多个应用共用数据,如pig等。

4、分区表

create table testtab_part (testid string,barno string,result string,testtime string )  
	partitioned by (mon STRING,factory STRING)
	row format delimited fields terminated by ',' ;

ps:注意partitioned的顺序在row format前,否则报错。
另,分区字段可以不包含在表字段里。

4.1 分区表加载数据

load data local inpath 'F:\hadoop-test\test_data.csv' into table testtab_part
	partition(mon='201908',factory='xian');

ps:实质是在表目录下建了子目录。

>hadoop fs -ls /user/hive/warehouse/testdb.db/testtab_part/
Found 1 items
drwxrwxr-x   - 10171512 supergroup          0 2019-08-23 10:59 /user/hive/warehouse/testdb.db/testtab_part/mon=201908

5、查看表的相关信息

desc extended testtab_part;

ps:加extended关键字,会包含对应的hdfs位置、是否压缩等。

6、导出数据

insert overwrite local directory 'file:///f:\hadoop-test\hiveOutput'
	select * from testtab_part;

可重新指定列分割符

insert overwrite local directory 'file:///f:\hadoop-test\hiveOutput'
	row format delimited fields terminated by ',' 
	select * from testtab_part;

ps:导出的mr作业的结果,文件数与启动的reduce任务数一致。看文件名,也是reduce的输出名称。

7、问题整理

1、Retrying connect to server: account.jetbrains.com/0.0.0.0:8032?

&:默认情况下yarn ResourceManager 相关服务IP地址指向的是0.0.0.0。
   同时本机在hosts文件中,定义了0.0.0.0的同义词指向account.jetbrains.com,顾总是连接这个地址。
   但是我在core-site.xml中定义了yarn.resourcemanager.address参数值了,但是没有生效。
   把该参数移动到yarn-site.xml中,重启hadoop,配置的参数生效。

2、查看hadoop的配置参数?

&:hdfs getconf -confkey yarn.resourcemanager.address

3、hadoop 遇到java.net.ConnectException: to 0.0.0.0:10020 failed on connection

&:这个问题一般是在hadoop2.x版本里会出现,hadoop的datanode需要访问namenode的jobhistory server,如果没有修改,则默认为0.0.0.0:10020,则可以修改mapred-site.xml文件:
   mapreduce.jobhistory.address
   需要启动单独的服务,存放mr任务的历史记录。