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

