hive 查询结果转为parquet格式 存入hdfs中

本文介绍如何将Hive查询结果转换为Parquet格式,并存储到HDFS中。主要步骤包括:创建临时表、修改表结构指定Parquet格式、删除原始表并重建指定格式表、将查询结果插入新表。

hive 查询结果转为parquet格式 存入hdfs中 ,

步骤:

1.首先根据我们hive查询结果 ,新建一张表 ,
2.然后,对表结构做修改 ,更改表指定存储格式为parquet  ,
3.然后删除之前创建的那装表, 然后新建这张指定存储格式的表,
4.之后把结果插入这个表中。


1、
create table table_parquet as 
select j30.* from jpush.tags_30_mac j30 join 
(select 
case when 
substring(d.mac,2,1) in (0,2,4,8) 
then d.mac
end as mac
from (
select distinct mac  from wifi_location_sniffer3 where y=2017 and m=12 and d=2 
) d 
) huanp
on huanp.mac=j30.key




2、查看表结构
show  create table table_parquet 


对步骤2查看的表结构进行修改  主要是stored as parquet  并指定文件存放到hdfs中的位置
CREATE TABLE `20171202_parquet`(
  `key` string, 
  `fosun` map<string,string>, 
  `jpush` map<string,string>, 
  `tags` map<string,string>)
stored as parquet
location “hdfs://user/zhangshk/test/hive_to_hdfs”

3、删除之前创建的表


drop table table_parquet 




4、hive 查询结果 存入hdfs中 ,到hdfs中查看发现 为parquet文件
insert into `20171202_parquet`
select j30.* from jpush.tags_30_mac j30 join 
(select 
case when 
substring(d.mac,2,1) in (0,2,4,8) 
then d.mac
end as mac
from (
select distinct mac  from wifi_location_sniffer3 where y=2017 and m=12 and d=2 
) d 
) huanp
on huanp.mac=j30.key
<think>嗯,我收到了用户的查询,是关于构建一个据处理与可视化流程的。用户想用Hive、Kafka、Flume、Spark、MySQL和Python来实现这一流程。我需要好好理解这个需求,然后给出一个清晰的结构化方案。用户的查询描述了几个关键组件:使用Hive将爬取的据存储到HDFS,通过Kafka和Flume实现据收集与持久化,然后用Spark进行初步分析并把结果存入MySQL,接着用Python对SQL表做进一步分析,最后实现酒店据的可视化。这是一个典型的大据处理流水线,涉及到据采集、存储、处理和可视化等多个环节。让我回忆一下相关引用资料。引用[1]提到了Spark的运行模式和据处理的层级(如SparkSQL、SparkStreaming),这很重要,因为它说明Spark可以处理实时流据。引用[2]介绍了Sqoop,用于结构化据和Hadoop之间的迁移,但用户这次没提到Sqoop,所以可能不需要它。引用[3]讨论了用Flink从Kafka读取据并存入HDFS,这部分机制与Kafka和Flume类似,我可以用类似思路。引用[4]是关于Hive表的示例,这帮助我确认Hive作为据存储工具的角色。现在,我需要构建一个端到端的方案。流程应该从据采集开始:爬取据后存入HDFS,用Hive管理结构。这里用Hive的好处是它可以作为HDFS上的库,提供SQL接口,用户后续可以用SparkSQL处理。然后是实时据部分:使用Kafka和Flume。Flume适合日志类据的收集,可以连接到Kafka作为缓冲层,Flume的Sink配置引用[3]中的connector机制,我可以用类似方法写据到HDFS。引用[3]提到了Flink的HDFSConnector,但这里可以用Flume替代,比如用FlumeSink直接落地HDFS。对于处理层,Spark是关键,如引用[1]所述。它可以处理批量和流式据:用SparkSQL分析Hive表或流式据,处理后的结果写入MySQL。这里引用[2]提到Sqoop,但不必要,因为Spark可以直接写MySQL。MySQL存储结果后,Python部分就可以通过pandas等库连接MySQL进行分析,生成报表或可视化图表。整个流程要串联起来。比如,配置Flume时要确保它正确写入HDFSHive表的分区机制要设计好,以支持增量更新;Spark作业要处理据清洗和分析;Python部分要自动化查询和可视化。我还得考虑优化和挑战:比如Flume配置的高可用性,或者Spark分区策略的问题,这些都是常见的坑。最后,要建议一些工具链,比如在Python中使用Matplotlib或Superset,这样用户能快速实现可视化。用户提到了"酒店据"作为例子,所以我可以基于这个假设来描述流程。现在,规划回答的结构。先总述流程阶段,再分步骤解释每个组件的作用和配置要点,比如Kafka和Flume的交互代码示例。最后附上相关问题引导深入讨论。</think> 基于您的需求,以下是整合Hive、Kafka/Flume、Spark、MySQL和Python的据处理与可视化流程方案,共分六个阶段: --- ### **阶段1:据采集与存储** [^1][^3][^4] 1. **Hive存储爬取据到HDFS** - **操作**:将爬取的结构化/半结构化据写入HDFS路径 - **Hive建表示例**: ```sql CREATE EXTERNAL TABLE hotel_raw_data ( hotel_id INT, name STRING, price FLOAT, location STRING ) PARTITIONED BY (dt STRING) STORED AS PARQUET LOCATION '/user/hive/warehouse/hotel_data'; ``` - **优势**:Hive表可直接查询HDFS据,支持分区管理(如按日期`dt`分区) 2. **实时据管道** [^2][^3] - **Flume采集日志** → **Kafka缓冲** → **Flume持久化到HDFS** - Flume Agent1配置(Source:日志 | Sink:Kafka) - Kafka Topic:`hotel_realtime_logs` - Flume Agent2配置(Source:Kafka | Sink:HDFS) ```properties agent2.sinks.hdfs_sink.hdfs.path = hdfs://namenode:8020/flume/kafka/%Y%m%d agent2.sinks.hdfs_sink.hdfs.fileType = DataStream ``` --- ### **阶段2:据处理与分析** 1. **Spark处理Hive/HDFS据** [^1] - **批处理**(连接Hive表): ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("HotelAnalysis").enableHiveSupport().getOrCreate() df = spark.sql("SELECT location, AVG(price) FROM hotel_raw_data GROUP BY location") ``` - **流处理**(消费Kafka实时据): ```python stream_df = spark.readStream \ .format("kafka") \ .option("kafka.bootstrap.servers", "kafka-server:9092") \ .option("subscribe", "hotel_realtime_logs") \ .load() ``` 2. **结果写入MySQL** ```python df.write.format("jdbc") \ .option("url", "jdbc:mysql://mysql-server/hotel_db") \ .option("dbtable", "avg_price_by_location") \ .option("user", "user").option("password", "pass") \ .mode("overwrite").save() ``` --- ### **阶段3:Python据分析与可视化** 1. **连接MySQL获取据** ```python import pandas as pd from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://user:pass@mysql-server/hotel_db") result_df = pd.read_sql("SELECT * FROM avg_price_by_location", engine) ``` 2. **可视化(Matplotlib示例)** ```python import matplotlib.pyplot as plt result_df.plot(kind='bar', x='location', y='avg_price') plt.title("各地区酒店均价对比") plt.savefig('hotel_price_analysis.png') ``` --- ### **技术栈交互图** ```mermaid graph LR A[据爬取] --> B[Hive on HDFS] C[Flume] --> D[Kafka] --> E[Flume to HDFS] B & E --> F[Spark处理] F --> G[MySQL存储] G --> H[Python分析可视化] ``` --- ### **关键配置说明** 1. **Hive分区优化**:按日期分区加速查询 2. **Flume可靠性**:启用`fileChannel`防据丢失[^3] 3. **Spark调优**: - 合理设置`spark.sql.shuffle.partitions` - 对常用字段建立Hive分桶表提升Join性能 4. **Python可视化扩展**: - 交互式图表:`Plotly`或`Pyecharts` - 自动化报表:`Jupyter + Voila`部署Web服务 --- ### **潜在挑战与优化** - **据一致性**:Kafka到HDFS需监控Flume断点续传 - **性能瓶颈**:对高频据使用Spark Structured Streaming替代批处理 - **可视化管理**:用`Superset`或`Metabase`替代原生Python绘图,实现实时Dashboard[^2] [^1]: Spark运行模式选择:本地测试用Local模式,生产环境用YARN/K8s [^3]: Flume与Kafka集成时,需配置Kafka Sink的`broker list`和序列化方式 [^4]: Hive表结构设计应避免宽表,优先使用列式存储格式Parquet/ORC) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值