hive表数据估算,Hive 修改表数据
发表于 ・ 方案策划
本文章将对hive表数据估算和一些Hive 修改表数据的题进行详细解,希望对各位都有所帮助。
Spark与Hive集成
SparkSQL设计的目的是让用户能够使用SQL语法来处理Spark上的结构化数据。它支持丰富的数据源,可以是RDD也可以是外部数据源文件、json、csv、parquet、hive、hbase等。SparkSQL的一个重要分支是Spark兼容Hive,即Hive的元数据管理、HQL语法Spark中使用的、UDF、序列化和反序列化SerDers函数
SparkHive集成
这里会涉及到两个概念SparkonHive和HiveonSpark,那么两者有什么区别呢?
1.了解SparkonHive和HiveonSpark
1Hive上的Spark
Hive在这里扮演的角色是存储角色,Spark负责SQL的分析、优化和执行。具体可以理解为SparkSQL使用Hive语句来操作Hive表,底层计算引擎使用SparkRDD。具体流程如下
通过SparkSQL,加载Hive配置文件,获取Hive元数据信息(通常存储在MySQL或PostgreSQL等关系数据库中,建议不要使用内置的derby数据库,因为Derby数据库不支持多用户同时访
获取Hive的元数据信息后,就可以获取Hive表的数据;
通过SparkSQL操作Hive中的表;
2Hive上的Spark
Hive在这里的作用不仅仅是作为存储,还负责SQL分析和优化。Spark只负责计算,也就是说Spark的作用是执行引擎。一般会进行以下几种配置
配置hvie-sitelt;propertygt;lt;namegt;hiveexecutionenginelt;/namegt;lt;值gt;sparklt;/值gt;lt;描述gt;需要[mr、tez、spark]之一选择执行引擎选项有mrMapreduce、default、tez、spark虽然MR由于历史原因仍然是默认引擎,但它本身就是一个历史引擎,并且在Hive2行中已弃用。已删除,无需进一步警告lt;/descriptiongt;lt;/属性gt;将包复制到$HIVE_HOME/lib/。这种配置方式可能会因为依赖包的版本题而导致很多错误,处理起来很麻烦。一般情况下,需要编译Spark源码。
与Hive上的Spark相比,这种实现比较繁琐,并且必须重新编译Spark并导入Hive的依赖jar包。目前主流使用是SparkonHive。下面使用SparkonHive来讲解Spark与Hive的集成。
2.Spark在Hive流程上集成HiveSpark
1MySQL元数据库安装与配置
安装MySQL的安装配置参考
2创建并授权用户操作MySQL中的Hive元数据库
mysqlgt;创建用户39;39;标识为39;查询正常,0行受影响000secmysqlgt;将hivedb的所有权限授予39;39;由39确定;带授予选项;查询正常,0行受影响,1条警告000secmysqlgt;刷新权限;查询正常,0行受影响000sec3MySQLJDBC驱动程序包
这里有两种方法
方法一将MySQLJDBC驱动包复制到$SPARK_HOME/jars目录下;
方法二启动spark-sql命令行时指定--driver-class-path指定MySQL的JDBC驱动包位置
这里我选择第一种方法
4配置hive-sitelt;5高可用hdfs配置根据实际情况
如果hdfs是高可用的hdfs,即有多个namenode,有两种情况可以解决题
方法一hdfs的core-siteexportHADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop这两种方法需要选择其中一种,这里我选择第二种。
6启动spark-sql
启动之前,请确保Hadoop集群和Spark独立集群已成功启动。然后启动spark-sql:
[hadoopnode01Spark]$bin/spark-sql--masterSpark://node01:7077,node02:7077--confSparksqlwarehousedir=hdfs://mycluster/user/hive/warehouse注意
由于Spark20版本之后出现了SparkSession,所以在运行spark-sql时,会设置默认的sparksqlwarehousedir=spark-warehouse。此时,Hive与SparkSQL集成完成后,启动spark-sql脚本时,会在该目录下创建一个sparksqlwarehousedir指定的目录,用于存放spark-sql创建数据库和数据表信息,该目录与之前的hive数据信息不存在于同一路径下,也就是说spark-sql创建的数据库和表信息是本地的,不在HDFS上,不利于操作。所以,解决方案如下
启动spark-sql时,添加一个参数
--confsparksqlwarehousedir=hdfs://mycluster/user/hive/warehouse这样可以保证spark-sql启动时不会生成新的存放数据的目录。Sparksql和hive最终使用的是hdfs上hive存储数据的目录。
此时查看MySQL数据库,可以看到元数据信息已经创建完成
元数据信息
7日常操作
Spark-SQLGT;显示数据库;//检查哪些数据库spark-sqlgt;创建数据库mydb;//创建数据库//创建表sanguospark-sqlgt;创建表sanguogt;idbigint,master字符串,member字符串,Country字符串,powerint,武器字符串gt;rowformatdelimitedfieldsreturnedby39;//导入本地sanguotxt中的数据1、刘备、关羽、蜀、105、青龙偃月刀2、刘备、张飞、蜀、102、张八蛇矛3、刘备、赵云、蜀、100、剑4、刘备、马超、蜀、99、霸王枪5、刘备、黄忠、蜀、98、弓箭6、刘备、诸葛亮、蜀,64,羽扇豆7,曹操,张辽,魏国,95,刀8,曹操,典韦,魏国,99,刀9,曹操,郭嘉,魏国,64,34;spark-sqlgt;加载数据本地inpath39;intotablesangu;//查看数据spark-sqlgt;选自三国;查询结果
后记
元数据信息存储在MySQL中,MySQL中存储了描述hive表的描述信息,如数据库名、表名、列类型等元数据信息,同时也存储了hdfs的位置;
hive存储业务数据,用于离线分析的数据就是数据仓库;
本文主要是解一些hive表数据估算的题,其中对Hive 修改表数据的相关内容也进行了一些详细的解释,希望能帮助到诸位。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。