Hive
一:Hive 默认存储在hdfs上,分为内部表与外部表
内部表删除时数据与元数据均删除
外部表删除时则只删除元数据,外部数据不受影响
二: Hive支持分区,分区pattition(单分区,双分区)可提高查询效率
三:默认采用文本格式且不压缩,支持gzip,bzlib,snappy等格式
四:导入、出数据
导入数据
load data local path ‘TEXT.TXT’ overwrite/into table orc_snappy_pro
导出数据
hive–e‘select *from orc_snapp_pro’ >>/mnt/guhaifeng/data.txt;
Hive文件格式包含: §textfile:默认的文本方式 §Sequencefile:二进制格式 §rcfile:面向列的二进制格式 (先水平划分,再垂直划分) §orc:rcfile的增强版本创建外部表:
create external table orc_snappy_pro
(log_time string,
log_type string,
Country string,
log_detail string)
PARTITIONED BY (dt STRING) ‘comment 分区’
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ‘\001’
STORED AS orc
location ‘s3://mx-hadoop/guhaifeng/orc_snappy_pro/’
tblproperties ("orc.compress"="SNAPPY");
RDD存储Hive两种方式:
一:使用反射来推断包含特定类型对象的RDD的模式
1.将RDD转化为一个SchemaRDD
rows = split_filed.map(lambda words:Row(log_time=words[0],log_type=words[1],country=words[2])
tmp_dataframe = sqlContext.createDataFrame(rows)
2.SchemaRDD注册临时表
tmp_dataframe.registerTempTable(“tmp_table”)
3. 临时表数据插入到hive表
results = sqlContext.sql(“insert into orc_snaooy_pro partition=%s) select t.log_type,t.log_time from tmp_table t" %(log_date))
二:编程方式指定模式
从原始RDD创建元组或列表的RDD;
创建StructType在步骤1中创建的RDD中由元组或列表结构匹配的模式。
通过createDataFrame提供的方法将模式应用于RDD SparkSession
Hive-->DataFrame --> RDD
读取hive数据写入其他表
采用Rcfile存储时需要设置以下模式