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()
    }

}

 

 

 

 

posted @ 2020-05-14 19:04  可以看看你胖次吗  阅读(4266)  评论(1编辑  收藏  举报
Live2D