Hive -------- 使用mysql保存hive元数据,Mysql的安装以及配置步骤

版权声明:个人原创,转载请标注! https://blog.csdn.net/Z_Date/article/details/83995887

3.8 虚拟列

虚拟列本身是一个不存在列,在数据查询的时候,可以通过虚拟列去查询数据的的路径,以及数据的偏移量,这两个内容都是hive中为用户提供的虚拟列进行的查询

虚拟列存在两种:

INPUT__FILE__NAME  代表数据的文件保存路径

范例: 通过查询虚拟列得到文件保存路径

select ename ,INPUT__FILE__NAME from emp;
SMITH   hdfs://ns1/user/hive/warehouse/emp/emp.txt
ALLEN   hdfs://ns1/user/hive/warehouse/emp/emp.txt
WARD    hdfs://ns1/user/hive/warehouse/emp/emp.txt
JONES   hdfs://ns1/user/hive/warehouse/emp/emp.txt
MARTIN  hdfs://ns1/user/hive/warehouse/emp/emp.txt
BLAKE   hdfs://ns1/user/hive/warehouse/emp/emp.txt
CLARK   hdfs://ns1/user/hive/warehouse/emp/emp.txt
SCOTT   hdfs://ns1/user/hive/warehouse/emp/emp.txt
KING    hdfs://ns1/user/hive/warehouse/emp/emp.txt
TURNER  hdfs://ns1/user/hive/warehouse/emp/emp.txt
ADAMS   hdfs://ns1/user/hive/warehouse/emp/emp.txt
JAMES   hdfs://ns1/user/hive/warehouse/emp/emp.txt
FORD    hdfs://ns1/user/hive/warehouse/emp/emp.txt
MILLER  hdfs://ns1/user/hive/warehouse/emp/emp.txt

block__offset__inside__file: 得到数据文件的偏移量信息

范例: 通过虚拟列查询数据的偏移量

select ename ,BLOCK__OFFSET__INSIDE__FILE from emp;
ename   block__offset__inside__file
SMITH   0
ALLEN   44
WARD    97
JONES   149
MARTIN  194
BLAKE   249
CLARK   294
SCOTT   339
KING    385
TURNER  429
ADAMS   480
JAMES   524
FORD    567
MILLER  612

3.9 使用mysql保存hive元数据

由于hive中默认的元数据保存在derby中只能单用户访问,如果一个在访问hive,则另一用户无法访问, 会出现以下错误信息

Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/app/apache-hive-1.2.1-bin/metastore_db.

为了解决以上的问题,可以把hive的元数据保存在mysql中

 

3.9.1 Mysql的安装步骤

1 在linux系统中可能存在mysql的安装包,所以在第一步先检查系统中是否安装过mysql

 rpm -qa | grep -i mysql

通过以上命令检查系统中是否安装过mysql ,执行该命令发现确实存在mysql的安装包如下

mysql-libs-5.1.73-7.el6.x86_64

2 卸载已有的mysql安装包

sudo rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

卸载完成之后执行查群命令,查看是否卸载成功

rpm -qa | grep -i mysql

通过以上查询,发现确实已经卸载成功

 

3 上传mysql的安装包分为server端与client端

 MySQL-client-5.5.47-1.linux2.6.x86_64.rpm
 MySQL-server-5.5.47-1.linux2.6.x86_64.rpm

 

4 安装mysql软件

通过rpm方式  安装mysql server

sudo rpm -ivh MySQL-server-5.5.47-1.linux2.6.x86_64.rpm 

通过rpm方式  安装mysql client

sudo rpm -ivh MySQL-client-5.5.47-1.linux2.6.x86_64.rpm

5 查看mysql的运行状态

sudo service mysql status

6 启动mysql 服务

sudo service mysql start

7 再次查看mysql 运行状态

MySQL running (28554)[  OK  ] 

显示以上的结果说明mysql安装成功

 

 

3.9.2 设置密码,以及远程授权

Mysql 安装完成之后,进入到mysql的命令

mysql -uroot

进入到mysql数据库之后,设置mysql的密码

 update user set password=PASSWORD('root')  where User='root';

修改密码之后,查询user表内容如下

+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | hadoop03  | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | ::1       | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
|      | localhost |                                           |
|      | hadoop03  |  

说明在本地已经成功设置好了密码,通过新设置的密码登录mysql

mysql -uroot -proot

发现登不了,出错信息如下

 Access denied for user 'root'@'localhost' (using password: YES)

说明用户名或者密码不正确

 

设置远程连接授权

 

在user表中存在字段,host 该字段表示可以访问mysql 的路径地址,从哪个节点可以访问(远程或者本地)由这个字段来决定

 

所以要授权远程登录,则需要修改host字段,增加一条信息,表示任意节点都可以访问mysql

用%号来表示任意

update user set host='%' where user='root' and host='127.0.0.1';

完成以上语句之后,需要对修改的user进行刷新生效语句操作

flush privileges;

完成以上操作之后验证 mysql 用户登录,可以正常的登录成功

3.9.3 配置hive元数据保存在mysql

需要在hive-site配置文件中进行配置 ,具体的配置信息如下:

1 设置hive连接mysql的URL

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop01:3306/metastore?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>

Metastore: 默认保存hive中的元数据,是一个数据库的名字

 

2 设置JDBC的驱动类

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>

3 设置mysql的用户名

<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
  </property>

4 设置mysql的密码

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

 

完成以上的配置之后,需要在hive/lib 存放jdbc的驱动包

 

对于上传的驱动包,最好修改以下权限

 sudo chown -R hadoop:hadoop mysql-connector-java-5.1.31.jar 

把驱动拷贝到hive目录下的lib文件夹下

cp mysql-connector-java-5.1.31.jar /opt/app/apache-hive-1.2.1-bin/lib/

 

到hive的lib下检查是否拷贝成功

 

以上的步骤就步骤配置完成,退出hive重新登录,检查mysql中是否创建了matesotre数据库,如果创建成功,则说明配置成功

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

查看mysql show databases 发现如上metastore 数据库创建成功

猜你喜欢

转载自blog.csdn.net/Z_Date/article/details/83995887