XY个人笔记

    Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

    Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapReduce 任务)。Hive不存在主从架构,不需要安装在每台服务器上,只需要安装几台就行了。

一、Hive安装配置

1.首先将hive的安装包上传到我们的虚拟机上并解压到相应目录

$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/modules/apache/

    个人习惯把解压后的文件更名简洁一点

$ mv apache-hive-1.2.1-bin/ hive-1.2.1

hive的metastore自己挂掉 hive metastore ha_MySQL安装

2.重命名conf里面的hive-env.sh.template为hive-env.sh,并配置

$ mv hive-env.sh.template hive-env.sh

hive的metastore自己挂掉 hive metastore ha_hive的metastore自己挂掉_02

hive的metastore自己挂掉 hive metastore ha_Hive元数据库更改为MySQL_03

hive的metastore自己挂掉 hive metastore ha_hive的metastore自己挂掉_04

3.重命名或copy hive-default.xml.template 文件

$ cp hive-default.xml.template hive-site.xml

在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>

hive的metastore自己挂掉 hive metastore ha_Hive元数据库更改为MySQL_05

4.在HDFS上创建文件,增加权限

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

5.进入hive

$ bin/hive

hive的metastore自己挂掉 hive metastore ha_hive的metastore自己挂掉_06

6.成功进入hive 查看到我们的默认数据库default

hive的metastore自己挂掉 hive metastore ha_Hive元数据库更改为MySQL_07

7.默认的数据库在我们的HDFS里面是不会显示出来的

创建数据库

hive的metastore自己挂掉 hive metastore ha_hive的metastore自己挂掉_08

可以在HDFS中看到我们新创建的数据库test

hive的metastore自己挂掉 hive metastore ha_MySQL安装_09

8.Hive常用命令操作

a.使用数据库

hive>use test;

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_10

b.创建表

hive的metastore自己挂掉 hive metastore ha_Hive元数据库更改为MySQL_11

c.在/opt/datas下创建文件stu_info已制表符隔开

1	name
2	age
3	sex

d.加载数据,查看数据

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_12

d.查询数据为null,hive默认的分割符为^A(/001)

hive的metastore自己挂掉 hive metastore ha_hive的metastore自己挂掉_13

linux中为 Ctrl+V Ctrl+A   即为:^A

e.重新加载并显示数据

hive的metastore自己挂掉 hive metastore ha_MySQL安装_14

9.文件上传到HDFS上的根目录下

$ bin/hdfs dfs -put /opt/datas/hive_test /

hive的metastore自己挂掉 hive metastore ha_MySQL安装_15

hive的metastore自己挂掉 hive metastore ha_MySQL安装_16

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_17

10.load后再HDFS根目录的源文件消失(被剪切到表对应目录下),单数据插入成功。数据文件移动到了表对应的目录下面

hive的metastore自己挂掉 hive metastore ha_Hive的常用命令_18

11.如果数据的分隔符与表的数据分隔符不一致,插入数据查询的时候,发现数据都为null

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_19

二、Hive metastore 的三种方式及配置详解

Hive metastore三种配置方式 

a、本地Derby:

Derby数据库是Hive的默认数据库,这也是配置最简单的一种方式,但是又一个弊端是只能有一个hive服务使用数据库

b、本地MySQL:

这种存储方式需要在本地运行一个mysql服务器,需要Hive和MySQL在同一台服务器

c、远端MySQL:

这种存储方式需要在远端服务器运行MySQL,并且在Hive的服务需要启动metastore服务

#启动metastore服务命令
$ bin/hive --service metastore &

1.当我们在次启动一个hive的时候发现报错,Derby只能开启一个客户端

hive的metastore自己挂掉 hive metastore ha_hive的metastore自己挂掉_20

因为我们的hive默认的数据库Derby不能再做映射,所以我们要修改元数据存储的数据库,以下是Hive支持的数据库

hive的metastore自己挂掉 hive metastore ha_Hive的常用命令_21

2.下面我们安装一个MySql

$ yum -y install mysql-server

3.开启mysql服务

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_22

4.设置登录密码,验证成功

hive的metastore自己挂掉 hive metastore ha_MySQL安装_23

5.设置mysql开机启动

hive的metastore自己挂掉 hive metastore ha_MySQL安装_24

6.设置授权

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_25

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; 
mysql> select User,Host,Password from user;

hive的metastore自己挂掉 hive metastore ha_Hive的常用命令_26

7.放着更改元数据出现问题,只留root % 即可,剩余的可全部删掉

删除用户信息

mysql> delete from user where user = 'root' and host = '127.0.0.1';
mysql> delete from user where user = 'root' and host = 'localhost';

hive的metastore自己挂掉 hive metastore ha_MySQL安装_27

8.刷新授权表,重启服务

mysql> flush privileges;

hive的metastore自己挂掉 hive metastore ha_hive的metastore自己挂掉_28

hive的metastore自己挂掉 hive metastore ha_Hive的常用命令_29

9.1.修改hive-site.xml(本地MySQL模式)

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop01.com/metastore_hive?createDatabaseIfNotExist=true</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>123456</value>
</property>

9.2.修改hive-site.xml(远端MySQL模式)

<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://hadoop01.com/metastore_hive?createDatabaseIfNotExist=true</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>123456</value>
</property>
<property>
	<name>hbase.zookeeper.quorum</name>
	<value>hadoop01.com</value>
</property>
<property>
	<name>hive.metastore.uris</name>
	<value>thrift://hadoop01.com:9083</value>
</property>
<property>
	<name>hive.txn.manager</name>
	<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
	<name>hive.compactor.initiator.on</name>
	<value>true</value>
</property>

 10.将mysql的驱动jar拷贝到hibe/lib目录下,完成后打开多个客户端进行测试 

 

:如果启动远端MySQL模式需要启动metastore服务,否则会报如下错误:

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
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1521)
        ... 14 more
Caused by: MetaException(message:Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: java.net.ConnectException: 拒绝连接
        at org.apache.thrift.transport.TSocket.open(TSocket.java:187)

启动metastore服务命令:$ bin/hive --service metastore &

11.Hive的常用配置

    修改log4j: cp  hive-log4j.properties.template hive-log4j.properties
    修改:hive.log.dir=/opt/modules/apache/hive-1.2.1/logs

hive的metastore自己挂掉 hive metastore ha_Hive元数据库更改为MySQL_30

12.显示数据和列名,添加到hive-site.xml

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_31

<!-- 显示数据库名称 -->
<property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
</property>
<!-- 显示列名称 -->
<property>
    <name>hive.cli.print.header</name>
    <value>true</value>
</property>

 

三、卸载MySQL

1.查看已安装的mysql
命令:rpm -qa | grep -i mysql

2.依次卸载mysql相关
命令:yum remove mysql-community-server-5.6.36-2.el7.x86_64
 

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_32

3.删除mysql文件目录

使用命令查看mysql相关的文件目录:find / -name mysql

hive的metastore自己挂掉 hive metastore ha_MySQL卸载_33

 

HIVE的操作命令

hive> show tables;  ##查看表
hive> desc formatted hive_table;  ##描述表信息 desc hive_table
hive> alter table hive_table2 rename to test_rn;  ##更改表名
hive> alter table test_rn add columns (age int);  ##增加列
hive> alter table test_rn change id test_id int;  #修改列名id为test_id
hive> alter table test_rn  change   test_id id  double after age;  ## test_id改名为id并放到age后面
hive> alter  table test_rn  replace columns (cc  int,bb string,id int);  ##替换列(修改和替换全表的列)
hive> truncate table  stu_info; ##清除数据truncate 只清楚表的数据,不会删除元数据
hive> drop table  stu_test;  ##删除表以及表的元数据信息
hive> drop database hive_drop;  #删除数据库
hive> drop database hive_test CASCADE;  ##删除有表的数据库
hive> dese function when;  ##查看函数用法
hive> dese function extended case;  ##查看函数的详细用法
hive>

添加jar或者文件到hive运行环境当中
    add jar /opt/datas/mr.jar;
    add file /opt/datas/second.txt;
    
    list jar显示所有添加的jar

    delete  jar /opt/datas/mr.jar;

常用shell
    !  -》 表示访问的Linux本地的文件系统   !  ls  /opt/datas;
    dfs -》 表示访问的HDFS文件系统          dfs -ls /;