Hive教程(二)---hive的安装

目录

2.1 Hive安装地址

2.2 Hive的集群安装部署

2.3 将本地文件导入Hive案例

2.4 MySql安装

2.5 Hive元数据配置到MySql

2.6 HiveJDBC访问

2.7 Hive常用交互命令

2.8 Hive其他命令操作

2.9 Hive常见属性配置


2.1 Hive安装地址

  1. Hive官网地址

  2. 文档查看地址

  3. 下载地址

  4. github地址

2.2 Hive的集群安装部署

2.2.1 HDFS和YARN正常运行
2.2.2 mysql环境准备

1) [root@hadoop11 ~]# service mysqld  start 
   Starting mysqld:                                           [  OK  ]
2)登录  mysql -uroot  -proot
3)开放远程连接权限
  mysql > grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
  mysql > flush privileges;
4)授权完成后,测试一下是否成功:在windows上用Navicat连接一下看是否能成功!	

-- 补充: 数据库修改密码命令 
   SET PASSWORD FOR 'root'@'doit001' = PASSWORD('root');  

2.2.3上传解压

tar -zxf apache-hive-2.3.5.tar.gz	

2.2.4 配置

  • vi hive-env.sh

export HADOOP_HOME=/usr/apps/hadoop-2.8.5/
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/apps/hive-2.3.1/conf/
  • vi hive-site.xml
<configuration>
<!-- 记录HIve中的元数据信息  记录在mysql中 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://doit001:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<!-- hive在hdfs中存储的数据路径 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>

<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
</property>
<!-- shell客户端连接的端口 -->
<property> 
<name>hive.server2.thrift.port</name> 
<value>10000</value>
</property>
<property> 
<name>hive.server2.thrift.bind.host</name> 
<value>0.0.0.0</value>
</property>
<property>
<name>hive.server2.webui.host</name>
<value>0.0.0.0</value>
</property>
<!-- hive服务的页面的端口 -->
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
<property> 
<name>hive.server2.long.polling.timeout</name> 
<value>5000</value>                               
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateSchema </name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore </name>
<value>true</value>
</property>

<property>
<name>hive.execution.engine</name>
<value>mr</value>
</property>

<property>
<name>hive.zookeeper.quorum</name>
<value>doit01,doit02,doit03</value>
</property>
</configuration>
  • vi hdp/ect/hadoop/core-site.xml 只修改hive服务安装的主机即可
<property>
			<name>dfs.permissions.enabled</name>
			<value>false</value>
			</property>

			<property>
			<name>hadoop.proxyuser.root.hosts</name>
			<value>*</value>
			</property>

			<property>
			<name>hadoop.proxyuser.root.groups</name>
			<value>*</value>
</property>

2.2.5 准备mysql的驱动包
       拷贝一个mysql的jdbc驱动jar包到hive的lib目录中

2.2.6 初始化
       将hive的原数据信息初始化到mysql中

${HIVE_HOME}/bin/schematool -initSchema -dbType mysql

在这里插入图片描述
2.2.7 启动

bin/hive

在这里插入图片描述

2.2.8 Hive基本操作
(1)启动hive

[root@doit01 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;

2.3 将本地文件导入Hive案例

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

[root@doit01 module]$ mkdir datas

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

[root@doit0 1datas]$ touch student.txt
[root@doit01 datas]$ vi student.txt
1001	zhangshan
1002	lishi
1003	zhaoliu

注意以tab键间隔。

2.Hive实际操作
(1)启动hive

[root@doit01 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.<init>(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;

2.4 MySql安装

2.4.1移除原来的libs, 防止冲突

 yum remove mysql-libs*

2.4.2安装顺序

rpm -ivh mysql-community-common-5.7.12-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.12-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.12-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.12-1.el6.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-devel-5.7.12-1.el6.x86_64.rpm
yum -y install numactl.x86_64

2.4.3启动Mysql服务

# service mysqld start
初始化 MySQL 数据库:                                      [确定]
Installing validate password plugin:                       [确定]
正在启动 mysqld:

2.4.4修改管理员密码

grep 'temporary password' /var/log/mysqld.log

mysql> set global validate_password_policy=0;

mysql> set global validate_password_length=4 ;

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

2.4.5 设置远程登陆权限给root用户授予从任何机器上登陆mysql服务器的权限:

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
Query OK, 0 rows affected (0.00 sec)

2.5 Hive元数据配置到MySql

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

[root@doit01mysql-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@doit01mysql-connector-java-5.1.27]# cp mysql-connector-java-5.1.27-bin.jar
 /opt/module/hive/lib/

2.5.2配置Metastore到MySql

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

[root@doit01conf]$ touch hive-site.xml
[root@doit01conf]$ vi hive-site.xml

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

       hive的数据存储在HDFS上 , 在使用hive之前,hdfs先启动 。hive的元数据信息建议存储在mysql数据库中, 安装hive之前建议先安装mysql存储元数据

cp  hive-env.sh.template   hive-env.sh

vi hive-env.sh 自动的读取HDFS的配置

export HIVE_CONF_DIR=/usr/apps/hive/conf
export HADOOP_HOME=/usr/apps/hadoop-2.8.5

在hive的conf中创建 hive-site.xml文件

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://linux01:3306/metastore?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</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>

        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>root</value>
          <description>password to use against metastore database</description>
        </property>
</configuration>

2.5.3 多窗口启动Hive测试
1.先启动MySQL

[root@doit01 mysql-libs]$ mysql -uroot -p000000

查看有几个数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

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

[root@doit01hive]$ bin/hive

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

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| metastore          |
| mysql              |
| performance_schema |
| test               |
+--------------------+

2.6 HiveJDBC访问

2.6.1 启动hiveserver2服务

[root@doit01 hive]$ bin/hiveserver2

2.6.2 启动beeline

[root@doit01 hive]$ bin/beeline
Beeline version 1.2.1 by Apache Hive
beeline>

2.6.3 连接hiveserver2

beeline> !connect jdbc:hive2:/doit01:10000(回车)
Connecting to jdbc:hive2:/doit01:10000
Enter username for jdbc:hive2:/doit01:10000: root(回车)
Enter password for jdbc:hive2:/doit01:10000: (直接回车)
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2:/doit01:10000> show databases;
+----------------+--+
| database_name     |
+----------------+--+
| default           |
| hive_db2          |
+----------------+--+

2.7 Hive常用交互命令

[root@doit01hive]$ bin/hive -help
usage: hive
 -d,--define <key=value>          Variable subsitution to apply to hive
                                  commands. e.g. -d A=B or --define A=B
    --database <databasename>     Specify the database to use
 -e <quoted-query-string>         SQL from command line
 -f <filename>                    SQL from files
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property
    --hivevar <key=value>         Variable subsitution to apply to hive
                                  commands. e.g. --hivevar A=B
 -i <filename>                    Initialization SQL file
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the console)
  1. “-e”不进入hive的交互窗口执行sql语句
[root@doit01hive]$ bin/hive -e "select id from student;"
  1. “-f”执行脚本中sql语句

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

[root@doit01datas]$ touch hivef.sql

文件中写入正确的sql语句

		select *from student;

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

[root@doit01hive]$ bin/hive -f /opt/module/datas/hivef.sql

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

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

2.8 Hive其他命令操作

  1. 退出hive窗口:
hive(default)>exit;
hive(default)>quit;

在新版的hive中没区别了,在以前的版本是有的:
exit:先隐性提交数据,再退出;
quit:不提交数据,退出;

  1. 在hive cli命令窗口中如何查看hdfs文件系统
hive(default)>dfs -ls /;
  1. 在hive cli命令窗口中如何查看本地文件系统
hive(default)>! ls /opt/module/datas;
  1. 查看在hive中输入的所有历史命令
    (1)进入到当前用户的根目录/root或/home/root
    (2)查看. hivehistory文件
[root@doit01~]$ cat .hivehistory

2.9 Hive常见属性配置

2.9.1 Hive数据仓库位置配置
       1)Default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下。
       2)在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。
       3)修改default数据仓库原始位置(将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中)。

<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
</property>

配置同组用户有执行权限

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

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

<property>
	<name>hive.cli.print.header</name>
	<value>true</value>
</property>

<property>
	<name>hive.cli.print.current.db</name>
	<value>true</value>
</property>

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

       (1)配置前,如图6-2所示
在这里插入图片描述
       (2)配置后,如图6-3所示
在这里插入图片描述
2.9.3 Hive运行日志信息配置

  1. Hive的log默认存放在/tmp/root/hive.log目录下(当前用户名下)
  2. 修改hive的log存放日志到/opt/module/hive/logs

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

hive-log4j.properties
[root@doit01conf]$ pwd
/opt/module/hive/conf
[root@doit01conf]$ mv hive-log4j.properties.template hive-log4j.properties

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

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

2.9.4参数配置方式

  1. 查看当前所有的配置信息
hive>set;
  1. 参数的配置三种方式

       (1)配置文件方式

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

(2)命令行参数方式
       启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。
       例如:

[root@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相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

北京小辉微信公众号

在这里插入图片描述

大数据资料分享请关注
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值