flink1.11 连接hive 与 hive的远程连接的配置与错误踩坑总结

hive远程配置

  1. 前提环境要求安装mysql和安装hadoop
  2. 安装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>
  1. 客户端的配置
    客户端配置跟服务端一样,就是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>

  1. 初始化
    在配置文件都配好了后,在hive的服务端进入 hive_home/bin下进行初始化
    运行:
    schematool -initSchema -dbType mysql

  1. 启动
    在服务端进入hive_home/bin
    hive --service metastore

在客户端进入hive_home/bin 直接启动用(hive)启动就可以了


4.踩的坑

  1. 服务端没有配置hive.metastore.uris ,导致客户端连接时,被拒绝
  2. 一定要注意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
  1. 访问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;
  1. 在启动客户端前,要启动服务端的服务,否则在启动客户端执行sql语句时,报错“unable to instantiate org.apache.hadoop.hive.ql.metadata…”

flink连接hive

  1. 环境要求 hadoop,hive服务端配好,mysql,java
  2. 需要额外导入flink_home/lib的包
    flink-sql-connector-hive-3.1.2
    包的下载地址为:
    https://ci.apache.org/projects/flink/flink-docs-stable/zh/dev/table/hive/
  3. 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
  1. 启动
    可以在flink_home/bin下的启动客户端
    sql.client.sh embedded
    启动的前提,hadoop集群,mysql,hive这3个服务都要启动起来,才可以
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值