第十一单元 HIVE SQL 、Hive MR参数设置
1、知识点回顾
hive数据库是hdfs上的文件夹,表也是文件夹,表里的数据是文件
hive建表
create table 表名(字段1 类型1,字段2 类型2……)
row format delimited fields terminated by '字段分隔符';
为一键启动集群中的zookeeper,以下提供参考脚本:
#vim my-zkServer.sh 添加如下内容:
/opt/zookeeper-3.4.10/bin/zkServer.sh $1
ssh hdp2 "source /etc/profile;/opt/zookeeper-3.4.10/bin/zkServer.sh $1"
ssh hdp3 "source /etc/profile;/opt/zookeeper-3.4.10/bin/zkServer.sh $1"
#source /etc/profile 的目的是将profile中的JAVA_HOME路径提升为全局变量才能到相应的服务器启动具体操作:
#赋予权限 chmod +x my-zkServer.sh
#一键启动zookeeper集群:./my-zkServer.sh start
#一键停止zookeeper集群:./my-zkServer.sh stop
2、测试阶段可以把集群运行环境切换为本地运行 yarn -> local
<!-- vim mapred-site.xml -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>local</value>
</property>
</configuration>
<!-- 则之后提交job运行mr不需要启动yarn -->
mapreduce.framework.name设置为local,则不会使用YARN集群来分配资源,在本地节点执行。在本地模式运行的任务,无法发挥集群的优势。注:在web UI是查看不到本地模式运行的任务。
3、hive以服务方式运行:
启动服务:./hive --service hiveserver2 &
查看端口:netstat -tunl
hiveserver端口:10000
4、beeline客户端连接hiveserver
bin/beeline
!connect jdbc:hive2://hdp1:10000
root
回车(hive的默认不认证用户名密码)
5、建表,内部表和外部表
hive建表语句
建内部表
create table t_student(id string,name string,age int,classNo string)
row format delimited
fields terminated by ',';
建外部表
create external table t_a(id string,name string)
row format delimited fields terminated by ','
location '/ainput';
删除表
drop table xx
删除内部表是连同表结构和数据一起删除
删除外部表只删除表结构,不删除存储在hdfs上的数据
hive导入数据的语句
从hiverserver本地导入,注意不是beeline客户端的本地
load data local inpath '/root/b.dat' into table t_b;
从hdfs上导入数据(移动)
load data inpath '/datafromhdfs/a.dat' into table t_a;
6、笛卡尔积 join
笛卡尔积定义:
设A和B是两个集合,存在一个集合,它的元素是用A中元素为第一个元素,B中元素为第二个元素构成的有序二元组。称它为集合A和B的笛卡尔积集,记为A×B。即
A×B = {(a,b)|a∈A,b∈B}
例 A={1,2}
B={a,b,c}
A×B = {(1,a),(1,b),(1,c),(2,a),(2,b),(2,c)}
join例子:
a.dat
a,1
b,2
c,3
d,4
b.dat
a,xx
b,yy
d,zz
e,pp
创建表t_a ,t_b与以上数据对应并导入数据。
create table t_a(id string,name string)
row format delimited fields terminated by ',';
create table t_b(id string,name string)
row format delimited fields terminated by ',';
load data local inpath '/root/a.dat' into table t_a