sparksql04on_hive [数据库教程]

database

 

 

 

设置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 hiveserver2

beeline

!connect jdbc:hive2://ke02:10000

root 密码随机

测试: show databases

 

总结:

连接hive方式

1. hive --service cli 需要本地配置hive.metastore.uris

2. 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

回到顶部