hive教程:启动metastore(元数据)服务,并访问hive

hive 连 MySQL 的缺点

之前只是在 linux终端 启动 本地 hive客户端,这种方式一般用于 调试

在 开发 中,需要 远程 连接 hive,执行 sql 语句

当有多台 服务器 安装 hive,都连接 mysql,会 暴露 mysql 数据库的 用户名、密码,造成不安全

解决方法

开启 metastore 服务,由该服务连接 MySQL,只有该服务知道MySQL用户名、密码

hive客户端只需要连接 metastore 服务即可,不需要知道 MySQL数据库 的 用户名 和 密码

修改配置

修改 hive-site.xml 文件,添加如下配置信息

vim $HIVE_HOME/conf/hive-site.xml

增加下面内容:

<!-- 指定存储元数据要连接的地址 -->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://hadoop1:9083</value>
</property>

注意:无法使用 hive客户端

增加上面配置后,能启动 hive客户端,但执行命令时就会报错

启动:

hive

然后 执行某个命令,如下:

show databases;

报错如下:

FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

原因:需要启动元数据服务

启动服务(前台方式)

hive --service metastore

启动后,当前窗口不能关闭

再次启动 hive客户端

启动 元数据服务 后,再次启动 hive客户端:

hive

能够启动成功

然后能够正常使用命令:

show tables;

启动服务(后台方式)

使用前台方式启动服务,窗口不能关闭,可以用后台方式启动

nohup hive --service metastore 2>&1 &

解释:

  • nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态

  • /dev/null:是 Linux 文件系统中的一个文件,被称为黑洞,所有写入改文件的内容 都会被自动丢弃

  • 2>&1: 表示将错误输出 重定向 到标准输出上
    第一个2表示错误输出,另外0表示标准输入,1表示标准输出

  • &: 放在命令结尾,表示后台运行

一般会组合使用: nohup [xxx 命令操作]> file 2>&1 &,表示将 xxx 命令运行的结 果输出到 file 中,并保持命令启动的进程在后台运行。

执行结果:

[1] 24742
[root@hadoop1 ~]# nohup: 忽略输入并把输出追加到"nohup.out"

敲回车后,就可以继续输入命令

只能通过 kill 关闭

后台方式运行,只能通过 kill关闭

先执行 jps 查看java进程,如下:

7792 NameNode
8209 SecondaryNameNode
8514 ResourceManager
21122 RunJar
7957 DataNode
30614 Jps
8680 NodeManager

RunJar 就是,

然后通过 kill 命令关闭:

kill -9 21122

原文出处:/show_1IXjyrb5E3w.html