1. metastore是元数据服务,Metastore服务的作用是管理metadata元数据,metadata元数据存储在mysql数据库中,或内置的derby中。
metastore服务配置有3中模式: 内嵌模式,本地模式,远程模式。
a).内嵌模式: 元数据存储在内置的derby中,并且derby和metastore都嵌入到hiveserver进程中,不需要额外开启metastore服务。 一次值能支持一个活动用户。
b).本地模式:只是把derby改成了独立的mysql服务,但启动一个hive服务会一起内嵌启动一个metastore;
c)、远程模式: 独立的mysql服务,独立的metastore服务;
2. hive需要hadoop上运行,所以hadoop中core-site.xml配置文件加上:
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
3. 服务安装和配置
3.1 hive-site.xml中增加mysql的配置,指定metastore服务地址
<property>
<name>hive.metastore.uris</name>
<value>thrift://nodel:9083</value>
</property>
3.2 同时执行bin/schematool -initSchema -dbType mysql -verbos
3.3 hive --service metastore
4. 客户端
4.1 bin/hive 第一代客户端 => metastore => mysql
bin/beeline 第二代客户端 => hiveServer2 => metastore => mysql
4.2 使用beeline客户端
hive --service hiveServer2 启动hiveServer2服务
! connect jdbc:hive2://node1:10000
4.3 idea工具
5. hive读写文件机制
5.1 SerDe: Serializer,Deserializer的简称,目的是用于序列号和反序列化
Read 反序列化: HDFS files => InputFileFormat -> <key,value> => Deserializer -> Row object
Write 序列化: Row object ->Serializer -> <key,value> -> OutputFileFormat -> HDFS files
5.2 desc formatted tablename命令
5.3 在创建表的时候,有个 row format delimited | serde, 就是 delimited和serde二选其一。默认的分隔符是 ’\001'。
6. 加载静态分区
load data local inpath '/home/hadoop/data/emp.txt' overwrite into table emp partition(分区字段='分区值');
7. 动态分区
set hive.exec.dynamic.partition=true; //是否开启动态分区功能
#指定动态分区模式,分为nonstrict非严格模式和strict严格模式;
#strict模式要求至少有一个分区为静态分区
set hive.exec.dynamic.partition.mode=nonstrict;
8. 分桶表
8.1 CLUSTERED BY col_name SORTED BY col_name ASC INTO num_buckets BUCKETS;
8.2 set hive.enforce.bucketing=true;
8.3 分桶表数据,需要通过insert into table1 select * from table2来完成数据插入;
8.4 分桶规则是 hash_function(分桶字段)%num_buckets
8.5 分桶好处: join的字段对标进行分桶操作减少笛卡尔积数量
9. 数据倾斜-join
方案一: 提前过滤,将大数据变成小数据,实现mapjoin
方案二: 使用Bucket Join,如果使用方案一,过滤后数据依旧是大表,那么可以把两张表的数据构建成桶表,实现Bucket Map Join,避免数据倾斜;
方案三: 使用Skew Join,产生数据倾斜的使用Mapjoin,没产生数据倾斜的使用ReduceJoin
10. 自定义udf
10.1 上传udf的jar包:在hive2客户端,使用 add jar hive-udf-1.0-SNAPSHOT.jar;
10.2 create temporary function 函数名 as '类的包路径'; //临时函数
联系客服