03 ,内部表,建表,查看表结构,导入数据,支持 snappy ,支持 parquet ,spark( 转换 snappy,parquet )

一 ,基本概念 :

1 ,hive 中的表的构成 :

  1. 真实数据 : 以文件的形式,存储在 hdfs / s3 上
  2. 元数据 : 将表映射到文件,元数据存储在 mysql / oracle 中

2 ,内部表 :

  1. hive 自己维护真实数据
  2. 删除 : 元数据删除,真实数据删除

3 ,外部表 :

  1. hdfs / s3 维护真实数据
  2. 删除 : 只删除元数据,不删除真实数据

4 ,建表 :

create table student(tid int,tname string);

5 ,查看表结构 :

desc student;

二 ,内部表 : csv

1 ,创建内部表 :

create table t1 (tid int,tname string,age int);

2 ,查看所有表 :

show tables;

3 ,查看表结构 :

desc t1;

4 ,默认位置 : HDFS

例如 :
hdfs://ip-172-31-18-72.cn-northwest-1.compute.internal:8020/user/hive/warehouse/t1

5 ,mysql 查看存储信息 :

找到这张表 : SDS
在这里插入图片描述

6 ,建内部表,指定位置 : ( 注意 s3a / s3 )

create table t2 (tid int,tname string,age int) location ‘s3://lifecyclebigdata/dataWareHouse/BALABALA/06_hive_inner/t2’;

7 ,内部表,位置,分隔符 :

create table t3(tid int,tname string,age int) row format delimited fields terminated by ‘,’ location ‘s3://lifecyclebigdata/dataWareHouse/BALABALA/06_hive_inner/t3’;

8 ,建表 student :

use default;
create table student(tid int,tname string,tage int,taddr string,tclass string,tcourse string,tstore int) row format delimited fields terminated by ',' location 's3://lifecyclebigdata/dataWareHouse/BALABALA/06_hive_inner/student';

9 ,造数据 : student.csv

1,sfl,206,yingkou,314,yuwen,98
2,wtt,207,yingkou,324,shuxue,99
3,sswen,806,yingkou,314,yuwen,18
4,sswu,296,yingkou,344,shuxue,28
5,sjw,2010,yingkou,354,yuwen,93
6,sjy,226,yingkou,316,shuxue,94
7,ssx,236,yingkou,317,yuwen,95
8,wdd,246,tongliao,384,shuxue,68
9,stm,256,tongliao,394,yuwen,97
10,stx,606,tongliao,114,shuxue,18
11,szx,706,tongliao,124,yuwen,92

10 ,将数据上传搭配 s3 :

在这里插入图片描述

11 ,转换成 parquet :

package lifecycle00_test

import lifecycle01_tool.{Tool}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}

//  文件格式转换 :
//  snappy,parquet
object Test01 {
    def main(args: Array[String]): Unit = {
        val spark: SparkSession = Tool.getLocalSpark()
    
        import spark.implicits._
        import spark.sqlContext.implicits._
    
        //  1 ,读文件 :
        //      1,sfl,206,yingkou,314,yuwen,98
        val rdd: RDD[Row] = spark.sparkContext.textFile("s3a://lifecyclebigdata/dataWareHouse/BALABALA/08_hive_data/test01")
            .map(_.split(","))
            .map(line => Row(line(0).toInt,line(1),line(2).toInt,line(3),line(4).toInt,line(5),line(6).toInt))
        //  2 ,元数据
        val structType = StructType(Array(  StructField("id", IntegerType, true),
                                            StructField("name", StringType, true),
                                            StructField("age", IntegerType, true),
                                            StructField("addr", StringType, true),
                                            StructField("clazz", IntegerType, true),
                                            StructField("course", StringType, true),
                                            StructField("score", IntegerType, true)))
        //  3 ,建表 :
        val res: DataFrame = spark.createDataFrame(rdd, structType)
        
        //  4 ,写出
        res.write.option("compression","snappy").option("delimiter",",").parquet("s3a://lifecyclebigdata/dataWareHouse/BALABALA/08_hive_data/test02")
        spark.close()
    }
}

12 ,导入数据 :csv

load data inpath "s3://lifecyclebigdata/dataWareHouse/BALABALA/08_hive_data/test01/student.csv" into table student;

13 ,查询数据 : hive-cli

select * from student;
1       sfl     206     yingkou 314     yuwen   98
2       wtt     207     yingkou 324     shuxue  99
3       sswen   806     yingkou 314     yuwen   18
4       sswu    296     yingkou 344     shuxue  28
5       sjw     2010    yingkou 354     yuwen   93
6       sjy     226     yingkou 316     shuxue  94
7       ssx     236     yingkou 317     yuwen   95
8       wdd     246     tongliao        384     shuxue  68
9       stm     256     tongliao        394     yuwen   97
10      stx     606     tongliao        114     shuxue  18
11      szx     706     tongliao        124     yuwen   92

14 ,spark-cli :

结果 :

+---+-----+----+--------+------+-------+------+
|tid|tname|tage|   taddr|tclass|tcourse|tstore|
+---+-----+----+--------+------+-------+------+
|  1|  sfl| 206| yingkou|   314|  yuwen|    98|
|  2|  wtt| 207| yingkou|   324| shuxue|    99|
|  3|sswen| 806| yingkou|   314|  yuwen|    18|
|  4| sswu| 296| yingkou|   344| shuxue|    28|
|  5|  sjw|2010| yingkou|   354|  yuwen|    93|
|  6|  sjy| 226| yingkou|   316| shuxue|    94|
|  7|  ssx| 236| yingkou|   317|  yuwen|    95|
|  8|  wdd| 246|tongliao|   384| shuxue|    68|
|  9|  stm| 256|tongliao|   394|  yuwen|    97|
| 10|  stx| 606|tongliao|   114| shuxue|    18|
| 11|  szx| 706|tongliao|   124|  yuwen|    92|
+---+-----+----+--------+------+-------+------+

代码 :

spark.sql("use default")
spark.sql("select * from student").show()

执行 :

spark-submit --master yarn --num-executors 5 --executor-cores 3 --executor-memory 6144m --deploy-mode client --class lifecycle05_SparkOnHive.SparkOnHive01 s3://lifecyclebigdata/dataWareHouse/BALABALA/00jar/03_hive/veryOK-1.0-SNAPSHOT.jar

14 ,导入数据后 :

  1. 原来的位置,数据没了
  2. 数据被剪切到了内部表的位置

15 ,如果再次导入数据 :

依然成功
数据增加

三 ,内部表 : parquet :

1 ,删表 :

drop table student;

2 ,删表的后果 :

数据全部没了

3 ,建表,分隔符,位置 :

use default;
create table student(tid int,tname string,tage int,taddr string,tclass string,tcourse string,tstore int) row format delimited fields terminated by ',' location 's3://lifecyclebigdata/dataWareHouse/BALABALA/06_hive_inner/student';

4,hive 仅支持单一存储方式 :

要么文本 ( txt,csv )
要么 parquet
不可以混合存储

5,csv 转换成 parquet ,snappy :

package lifecycle00_test

import lifecycle01_tool.{Tool}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}

//  文件格式转换 :
//  snappy,parquet
object Test01 {
    def main(args: Array[String]): Unit = {
        val spark: SparkSession = Tool.getLocalSpark()
    
        import spark.implicits._
        import spark.sqlContext.implicits._
    
        //  1 ,读文件 :
        //      1,sfl,206,yingkou,314,yuwen,98
        val rdd: RDD[Row] = spark.sparkContext.textFile("s3a://lifecyclebigdata/dataWareHouse/BALABALA/08_hive_data/test01")
            .map(_.split(","))
            .map(line => Row(line(0).toInt,line(1),line(2).toInt,line(3),line(4).toInt,line(5),line(6).toInt))
        //  2 ,元数据
        val structType = StructType(Array(  StructField("id", IntegerType, true),
                                            StructField("name", StringType, true),
                                            StructField("age", IntegerType, true),
                                            StructField("addr", StringType, true),
                                            StructField("clazz", IntegerType, true),
                                            StructField("course", StringType, true),
                                            StructField("score", IntegerType, true)))
        //  3 ,建表 :
        val res: DataFrame = spark.createDataFrame(rdd, structType)
        
        //  4 ,写出
        res.write.option("compression","snappy").option("delimiter",",").parquet("s3a://lifecyclebigdata/dataWareHouse/BALABALA/08_hive_data/test02")
        spark.close()
    }
}

6 ,建表,存储格式 ( snappy,parquet )

create table student(id int,name string,age int,addr string,clazz int,course string,score int) 
row format delimited fields terminated by ',' 
stored as parquet 
location 's3://lifecyclebigdata/dataWareHouse/BALABALA/06_hive_inner/student' 
TBLPROPERTIES ('parquet.compress'='SNAPPY');

7 ,导入数据 : snappy ,parquet

load data inpath "s3://lifecyclebigdata/dataWareHouse/BALABALA/08_hive_data/test02" into table student;

8 ,查看数据 : hive-cli

select * from student;

9 ,查看数据 :spark

spark.sql("select * from "+tableName).show()

10 ,执行 :

spark-submit --master yarn --num-executors 5 --executor-cores 3 --executor-memory 6144m --deploy-mode client --class lifecycle05_SparkOnHive.SparkOnHive02_show s3://lifecyclebigdata/dataWareHouse/BALABALA/00jar/03_hive/veryOK-1.0-SNAPSHOT.jar student

11 ,结果 :

+---+-----+----+--------+-----+------+-----+
| id| name| age|    addr|clazz|course|score|
+---+-----+----+--------+-----+------+-----+
|  1|  sfl| 206| yingkou|  314| yuwen|   98|
|  2|  wtt| 207| yingkou|  324|shuxue|   99|
|  3|sswen| 806| yingkou|  314| yuwen|   18|
|  4| sswu| 296| yingkou|  344|shuxue|   28|
|  5|  sjw|2010| yingkou|  354| yuwen|   93|
|  6|  sjy| 226| yingkou|  316|shuxue|   94|
|  7|  ssx| 236| yingkou|  317| yuwen|   95|
|  8|  wdd| 246|tongliao|  384|shuxue|   68|
|  9|  stm| 256|tongliao|  394| yuwen|   97|
| 10|  stx| 606|tongliao|  114|shuxue|   18|
| 11|  szx| 706|tongliao|  124| yuwen|   92|
+---+-----+----+--------+-----+------+-----+

四 ,复制数据会怎样 : 进入表中

1 , 把数据直接复制到制定目录会怎么样 : 同样使用

2 , 数据量增加。

3 , 跟导入数据是同样的原理。

五 ,结论 :

1 ,内部表本质 :

把数据映射到 S3 文件夹

2 ,数据直接复制到内部表文件夹 :

跟导入同样效果

3 ,删除内部表 :

会删除文件夹中数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要解压.snappy.parquet文件,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了python-snappy和pyarrow这两个库。你可以使用以下命令进行安装:\[1\] ``` pip install python-snappy pip install pyarrow ``` 2. 下载源码并编译打包,找到模块文件的target/datax/plugin/reader/hdfsreader.zip文件。将该文件解压到datax安装目录的${DATAX_HOME}/plugin/reader/下。请注意提前备份原有的hdfsreader插件,以防出现问题时可以回滚。\[2\] 3. 配置datax job,确保你的datax job中已经正确配置了相关的参数和路径。 4. 在代码中使用相应的库来解压.snappy.parquet文件。你可以使用python-snappy库来解压snappy压缩的数据,然后使用pyarrow库来读取和处理parquet文件。具体的代码开发步骤可以参考相关的文档和资料。\[3\] 总结起来,要解压.snappy.parquet文件,你需要安装python-snappy和pyarrow库,然后根据具体的需求进行代码开发和配置。希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [成功解决RuntimeError: Decompression ‘SNAPPY‘ not available. Options: [‘GZIP‘, ‘UNCOMPRESSED‘]](https://blog.csdn.net/qq_41185868/article/details/109662915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Datax插件二次开发之HdfsReader支持parquet](https://blog.csdn.net/qq_34599449/article/details/122735299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值