• 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:

  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/bigdata-familyMeals/p/14521231.html
Copyright © 2020-2023  润新知