天天看点

Hive:面试题

目录

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 root@'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