sparksql读取hive_sparkhive与hadoop

sparksql读取hive_sparkhive与hadoop
设置metastore 机器: ke01、ke02、ke03、ke04 ke03 为元数据库 ke01、ke02、ke04 连接到元数据库 、 hive-m…

	spark-sql-04-on_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 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

(0)
上一篇 2023-04-09
下一篇 2023-04-09

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注