Hive:面试题
目录
Q3:配置hive-env.sh都涉及到哪些属性?(中文描述)
Q4:配置hive-site.xml都修改了哪些属性,请写出属性名称并解释该属性。
Q5:配置Mysql时,在CentOS6以及CentOS7中开启Mysql服务的命令分别是什么?
Q7:Mysql中如何为用户以及主机授权?每个参数的含义是什么?授权结束后需要使用什么命令使授权生效?
Q10:HiveServer2的作用是什么,可以画图说明HiveServer2的角色定位。
Q14:Hive如何在脚本中传入参数到HQL文件,在HQL中又如何引用传入的参数?
Q15:Hive中如何复制一张表的表结构(不带有被复制表数据)
Q16:Hive中追加导入数据的4种方式是什么?请写出简要语法。
Q22: Hive中追加导入数据的4种方式是什么?请写出简要语法
Q23:Hive中如何复制一张表的表结构(不带有被复制表数据)
Q27:写出hive中split、coalesce及collect_list函数的用法(可举例)?
Q1:Maven离线仓库的默认位置是什么?
检查离线仓库 :导入这里需要的habase和hadoop依赖的包
1、创建maven默认的离线仓库文件夹.m2 (当前用户的家目录下)
$ mkdir ~/.m2/
2、解压离线仓库到默认位置
$ tar -zxf /opt/softwares/hbase+hadoop_repository.tar.gz -C ~/.m2/
Q2:Hive的主要作用是什么?
1.Hive是基于hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据表,并且提供sql查询。
相当于mapreduce的客户端
Q3:配置hive-env.sh都涉及到哪些属性?(中文描述)
1.添加JAVA_HOME路径 JAVA_HOME=/opt/modules/jdk1.7.0_67
2.添加HADOOP_HOME路径 HADOOP_HOME=/opt/modules/hadoop-2.5.0-cdh5.3.6/
3.添加HIVE_COF路径 export HIVE_CONF_DIR=/opt/modules/hive-0.13.1-cdh5.3.6/conf
Q4:配置hive-site.xml都修改了哪些属性,请写出属性名称并解释该属性。
1.连接数据库的url
2.数据库驱动名
3.数据库账户
4.数据库密码
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<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>
#因为在hive配置里配置了mysql账号密码,所以hive直接直接连接使用mysql
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
Q5:配置Mysql时,在CentOS6以及CentOS7中开启Mysql服务的命令分别是什么?
centos7 1.systemctl start mysqld.service
centos6 2.service mysql start/stop
Q6:Mysql中如何修改root密码?
1.不用先登录mysql
mysqladmin -uroot -p123456 password 123
2.首先登录MySQL。
格式:
mysql> set password for 用户名@localhost = password('新密码');
mysql> set password for [email protected] = password('123');
Q7:Mysql中如何为用户以及主机授权?每个参数的含义是什么?授权结束后需要使用什么命令使授权生效?
首先都需要先登录mysql
方法1. grant all priviliges on *.* to 'root'@'%' iddentified by '123456' with grant option
方法2. grant all on *.* to [email protected]'hadoop102' identified by '123456';
(注意如果此处授权没有执行别的用户或者主机无法连接到mysql)
Q8:如何设定Hive产生log日志的目录?
1.在hive安装目录下的conf/hive-log4j.properties (首先要创建mkdir logs)
hive.log.dir=/opt/modules/hive-0.13.1-cdh5.3.6/logs
Q9:启动Hive的方式有哪些?
1.bin/hive
2.bin/hiveserver2
Q10:HiveServer2的作用是什么,可以画图说明HiveServer2的角色定位。
1.Hiveserver2作用是允许多台主机通过beeline连接hiveserver2上,在通过hiveserver2连接到hive数据仓库。
Q11:如何连接HiveServer2?写出具体命令
1.bin/hiveserver2
2.bin/beeline
3.!connect jdbc:hive2://hadoop102:10000
Q12:Hive创建id,name,sex表的语法是什么?
1. create table student(id int,name String ,sex String)
row format delimited fields terminated by '\t'
Q13:Hive的两个重要参数是什么?
1.hive -e ‘’ 从命令行执行指定的HQL
2.hive -f *.hql 执行hive脚本命令
Q14:Hive如何在脚本中传入参数到HQL文件,在HQL中又如何引用传入的参数?
参考:https://mp.csdn.net/postedit/83180899
Q15:Hive中如何复制一张表的表结构(不带有被复制表数据)
create table a like b;
Q16:Hive中追加导入数据的4种方式是什么?请写出简要语法。
1.从本地导入: load data local inpath '/home/1.txt' (overwrite)into table student;
2.从Hdfs导入: load data inpath '/user/hive/warehouse/1.txt' (overwrite)into table student;
3.查询导入: create table student1 as select * from student;(也可以具体查询某项数据)
4.查询结果导入:insert (overwrite)into table staff select * from track_log;
Q17:Hive导出数据有几种方式?如何导出数据?
1.用insert overwrite导出方式
导出到本地:
insert overwrite local directory '/home/robot/1/2' rom format delimited fields terminated by '\t'
select * from staff;(递归创建目录)
导出到HDFS
insert overwrite directory '/user/hive/1/2' rom format delimited fields terminated by '\t'
select * from staff;
2.Bash shell覆盖追加导出
例如:$ bin/hive -e "select * from staff;" > /home/z/backup.log
3.Sqoop把hive数据导出到外部
Q18:Hive几种排序的特点
1.order by 全局排序
2.sort by 非全局排序
3.distribute by hash散列分区,常和sort by同时使用。即分区又排序,需要设置mapreduce.job.reduces的个数
4.cluster by 当distribute by 和sort by的字段相同时,等同于cluster by.可以看做特殊的distribute + sort
Q19:Sqoop如何导入数据,如何导出数据?
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库
1.将mysql数据导入到hive中。
bin/sqoop import \
--jdbc:mysql//hadoop102:3306/company \
--username root
--password 123456
--table staff
--terminated by '\t'
--m 1
2.用sqoop将hive中的数据导出到hdfs
bin/sqoop export \
--connect jdbc:mysql://hadoop102/test\
--username root \
--password 123456 \
--table employee \
--export-dir /user/hadoop/emp/
Q20:Hive如何关联分区数据?
1. insert table staff
select * from staff1 where patition(coutry='china');
2.hive的hql查询操作
create table t_access_times(username string,month string,salary int)
row format delimited fields terminated by ','; //row format delimited 是用来设置创建的表在加载数据的时候,支持的列分隔符
load data local inpath '/home/hadoop/t_access_times.dat' into table t_access_times;
A,2015-01,5
A,2015-01,15
B,2015-01,5
A,2015-01,8
B,2015-01,25
A,2015-01,5
A,2015-02,4
A,2015-02,6
B,2015-02,10
B,2015-02,5
1、第一步,先求个用户的月总金额
select username,month,sum(salary) as salary from t_access_times group by username,month
+-----------+----------+---------+--+
| username | month | salary |
+-----------+----------+---------+--+
| A | 2015-01 | 33 |
| A | 2015-02 | 10 |
| B | 2015-01 | 30 |
| B | 2015-02 | 15 |
+-----------+----------+---------+--+
2、第二步,将月总金额表 自己连接 自己连接
+-------------+----------+-----------+-------------+----------+-----------+--+
| a.username | a.month | a.salary | b.username | b.month | b.salary |
+-------------+----------+-----------+-------------+----------+-----------+--+
| A | 2015-01 | 33 | A | 2015-01 | 33 |
| A | 2015-01 | 33 | A | 2015-02 | 10 |
| A | 2015-02 | 10 | A | 2015-01 | 33 |
| A | 2015-02 | 10 | A | 2015-02 | 10 |
| B | 2015-01 | 30 | B | 2015-01 | 30 |
| B | 2015-01 | 30 | B | 2015-02 | 15 |
| B | 2015-02 | 15 | B | 2015-01 | 30 |
| B | 2015-02 | 15 | B | 2015-02 | 15 |
+-------------+----------+-----------+-------------+----------+-----------+--+
3、第三步,从上一步的结果中
进行分组查询,分组的字段是a.username a.month
求月累计值: 将b.month <= a.month的所有b.salary求和即可
select A.username,A.month,max(A.salary) as salary,sum(B.salary) as accumulate
from
(select username,month,sum(salary) as salary from t_access_times group by username,month) A
inner join
(select username,month,sum(salary) as salary from t_access_times group by username,month) B
on
A.username=B.username
where B.month <= A.month
group by A.username,A.month
order by A.username,A.month;
Q21:Hive导出数据有几种方式?如何导出数据?
1.用insert overwrite导出方式 导出到本地: insert overwrite local directory '/home/robot/1/2' rom format delimited fields terminated by '\t' select * from staff;(递归创建目录) 导出到HDFS 2.insert overwrite directory '/user/hive/1/2' rom format delimited fields terminated by '\t' select * from staff; Bash shell覆盖追加导出 例如:$ bin/hive -e "select * from staff;" > /home/z/backup.log 3.Sqoop把hive数据导出到外部 |
Q22: Hive中追加导入数据的4种方式是什么?请写出简要语法
1.从本地导入: load data local inpath '/home/1.txt' (overwrite)into table student; 2.从Hdfs导入: load data inpath '/user/hive/warehouse/1.txt' (overwrite)into table student; 3.查询导入: create table student1 as select * from student;(也可以具体查询某项数据) 4.查询结果导入:insert (overwrite)into table staff select * from track_log; |
Q23:Hive中如何复制一张表的表结构(不带有被复制表数据)
create table a like b; |
Q24:Hive几种排序的特点
1.order by 全局排序 2.sort by 非全局排序 3.distribute by hash散列分区,常和sort by同时使用。即分区又排序,需要设置mapreduce.job.reduces的个数 4.cluster by 当distribute by 和sort by的字段相同时,等同于cluster by.可以看做特殊的distribute + sort 参考:https://blog.csdn.net/weixin_38750084/article/details/83033525 |
Q25:Sqoop如何导入数据,如何导出数据?
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统; 导出数据:从Hadoop的文件系统中导出数据到关系数据库 1.将mysql数据导入到hive中。 bin/sqoop import \ --jdbc:mysql//hadoop102:3306/company \ --username root --password 123456 --table staff --terminated by '\t' --m 1
2.用sqoop将hive中的数据导出到hdfs bin/sqoop export \ --connect jdbc:mysql://hadoop102/test\ --username root \ --password 123456 \ --table employee \ --export-dir /user/hadoop/emp/ |
Hive是基于hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据表,并且提供sql查询。
|
写出将 text.txt 文件放入 hive 中 test 表‘2016-10-10’ 分区的语句,test 的分区字段是 l_date:
|
Q26:请把下一语句用hive方式实现?
SELECT a.key,a.value |
Q27:写出hive中split、coalesce及collect_list函数的用法(可举例)?
Split将字符串转化为数组。 |
Q28:简要描述数据库中的 null,说出null在hive底层如何存储,并解释selecta.* from t1 a left outer join t2 b on a.id=b.id where b.id is null; 语句的含义?
null与任何值运算的结果都是null, 可以使用is null、is not null函数指定在其值为null情况下的取值。 |
原文参考:https://blog.csdn.net/qq_26442553/article/details/78725690