启动
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
标签:vax 创建 pass password 表名 rop als image png
查看更多关于spark-sql-04-on_hive的详细内容...