hive的mysql版的安装配置以及远程服务以及内置表和外置表/单分区表和双分区表/分桶表

hive的mysql版的安装配置

hive的mysql版安装前先了解一下 hive
Hive 学习开始:
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件 映射为
一张数据库表
并提供类 SQL 查询功能。
本质是将 SQL 转换为 MapReduce 程序。
主要用途:用来做离线数据分析,比直接用 MapReduce 开发效率更高。

直接使用 Hadoop MapReduce 处理数据所面临的问题:
人员学习成本太高
MapReduce 实现复杂查询逻辑开发难度太大
使用 Hive :
操作接口采用类 SQL 语法,提供快速开发的能力
避免了去写 MapReduce,减少开发人员的学习成本
功能扩展很方便

Hive 组件:
用户接口:
元数据存储:
解释器/编译器/优化器/执行器/:生成的查询计划存储在hdfs,并在随后由mapreduce调用执行。

Hive和hadoop 的关系:
Hive 利用 HDFS 存储数据,利用 MapReduce 查询分析数据。

Hive 与传统数据库对比:hive只适合用来做批量数据统计分析。

在这里插入图片描述

Hive 数据类型:
Hive中所有的数据都存储在hdfs中,没有专门的存储格式。
在创建时指定数据中的分隔符,hive就可以映射成功,解析数据。

Hive 的安装与部署:
1 安装前需要安装好 jdk和hadoop 以及启动hadoop集群:start-all.sh
2.上传 hive包 解压 后到bin目录可以看见hive

Hive 根据元数据存储的介质不同 分为
1.derby版【属于内嵌模式 直接./hive 即可启动】【注意derby版 缺点:不同的路劲启动 就会在等级目录下 产生一个metastore_db 元数据,这就导致了无法共享 如:进去bin 后 ./hive 启动 和bin/hive 启动 创建的库表不能共享】
2.mysql版 【企业中用/生产环境用】
步骤:1.yum install mysql mysql-server mysql-devel 【安装mysql】
2./etc/init.d/mysqld start 【初始化mysql 并启动】
3.USE mysql;
4.UPDATE user SET Password=PASSWORD(‘hadoop’) WHERE user=‘root’; 【设置登录密码 用户】

5.GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘hadoop’ WITH GRANT OPTION; 【给mysql所有权限】
6.FLUSH PRIVILEGES; 【刷新配置】
7.chkconfig mysqld on; 【设置mysql开机启动】
8.配置hive 中的mysql 到hive的conf目录 下编辑vi conf/hive-env.sh 配置: export HADOOP_HOME=/export/servers/hadoop
9.创建:vi hive-site.xml


javax.jdo.option.ConnectionURL
jdbc:mysql://lnote1:3306/hive?createDatabaseIfNotExist=true
JDBC connect string for a JDBC metastore

	<property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.jdbc.Driver</value>
	<description>Driver class name for a JDBC metastore</description>
	</property>

	<property>
	<name>javax.jdo.option.ConnectionUserName</name>
	<value>root</value>
	<description>username to use against metastore database</description>
	</property>

	<property>
	<name>javax.jdo.option.ConnectionPassword</name>
	<value>hadoop</value>
	<description>password to use against metastore database</description>
	</property>
	</configuration>

10.hive 的lib目录下缺失 mysql的连接驱动 上传jar包 启动hive即可【bin/hive 或者的到bin目录中 ./hive】

三 hive 的远程服务
1.将hive的插件 下发到其他机器 :scp -r /export/servers/hive root@note2:/export/servers scp -r /export/servers/hive root@note3:/export/servers
2.首先在note1上开启 hive 远程服务: 到hive 的目录下 bin/hiveserver2
3.在其他机器上【如:note3】 开启hive的客户端 ./beeline
4. 连接远程hive 命令: ! connect jdbc:hive2://note1:10000
5.输入 note1机器的root ;和note1机器的用户密码【不是mysql 用户密码】
6.连接完成后 测试是否连接成功 show databases;

hive的映射文件默认分隔符是‘\001’ 相当于文件中**^A【ctrl+v,ctrl+A】**不指定分隔符 也行。
创建表1:
create table peopeo(id int,name string,age int)row format delimited fields terminated by ','
创建表2:
create table complex_array(name string,work_locations array) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’ COLLECTION ITEMS TERMINATED BY ‘,’;【如数据 张三 12,13,14,15】
解析后 表数据为: 张三 [12,13,14,15]
若文件中数据没有和建表时的数据字段类型没有有对应上 则该字段数据为null,对应上的字段数据正常。
而且自己验证:在hdfs上表的位置里放几个文件都行,不管id会不会重复 都会将所有文件的数据映射成一张表的数据。
ROW FORMAT DELIMITED 【delimited :使用hive的内置分隔符,】
[FIELDS TERMINATED BY char]
[COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[LINES TERMINATED BY char] | SERDE serde_name 【使用自定义分隔符】
[WITH SERDEPROPERTIES
(property_name=property_value, property_name=property_value,…)]

小总:以上要求需要将对应的文件放到 hdfs上对应的建表位置中 叫做内置表 ,其实也可以不将文件放在对应的建表位置中,下面介绍一下外部表。

内部表、外部表
建内部表
create table student(Sno int,Sname string,Sex string,Sage int,Sdept string) row format delimited fields terminated by ‘,’;
建外部表
create external table student_ext(Sno int,Sname string,Sex string,Sage int,Sdept string) row format delimited fields terminated by ‘,’ location ‘/文件所在的目录’;

内部表和外部表最大的区别:
内部表:删除hive 中定义的表数据的同时,还会删除结构化数据文件。
外部表:删除表时 ,只会删除表hive中的表信息,不会删除结构化数据文件。

需求:比如一个建表目录下 有多个文件 会映射成一张表,但我们查询的时候会对所有的数据进行查询得到符合条件的数据,【当映射的数据量过大时 这时就会影响我们效率】这时我们引出一个分区的概念。用分区来解决这个需求。
简单举例:现在有三个地区的数据文件
China.txt
Usa.txt
Japan.txt
创建分区表:注意 分区字段不能和表字段重复
create table t_user_p (id int, name string,country string) partitioned by (guojia string) row format delimited fields terminated by ‘,’;
分区表导入数据:
LOAD DATA local INPATH ‘/root/hivedata/china.txt’ INTO TABLE t_user_p partition(guojia='zhongguo);
LOAD DATA local INPATH ‘/root/hivedata/usa.txt’ INTO TABLE t_user_p partition(guojia=‘meiguo’);
LOAD DATA local INPATH ‘/root/hivedata/japan.txt’ INTO TABLE t_user_p partition(guojia=‘riben’);

【自我理解:首先在创建一个分区表时添加一个分区字段,然后在导入数据文件时给不同的文件加一个不同的分区标识】

分区表又分为单分区表和双分区表【目前最多支持俩个分区字段】
双分区表:
create table day_hour_table (id int, content string) partitioned by (dt string, hour string);

LOAD DATA local INPATH ‘/root/hivedata/11.txt’ INTO TABLE day_hour_table PARTITION(dt=‘2017-07-07’, hour=‘08’);
Load …

常见的有
月–天【常有】
天–小时【很少】
省–市【常有】

clustered by(xxx) into num_buckets buckets
字面上:按照xxx把数据分成num_buckets桶。
本质上:按照指定的字段把结构化数据文件分成几个部分。

例如:clustered by(sex) into 2 buckets
根据谁分: clustered by(xxx) xxx就是表中某个字段
分成几个部分: num_buckets
分的规则: hashfun
如果分桶的字段是数值类型 hashfun(xxx)–>xxx xxx%num_buckets 取余 余数为几就去哪桶
如果分桶字段是字符串类型 hashfun(xxx)–>xxx.hashcode xxx.hashcode%num_buckets

分桶表的创建:
create table stu_buck(Sno int,Sname string,Sex string,Sage int,Sdept string)
clustered by(Sno)
into 4 buckets
row format delimited
fields terminated by ‘,’;
分桶之前 需要以下俩个操作:
开启分桶功能:set hive.enforce.bucketing = true;
设置reduce个数等于分桶的个数:set mapreduce.job.reduces=4;

分桶表如何导入数据:
创建一个中间表【就是创建一张表 然后把数据映射到这张表中 然后通过 insert select 中间表 来向分桶表中添加数据】
insert overwrite table stu_buck
select * from student cluster by(Sno);
分桶的出现就是减少jion 的笛卡儿积。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值