• Spark On Hive 配置


     配置

    1、将Hive-site.xml复制到Spark/conf目录下

    如果hive-site中配置了查询引擎,需要将其注掉

     <!-- <property>
        <name>hive.execution.engine</name>
        <value>tez</value>
    </property>
    -->

    2、将把 Mysql 的驱动  mysql-connector-java-5.1.27-bin.jar copy 到 Spark/jars/目录下

    3、保险起见,可将core-site.xml和hdfs-site.xml 拷贝到Spark/conf/目录下

    4、如果hive中表是采用Lzo或snappy等压缩格式,需要配置spark-defaults.conf,详情参考https://www.cnblogs.com/yangxusun9/p/12827957.html#fneQWfJQ,或者直接将lzo包拷贝到jars目录下

    花式连接

    利用spark-sql 来代替 hive

    最普遍的应用就是在脚本中, 用 ''spark-sql --master yarn '' 来代替   " hive",来提高运行速度

    开启thriftserver服务,利用beeline连接

    开启thriftserver服务

    sbin/start-thriftserver.sh 
    --master yarn 
    --hiveconf hive.server2.thrift.bind.host=hadoop102   ##默认
    -–hiveconf hive.server2.thrift.port=10000     ##默认

    使用beeline

    bin/beeline
    
    # 然后输入
    !connect jdbc:hive2://hadoop102:10000
    # 然后按照提示输入用户名和密码

    利用第三方工具(如IDEA)连接

    添加依赖

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.11</artifactId>
        <version>2.1.1</version>
    </dependency>

    配置文件

    保险起见,把core-site.xml,hdfs-site.xml,hive-site.xml都拷贝到Rsource目录下

     代码

    注意,此时又可能会报权限不足的错   org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied:

    需要在代码首行添加用户名

    object JDBCDemo {
        def main(args: Array[String]): Unit = {
            System.setProperty("HADOOP_USER_NAME", "guigu")//!!!解决权限报错
            val conf = new SparkConf().setAppName("JDBCDemo$").setMaster("local[*]")
            val spark = SparkSession.builder().config(conf)
                
                .enableHiveSupport()//!!!!默认不支持外部hive,这里需调用方法支持外部hive
                .getOrCreate()
            import spark.implicits._
            spark.sql("use gmall")
            spark.sql("show tables").show()
    
        }
    
    }

     对hive中的表进行读写操作

    读按照上面代码就可以进行正常操作,但是写的时候需要注意,创建数据库时数据库位置需要提前声明,不然就是在本地创建,创建表则不用声明

    如果之前导入了core-site,需要将其中的lzo配置注掉,并且在指定文件位置时会默认集群位置,如果要用本地,就用 file://

    object ConnectDemo {
        def main(args: Array[String]): Unit = {
            System.setProperty("HADOOP_USER_NAME", "guigu")
            val conf = new SparkConf().setAppName("ConnectDemo$").setMaster("local[*]")
            val spark = SparkSession
                .builder().config(conf)
                .enableHiveSupport()
                //需指明数据库地址,不然就是在本地创建
                .config("spark.sql.warehouse.dir", "hdfs://hadoop102:9000/user/hive/warehouse")
                .getOrCreate()
            import spark.implicits._
            spark.sql("use spark1")
            //        val df = spark.read.json("User")   //第一列为 name:string 第二列为salary:long
            //        spark.sql("drop table user")
            //        df.printSchema()
            //            df.write.mode(SaveMode.Append).saveAsTable("user")
    
            //saveAsTable写入,要求字段名字和数据类型与原表保持一致,字段顺序可随意
            //        val df1 = List((1000l, "ace"), (1011l, "jaek")).toDF("salary", "name") //这里数据类型必须跟原表保持一致
            //        df1.write.mode(SaveMode.Append).saveAsTable("user")
    
            //insertInto
            //要求字段数据类型和顺序必须保持一致,名字可随意,否则
            //          +------+------+
            //          |  name|salary|
            //          +------+------+
            //          |  Andy|  4500|
            //            |Justin|  3500|
            //            | Berta|  4000|
            //            |  jaek|  1011|
            //            |   ace|  1000|
            //            |  1000|  null|
            //            |  1011|  null|
            //            +------+------+
    //        val df1 = List((1000l, "ace"), (1011l, "jaek")).toDF("s", "n")
    //        df1.write.insertInto("user")
    
    //        使用 hive的insert 语句
            spark.sql("insert into table user values ('andy',5000)")
            spark.sql("select * from user").show()
        }
    
    }

     

     

  • 相关阅读:
    BIND_MISMATCH导致过多VERSION COUNT的问题
    Using dbms_shared_pool.purge to remove a single task from the library cache
    SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT
    How to delete expired archive log files using rman?
    Oracle利用external table 查看trace文件
    全栈开发经验
    ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程
    ASP.NET Core教程:ASP.NET Core程序部署到Linux
    ASP.NET Core教程:ASP.NET Core 程序部署到Windows系统
    C#:窗体传值
  • 原文地址:https://www.cnblogs.com/yangxusun9/p/12890770.html
Copyright © 2020-2023  润新知