3.8 虚拟列
虚拟列本身是一个不存在列,在数据查询的时候,可以通过虚拟列去查询数据的的路径,以及数据的偏移量,这两个内容都是hive中为用户提供的虚拟列进行的查询
虚拟列存在两种:
INPUT__FILE__NAME 代表数据的文件保存路径
范例: 通过查询虚拟列得到文件保存路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15select 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: 得到数据文件的偏移量信息
范例: 通过虚拟列查询数据的偏移量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16select 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,则另一用户无法访问, 会出现以下错误信息
1Caused 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
1rpm -qa | grep -i mysql
通过以上命令检查系统中是否安装过mysql ,执行该命令发现确实存在mysql的安装包如下
1mysql-libs-5.1.73-7.el6.x86_64
2 卸载已有的mysql安装包
1sudo rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
卸载完成之后执行查群命令,查看是否卸载成功
1rpm -qa | grep -i mysql
通过以上查询,发现确实已经卸载成功
3 上传mysql的安装包分为server端与client端
1
2
3MySQL-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
1sudo rpm -ivh MySQL-server-5.5.47-1.linux2.6.x86_64.rpm
通过rpm方式 安装mysql client
1sudo rpm -ivh MySQL-client-5.5.47-1.linux2.6.x86_64.rpm
5 查看mysql的运行状态
1sudo service mysql status
6 启动mysql 服务
1sudo service mysql start
7 再次查看mysql 运行状态
1MySQL running (28554)[ OK ]
显示以上的结果说明mysql安装成功
3.9.2 设置密码,以及远程授权
Mysql 安装完成之后,进入到mysql的命令
1mysql -uroot
进入到mysql数据库之后,设置mysql的密码
1update user set password=PASSWORD('root') where User='root';
修改密码之后,查询user表内容如下
1
2
3
4
5
6
7
8
9
10+------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | hadoop03 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | ::1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | | localhost | | | | hadoop03 |
说明在本地已经成功设置好了密码,通过新设置的密码登录mysql
1mysql -uroot -proot
发现登不了,出错信息如下
1Access denied for user 'root'@'localhost' (using password: YES)
说明用户名或者密码不正确
设置远程连接授权
在user表中存在字段,host 该字段表示可以访问mysql 的路径地址,从哪个节点可以访问(远程或者本地)由这个字段来决定
所以要授权远程登录,则需要修改host字段,增加一条信息,表示任意节点都可以访问mysql
用%号来表示任意
1update user set host='%' where user='root' and host='127.0.0.1';
完成以上语句之后,需要对修改的user进行刷新生效语句操作
1flush privileges;
完成以上操作之后验证 mysql 用户登录,可以正常的登录成功
3.9.3 配置hive元数据保存在mysql
需要在hive-site配置文件中进行配置 ,具体的配置信息如下:
1 设置hive连接mysql的URL
1
2
3
4
5
6<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的驱动类
1
2
3
4
5
6<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的用户名
1
2
3
4
5<property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>Username to use against metastore database</description> </property>
4 设置mysql的密码
1
2
3
4
5
6<property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>password to use against metastore database</description> </property>
完成以上的配置之后,需要在hive/lib 存放jdbc的驱动包
对于上传的驱动包,最好修改以下权限
1sudo chown -R hadoop:hadoop mysql-connector-java-5.1.31.jar
把驱动拷贝到hive目录下的lib文件夹下
1cp mysql-connector-java-5.1.31.jar /opt/app/apache-hive-1.2.1-bin/lib/
到hive的lib下检查是否拷贝成功
以上的步骤就步骤配置完成,退出hive重新登录,检查mysql中是否创建了matesotre数据库,如果创建成功,则说明配置成功
1
2
3
4
5
6
7
8
9
10
11mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | metastore | | mysql | | performance_schema | | test | +--------------------+
查看mysql show databases 发现如上metastore 数据库创建成功
最后
以上就是现代黑猫最近收集整理的关于Hive -------- 使用mysql保存hive元数据,Mysql的安装以及配置步骤的全部内容,更多相关Hive内容请搜索靠谱客的其他文章。
发表评论 取消回复