大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说sparksql读取hive_sparkhive与hadoop,希望您对编程的造诣更进一步.
设置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
原文地址:https://www.cnblogs.com/bigdata-familyMeals/p/14521231.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6460.html