Hive安装环境准备

1 Hive安装地址

1)Hive官网地址:

http://hive.apache.org/

2)文档查看地址:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

3)下载地址:

http://archive.apache.org/dist/hive/

4)github地址:

https://github.com/apache/hive

2 Hive安装部署

1)Hive安装及配置

(1)把apache-hive-1.2.1-bin.tar.gz上传到linux的/opt/software目录下

(2)解压apache-hive-1.2.1-bin.tar.gz到/opt/module/目录下面

[atguigu@hadoop102 software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/

(3)修改apache-hive-1.2.1-bin.tar.gz的名称为hive

[atguigu@hadoop102 module]$ mv apache-hive-1.2.1-bin/ hive

(4)修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh

[atguigu@hadoop102 conf]$ mv hive-env.sh.template hive-env.sh

       (5)配置hive-env.sh文件

       (a)配置HADOOP_HOME路径

export HADOOP_HOME=/opt/module/hadoop-2.7.2

       (b)配置HIVE_CONF_DIR路径

2)Hadoop集群配置

(1)必须启动hdfs和yarn

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

(2)在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir /tmp

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir -p /user/hive/warehouse

 

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /tmp

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /user/hive/warehouse

3)Hive基本操作

(1)启动hive

       [atguigu@hadoop102 hive]$ bin/hive

       (2)查看数据库

       hive>show databases;

(3)打开默认数据库

       hive>use default;

(4)显示default数据库中的表

       hive>show tables;

(5)创建一张表

       hive> create table student(id int, name string) ;

(6)显示数据库中有几张表

       hive>show tables;

(7)查看表的结构

       hive>desc student;

(8)向表中插入数据

hive> insert into student values(1000,"ss");

(9)查询表中数据

       hive> select * from student;

(10)退出hive

       hive> quit;

3 将本地文件导入Hive案例

需求:将本地/opt/module/datas/student.txt这个目录下的数据导入到hive的student(id int, name string)表中。

1)数据准备:在/opt/module/datas/student.txt这个目录下准备数据

(1)在/opt/module/目录下创建datas

       [atguigu@hadoop102 module]$ mkdir datas

(2)在/opt/module/datas/目录下创建student.txt文件并添加数据

       [atguigu@hadoop102 module]$ touch student.txt

[atguigu@hadoop102 module]$ vi student.txt

1001       zhangshan

1002       lishi

1003       zhaoliu

注意以tab键间隔。

2)Hive实际操作

(1)启动hive

       [atguigu@hadoop102 hive]$ bin/hive

(2)显示数据库

hive>show databases;

(3)使用default数据库

       hive>use default;

(4)显示default数据库中的表

       hive>show tables;

(5)删除已创建的student表

hive> drop table student;

(6)创建student表, 并声明文件分隔符’\t’

       hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

(7)加载/opt/module/datas/student.txt 文件到student数据库表中。

       hive> load data local inpath '/opt/module/datas/student.txt' into table student;

(8)Hive查询结果

hive> select * from student;

OK

1001       zhangshan

1002       lishi

1003       zhaoliu

Time taken: 0.266 seconds, Fetched: 3 row(s)

3)遇到的问题

再打开一个客户端窗口启动hive,会产生java.sql.SQLException异常。

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)

        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)

        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:606)

        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)

        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523)

        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.(RetryingMetaStoreClient.java:86)

        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132)

        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:104)

        at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005)

        at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024)

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503)

        ... 8 more

原因是,Metastore默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore;

4 MySql安装

4.1 安装包准备

1)查看mysql是否安装,如果安装了,卸载mysql

       (1)查看

       [root@hadoop102 桌面]# rpm -qa|grep mysql

mysql-libs-5.1.73-7.el6.x86_64

       (2)卸载

       [root@hadoop102 桌面]# rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

2)解压mysql-libs.zip文件到当前目录

[root@hadoop102 software]# unzip mysql-libs.zip

       [root@hadoop102 software]# ls

mysql-libs.zip

mysql-libs                 

3)进入到mysql-libs文件夹下,并设置当前用户执行权限

[root@hadoop102 mysql-libs]# ll

总用量 76048

-rw-r--r--. 1 root root 18509960 3月  26 2015 MySQL-client-5.6.24-1.el6.x86_64.rpm

-rw-r--r--. 1 root root  3575135 12月  1 2013 mysql-connector-java-5.1.27.tar.gz

-rw-r--r--. 1 root root 55782196 3月  26 2015 MySQL-server-5.6.24-1.el6.x86_64.rpm

 

[root@hadoop102 mysql-libs]# chmod u+x ./*

[root@hadoop102 mysql-libs]# ll

总用量 76048

-rwxr--r--. 1 root root 18509960 3月  26 2015 MySQL-client-5.6.24-1.el6.x86_64.rpm

-rwxr--r--. 1 root root  3575135 12月  1 2013 mysql-connector-java-5.1.27.tar.gz

-rwxr--r--. 1 root root 55782196 3月  26 2015 MySQL-server-5.6.24-1.el6.x86_64.rpm

4.2 安装MySql服务器

1)安装mysql服务端

[root@hadoop102 mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm

2)查看产生的随机密码

[root@hadoop102 mysql-libs]# cat /root/.mysql_secret

       OEXaQuS8IWkG19Xs

3)查看mysql状态

       [root@hadoop102 mysql-libs]# service mysql status

4)启动mysql

       [root@hadoop102 mysql-libs]# service mysql start

4.3 安装MySql客户端

1)安装mysql客户端

       [root@hadoop102 mysql-libs]# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm

2)链接mysql

       [root@hadoop102 mysql-libs]# mysql -uroot -pOEXaQuS8IWkG19Xs

3)修改密码

       mysql>SET PASSWORD=PASSWORD('000000');

4)退出mysql

mysql>exit

4.4 MySql中user表中主机配置

配置只要是root用户+密码,在任何主机上都能登录MySQL数据库。

1)进入mysql

[root@hadoop102 mysql-libs]# mysql -uroot -p000000

2)显示数据库

mysql>show databases;

3)使用mysql数据库

mysql>use mysql;

4)展示mysql数据库中的所有表

mysql>show tables;

5)展示user表的结构

       mysql>desc user;

6)查询user表

mysql>select User, Host, Password from user;

7)修改user表,把Host表内容修改为%

       mysql>update user set host='%' where host='localhost';

8)删除root用户的其他host

mysql>delete from user where Host='hadoop102 ';

mysql>delete from user where Host='127.0.0.1';

mysql>delete from user where Host='::1';

9)刷新

       mysql>flush privileges;

10)退出

mysql> quit;

5 Hive元数据配置到MySql

5.1 驱动拷贝

1)在/opt/software/mysql-libs目录下解压mysql-connector-java-5.1.27.tar.gz驱动包

       [root@hadoop102 mysql-libs]# tar -zxvf mysql-connector-java-5.1.27.tar.gz

2)拷贝/opt/software/mysql-libs/mysql-connector-java-5.1.27目录下的

mysql-connector-java-5.1.27-bin.jar到/opt/module/hive/lib/

[root@hadoop102 mysql-connector-java-5.1.27]# cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/

5.2 配置Metastore到MySql

1)在/opt/module/hive/conf目录下创建一个hive-site.xml

[root@hadoop102 conf]# touch hive-site.xml

[root@hadoop102 conf]# vi hive-site.xml

2)根据官方文档配置参数,拷贝数据到hive-site.xml文件中。

https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin

      

         javax.jdo.option.ConnectionURL

         jdbc:mysql://hadoop102:3306/metastore?createDatabaseIfNotExist=true

         JDBC connect string for a JDBC metastore

      

 

      

         javax.jdo.option.ConnectionDriverName

         com.mysql.jdbc.Driver

         Driver class name for a JDBC metastore

      

 

      

         javax.jdo.option.ConnectionUserName

         root

         username to use against metastore database

      

 

      

         javax.jdo.option.ConnectionPassword

         000000

         password to use against metastore database

      

    

        hive.cli.print.current.db

        true

        Whether to include the current database in the Hive prompt.

    

      

    hive.cli.print.header

    false

    Whether to print the names of the columns in query output.

 

 

3)配置完毕后,如果启动hive异常,可以重新启动虚拟机。(重启后,别忘了启动hadoop集群)

5.3 多窗口启动Hive测试

1)先启动MySQL

[atguigu@hadoop102 mysql-libs]$ mysql -uroot -p000000

       查看有几个数据库

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql             |

| performance_schema |

| test               |

+--------------------+

2)再次打开多个窗口,分别启动hive

[atguigu@hadoop102 hive]$ bin/hive

3)启动hive后,回到MySQL窗口查看数据库,显示增加了metastore数据库

       mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| metastore          |

| mysql             |

| performance_schema |

| test               |

+--------------------+

6 Hive常用交互命令

[atguigu@hadoop102 hive]$ bin/hive -help

usage: hive

 -d,--define           Variable subsitution to apply to hive

                                  commands. e.g. -d A=B or --define A=B

    --database      Specify the database to use

 -e          SQL from command line

 -f                     SQL from files

 -H,--help                        Print help information

    --hiveconf    Use value for given property

    --hivevar          Variable subsitution to apply to hive

                                  commands. e.g. --hivevar A=B

 -i                     Initialization SQL file

 -S,--silent                      Silent mode in interactive shell

 -v,--verbose                     Verbose mode (echo executed SQL to the console)

1“-e”不进入hive的交互窗口执行sql语句

[atguigu@hadoop102 hive]$ bin/hive -e "select id from student;"

2)“-f”执行脚本中sql语句

       1)在/opt/module/datas目录下创建hivef.sql文件

              [atguigu@hadoop102 datas]$ touch hivef.sql

              文件中写入正确的sql语句

              select *from student;

       (2)执行文件中的sql语句

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/datas/hivef.sql

(3)执行文件中的sql语句并将结果写入文件中

[atguigu@hadoop102 hive]$ bin/hive -f /opt/module/datas/hivef.sql  > /opt/module/datas/hive_result.txt

7 Hive其他命令操作

1)退出hive窗口:   

hive(default)>exit;

hive(default)>quit;

在新版的oracle中没区别了,在以前的版本是有的:

exit:先隐性提交数据,再退出;

quit:不提交数据,退出;

2)在hive cli命令窗口中如何查看hdfs文件系统

       hive(default)>dfs -ls /;

3)在hive cli命令窗口中如何查看hdfs本地系统

hive(default)>! ls /opt/module/datas;

4)查看在hive中输入的所有历史命令

       (1)进入到当前用户的根目录/root或/home/atguigu

       (2)查看. hivehistory文件

[atguigu@hadoop102 ~]$ cat .hivehistory

 

8 Hive常见属性配置

8.1 Hive数据仓库位置配置

       1)Default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下

       2)在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。

       3)修改default数据仓库原始位置(将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中)

hive.metastore.warehouse.dir

/user/hive/warehouse

location of default database for the warehouse

配置同组用户有执行权限

bin/hdfs dfs -chmod g+w /user/hive/warehouse

8.2 查询后信息显示配置

1)在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。

       hive.cli.print.header

       true

 

       hive.cli.print.current.db

       true

       2)重新启动hive,对比配置前后差异

(1)配置前

Hive安装环境准备_第1张图片

 

(2)配置后

Hive安装环境准备_第2张图片

 

8.3 Hive运行日志信息配置

1)Hive的log默认存放在/tmp/atguigu/hive.log目录下(当前用户名下)。

2)修改hive的log存放日志到/opt/module/hive/logs

       (1)修改/opt/module/hive/conf/hive-log4j.properties.template文件名称为

hive-log4j.properties

[atguigu@hadoop102 conf]$ pwd

/opt/module/hive/conf

              [atguigu@hadoop102 conf]$ mv hive-log4j.properties.template hive-log4j.properties

       (2)在hive-log4j.properties文件中修改log存放位置

hive.log.dir=/opt/module/hive/logs

8.4 参数配置方式

1)查看当前所有的配置信息

       hive>set;

2)参数的配置三种方式

       (1)配置文件方式

默认配置文件:hive-default.xml

用户自定义配置文件:hive-site.xml

       注意:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

(2)命令行参数方式

启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。

例如:

[atguigu@hadoop103 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

注意:仅对本次hive启动有效

查看参数设置:

hive (default)> set mapred.reduce.tasks;

(3)参数声明方式

可以在HQL中使用SET关键字设定参数

例如:

hive (default)> set mapred.reduce.tasks=100;

注意:仅对本次hive启动有效。

查看参数设置

hive (default)> set mapred.reduce.tasks;

上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

你可能感兴趣的:(Hive,Hive安装环境准备)