概述
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 数据库创建成功
最后
以上就是现代黑猫为你收集整理的Hive -------- 使用mysql保存hive元数据,Mysql的安装以及配置步骤的全部内容,希望文章能够帮你解决Hive -------- 使用mysql保存hive元数据,Mysql的安装以及配置步骤所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复