欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hive:面试题

程序员文章站 2022-06-10 10:48:23
...

目录

 

Q1:Maven离线仓库的默认位置是什么?    

Q2:Hive的主要作用是什么?

Q3:配置hive-env.sh都涉及到哪些属性?(中文描述)

Q4:配置hive-site.xml都修改了哪些属性,请写出属性名称并解释该属性。

Q5:配置Mysql时,在CentOS6以及CentOS7中开启Mysql服务的命令分别是什么?

Q6:Mysql中如何修改root密码?

Q7:Mysql中如何为用户以及主机授权?每个参数的含义是什么?授权结束后需要使用什么命令使授权生效?

Q8:如何设定Hive产生log日志的目录?

Q9:启动Hive的方式有哪些?

Q10:HiveServer2的作用是什么,可以画图说明HiveServer2的角色定位。

Q11:如何连接HiveServer2?写出具体命令

Q12:Hive创建id,name,sex表的语法是什么?

Q13:Hive的两个重要参数是什么?

Q14:Hive如何在脚本中传入参数到HQL文件,在HQL中又如何引用传入的参数?

Q15:Hive中如何复制一张表的表结构(不带有被复制表数据)

Q16:Hive中追加导入数据的4种方式是什么?请写出简要语法。

Q17:Hive导出数据有几种方式?如何导出数据?

Q18:Hive几种排序的特点

Q19:Sqoop如何导入数据,如何导出数据?

Q20:Hive如何关联分区数据?

Q21:Hive导出数据有几种方式?如何导出数据?

Q22: Hive中追加导入数据的4种方式是什么?请写出简要语法

Q23:Hive中如何复制一张表的表结构(不带有被复制表数据) 

Q24:Hive几种排序的特点 

Q25:Sqoop如何导入数据,如何导出数据? 

Q26:请把下一语句用hive方式实现? 

Q27:写出hive中split、coalesce及collect_list函数的用法(可举例)?

Q28:简要描述数据库中的 null,说出null在hive底层如何存储,并解释selecta.* from t1 a left outer join t2 b on a.id=b.id where b.id is null; 语句的含义?


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:

LOAD DATA LOCAL INPATH '/your/path/test.txt' OVERWRITE INTO TABLE test PARTITION (l_date='2016-10-10')

Q26:请把下一语句用hive方式实现? 

 

SELECT a.key,a.value 
FROM a 
WHERE a.key not in (SELECT b.key FROM b)
答案:
select a.key,a.value from a where a.key not exists (select b.key from b)


Q27:写出hive中split、coalesce及collect_list函数的用法(可举例)?

 

Split将字符串转化为数组。
split('a,b,c,d' , ',') ==> ["a","b","c","d"]
COALESCE(T v1, T v2, …) 返回参数中的第一个非空值;如果所有值都为 NULL,那么返回NULL。
collect_list列出该字段所有的值,不去重  select collect_list(id) from table;

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情况下的取值。
null在hive底层默认是用'\N'来存储的,可以通过alter table test SET SERDEPROPERTIES('serialization.null.format' = 'a');来修改。
查询出t1表中与t2表中id相等的所有信息。

 

原文参考:https://blog.csdn.net/qq_26442553/article/details/78725690