sparksql04on_hive [数据库教程]
设置metastore
机器: ke01、ke02、ke03、ke04
- ke03 为元数据库
- ke01、ke02、ke04 连接到元数据库 、
hive-metastore搭建
ke03:<configuration><property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://ke01:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>aa123456</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>
ke01.02.04:
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://ke03:9083</value>
</property>
</configuration>
启动
ke03:hive
--help // 技巧hive --service --help //技巧
启动
hive --service metastore
ke04: hive = hive --service cli 连接hive
// CLI指的是 command-line interface
测试:
create table test01( name string );
原理: ke04 通过command-line interface 将sql写进去,动用元数据,将建表语句通知ke03:metastore 最终存入mysql
mysql -> hive.TBL 有刚创建的表:test01
启动可能遇到的异常
MetaException(message:Version information not found in metastore. )配置:
<property><name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
一般公司可能禁止使用命令行方式直接操作hive,使用hiveservice2, 只要能和ke03这台机器TCP通信,hiveservice2就可以连接
ke02: hive --service hiveserver2beeline
!connect jdbc:hive2://ke02:10000root 密码随机
测试: show databases
总结:
连接hive方式1. hive --service cli 需要本地配置hive.metastore.uris2. beeline !connect jdbc:hive2://ke02:10000 只要能和hiveserver2通讯即可
spark连接 hive-metastore 配置:
.config("hive.metastore.uris", "thrift://ke03:9083")
val session = SparkSession.builder().master(
"local").appName(
"spark on hive").config(
"hive.metastore.uris", "thrift://ke03:9083").enableHiveSupport()
// 开启hive支持.getOrCreate()
val sc = session.sparkContext
sc.setLogLevel("ERROR")
session.catalog.listTables().show()
/**
+------+--------+-----------+---------+-----------+
| name|database|description|tableType|isTemporary|
+------+--------+-----------+---------+-----------+
|test01| default| null| MANAGED| false|
|test02| default| null| MANAGED| false|
+------+--------+-----------+---------+-----------+
*/val dataFrame
= session.sql("show tables ")dataFrame.show()
/**
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
| default| test01| false|
| default| test02| false|
+--------+---------+-----------+
*/// session.sql("create table test02(id int)")
// 数据存入HDFS,配置文件需要加入HDFS地址,resources目录下加入core-site.xml hdfs-site.xml
session.sql("insert into test02 values (3),(4),(5)")
import session.implicits._
val df = List(
"小柯",
"张三",
"lisi").toDF("name")
df.createTempView("test03")
/**
* ooxx表虽然没有写入到hdfs、mysql中,但是可以加入到metastore中,成为临时表
+------+--------+-----------+---------+-----------+
| name|database|description|tableType|isTemporary|
+------+--------+-----------+---------+-----------+
|test01| default| null| MANAGED| false|
|test02| default| null| MANAGED| false|
|test03| default| null| MANAGED| false|
|test03| null| null|TEMPORARY| true|
+------+--------+-----------+---------+-----------+
*/session.catalog.listTables().show()
session.sql(
"show tables ").show()/*** ooxx是临时表
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
| default| test01| false|
| default| test02| false|
| default| test03| false|
| | test03| true|
+--------+---------+-----------+
*//**
* mysql 表TBLS数据
* 主键 创建时间 DBS表 角色 输入输出格式表主键 表名 表类型
* 1 1613414690 1 0 root 0 0 1 test01 MANAGED_TABLE
* 2 1613416318 1 0 root 0 0 2 test02 MANAGED_TABLE
*
* DBS表 排序 数据存储地址
* 1 Default Hive database hdfs://mycluster/user/hive/warehouse default public ROLE
*/
// test03写入到了hdfs中,临时表变成了持久表
df.write.saveAsTable("test03")
注意
- spark数据写入到HDFS,需要配置写入HDFS地址
- core-site.xml --> hdfs://mycluster --> hdfs-site.xml --> dfs.ha.namenodes.mycluster --> nn1,nn2 --> dfs.namenode.rpc-address.mycluster.nn1 / nn2 --> ke01:8020 / ke02:802 --> dfs.namenode.http-address.mycluster.nn1 / nn2 --> ke01:50070 /ke02:50070
表test03写入到了HDFS:
spark-sql-04-on_hive
以上是 sparksql04on_hive [数据库教程] 的全部内容, 来源链接: utcz.com/z/535364.html