hive远程配置
- 前提环境要求安装mysql和安装hadoop
- 安装hive,要搭建可以进行远程连接hive的环境
远程连接hive,服务端和客户端不在一个节点的上的搭建方式
1.前期准备的包
环境为hive-3.1.2
需要下载 hive-exec-3.1.2.jar,mysql-connector-java-5.1.40.jar这两个包放在hive_home/lib下
mysql-connector-java-5.1.40.jar包下载地址
2. 服务端的配置修改hive-site.xml,如果在hive_home/conf下没有这个文件则:
cp hive-site.xml.template hive-site.xml
对hive-site.xml 中的需要的配置为下
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://****.****.****.****:3306/metastore?createDatabaseIfNotExist=true</value><!--MySQL地址metastore是元数据库的名称,需要在mysql中创建相同名字的数据库-->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value><!--MySQL驱动-->
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_m</value><!--MySQL用户名-->
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value><!--MySQL密码-->
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>true</value>
</property>
<!--(下面这个ip为hive服务端所在的地址)-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://****.****.****.****:9083</value>
</property>
- 客户端的配置
客户端配置跟服务端一样,就是hive-site.xml 配置为下
<property>
<name>hive.metastore.uris</name>
<value>thrift://****.****.****.****:9083</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
</configuration>
- 初始化
在配置文件都配好了后,在hive的服务端进入 hive_home/bin下进行初始化
运行:
schematool -initSchema -dbType mysql
- 启动
在服务端进入hive_home/bin
hive --service metastore
在客户端进入hive_home/bin 直接启动用(hive)启动就可以了
4.踩的坑
- 服务端没有配置hive.metastore.uris ,导致客户端连接时,被拒绝
- 一定要注意javax.jdo.option.ConnectionUserName,数据库的user,是否有权限访问hive对应的数据库,如果没有权限访问,则客户端会报错,拒绝连接的错误(refused connection)
mysql用户授权
例如:数据库用户名为hive_m, hive对应的数据库名为 metastore
1.先进入root用户
2.用root用户授权用户hive_m可以访问metastore用户
grant all on metastore.* to 'hive_m'@'%';
flush privileges
- 访问mysql的用户一定要注意,是否可以远程访问
最好不要用root用户访问,因为当用户匹配的host中有localhost的时候,远程会拒绝连接mysql。
mysql设置远程访问权限
root用户登录
user mysql
delete from user where user='hive_m' and host!='%'
create user 'hive_m'@'%' identified by 'password'
grant all on *.* to 'hive_m'@'%' identified by 'password'
flush privileges;
- 在启动客户端前,要启动服务端的服务,否则在启动客户端执行sql语句时,报错“unable to instantiate org.apache.hadoop.hive.ql.metadata…”
flink连接hive
- 环境要求 hadoop,hive服务端配好,mysql,java
- 需要额外导入flink_home/lib的包
flink-sql-connector-hive-3.1.2
包的下载地址为:
https://ci.apache.org/projects/flink/flink-docs-stable/zh/dev/table/hive/ - flink1.11 已经不用embedded的方式进行启动hive 了,通过配置文件的方式来启动,
1)要把hive的服务端的conf文件移动到 要启动flink 的机器上,主要就是 hive-site.xml文件
2)修改flink_home/conf 下的sql-client-defaults.yaml,一定要注意yaml文件的格式,否则会报错
catalogs:
- name: myhive
type: hive
hive-conf-dir: /opt/hive_conf/conf
hive-version: 3.1.2
- 启动
可以在flink_home/bin下的启动客户端
sql.client.sh embedded
启动的前提,hadoop集群,mysql,hive这3个服务都要启动起来,才可以