开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情
4.Hive初始化元数据库 在mysql中创建hive存储元数据的数据库metastore,再通过hive的初始化元数据库操作创建表 1)登陆MySQL [atguigu@hadoop102 module] bin/schematool -initSchema -dbType mysql -verbose 5.启动Hive 1)启动Hive [atguigu@hadoop102 hive]$ bin/hive 2)使用Hive
hive> show databases; // 查看所有的数据库
hive> show tables; // 查看所有的表,刚才创建的表test_derby是否存在?为什么?
hive> create table test_mysql (id int); // 创建test_mysql表,一个字段为id,类型为int
hive> insert into test_mysql values(1002); // 向表test_mysql中插入数据
hive> select * from test_mysql; // 查看test2表
3)开启另一个窗口测试,是否支持客户端并发访问 [atguigu@hadoop102 hvie]$ bin/hive hive> show tables; hive> select * from test_mysql; 5.直连模式问题: 在公司生产环境中,网络环境会非常复杂,mysql的所在环境可能存在网络隔离,无法直接访问;另外,mysql的root账户和密码在此模式下会存在泄露风险,存在数据安全隐患。 思考:在hadoop103上部署hive,元数据库使用的仍然是hadoop102的Mysql实例,如何实现?
2.3.3 元数据之MetaStore Server
1.元数据服务模式示意图
2.元数据服务模式
在服务器端启动MetaStore服务,客户端利用Thrift协议通过MetaStore服务访问元数据库。
元数据服务的访问方式更适合在生产环境中部署使用,相比内嵌式,该方式更加的灵活。(跨网络跨语言跨平台)
3.将Mysql做为元数据库,部署元数据服务
1)首先,将hive的元数据库配置为Mysql
[atguigu@hadoop102 hive] bin/hive --service metastore
2021-10-18 18:22:24: Starting Hive Metastore Server
注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作
1)启动 hive,查看表及表中数据,是否是Mysql数据库中的表。
2)在另一个窗口启动hive,测试多客户端能否同时连接操作。
思考:在hadoop103上使用元数据服务模式部署hive如何实现?
2.4 hive的两种访问方式
2.4.1 命令行的方式
- 在前面的操作中,我们都是通过cli的方式访问hive的。
- 我们可以切身的体会到,通过cli的方式访问hive的不足,如:cli太过笨重,需要hive的jar支持。
2.4.2 HiveServer2模式
1.JDBC访问Hive示意图:
2. JDBC方式访问Hive
JDBC方式,本质上是将hive包装为服务发布出去,开发者使用JDBC的方式连接到服务,从而操作hive。
减少了对hive环境的依赖
3. 开启Hiveserver2
1)在hive-site.xml文件中添加如下配置信息
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<!-- 指定hiveserver2连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
- 重启MetaStore服务 [summer@hadoop102 hive] bin/hive --service hiveserver2 4)启动beeline客户端(需要多等待一会,否则会报错连不上) [summer@hadoop102 hive]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n summer 5)注意:如果出现异常报错,如summeris not allowed to impersonate summer