将hbase、mongodb中的内容写到hive中

本文详细讲述了如何将HBase中的数据迁移到Hive,并解决启动Hive时的问题。同时介绍了如何配置动态分区和创建外部/内部表以提高查询效率。此外,还展示了如何从MongoDB加载数据到Hive,涉及依赖包管理、配置和表创建过程。最后,关注了硬盘使用情况的监控和数据存储的最佳实践。

将hbase中的内容写入到hive中

1、启动hive时遇到的问题

$ hive
Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-1.2.1.jar!/hive-log4j.properties
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

没有正常启动Hive 的 Metastore Server服务进程

nohup bin/hive --service metastore &

2、hive相关设置

//设置true用于打开动态分区功能
set hive.exec.dynamic.partition=true;
//允许全部动态分区 strict要求分区字段至少有一个是静态的分区值
set hive.exec.dynamic.partition.mode=nonstrict;
//关闭map阶段优化
set hive.auto.convert.join=false;
//能被每个mapper或者reducer创建的最大动态分区的数目
set hive.exec.max.dynamic.partitions.pernode=100;
//被一条带有动态分区的sql语句所能创建的动态分区总量
set hive.exec.max.dynamic.partitions=1000;
//全局能被创建文件数目的最大值,专门有一个hadoop计数器来跟踪该值,如果超出会报错
set hive.exec.max.created.files=100000;

3、创建hb_user外部表,映射到hbase的events_db:users表中

set hivevar:db=events;
create external table ${db}.hb_user(
user_id String,
birth_year int,
gender String,
locale String,
location String,
time_zone String,
joined_at String
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties(
'hbase.columns.mapping'='
:key,
profile:birthyear,
profile:gender,
region:locale,
region:location,
region:timezone,
registration:joinedAt'
)
tblproperties('hbase.table.name'='events_users');

4、创建内部表user,将hb_user外部表的数据以orc格式存储到内部表中,提高查询效率

create table ${db}.user
stored as orc as 
select * from ${db}.hb_user;

5、删除外部表

drop table if exists ${db}.hb_user;

查看硬盘使用情况

df -h

在这里插入图片描述

du -h -x --max-depth=1

将mongodb中的内容写到hive中

1、依赖包

    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongodb-driver</artifactId>
      <version>3.12.7</version>
    </dependency>
    <dependency>
      <groupId>org.mongodb.mongo-hadoop</groupId>
      <artifactId>mongo-hadoop-core</artifactId>
      <version>2.0.2</version>
    </dependency>
    <dependency>
      <groupId>org.mongodb.mongo-hadoop</groupId>
      <artifactId>mongo-hadoop-hive</artifactId>
      <version>2.0.2</version>
    </dependency>

2、本地库复制到hive根目录下的lib目录下
本地库地址可以在maven的setting.xml文件中查看
3、创建外部表

create external table ${db}.mg_train(
user_id String,
event_id String,
invited String,
time_stamp String,
interested String
)
stored by 'com.mongodb.hadoop.hive.MongoStorageHandler'
with properties(
'mongo.columns.mapping'='{
"user_id":"user",
"event_id":"event",
"invited":"invited",
"time_stamp":"timestamp",
"interested":"interested"
}'	
)
tblproperties('mongo.uri'='mongodb://kgcuser:123456@192.168.232.211:27017/kgcdsj.train');

4、创建内部表

create table ${db}.mgtrain
stored as orc as 
select * from ${db}.mg_train;
<think>首先,用户的问题是关于HBASE、HDFS和MongoDB的介绍、使用、对比等相关信息。我必须参考提供的引用内容来回答。 回顾系统级指令: - 所有行内数学表达式使用 `$...$` 格式(但在这个问题中,可能不涉及数学)。 - 独立公式使用 `$$...$$` 格式(同样,可能不适用)。 - LaTeX语法正确(这里可能不需要)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如 `[^1]`。 用户提供了多个引用: - `[^1]`:关于MongoDB vs HBase的应用场景。 - `[^2]`:HBaseMongoDB的区别,包括数据模型、查询语言、数据分布等。 - `[^3]`:HDFS、MongoDBHBase的区别和使用场景,特别是MongoDB的适用/不适用场景。 - `[^4]`:HDFS和HBase的优缺点总结。 - `[^5]`:大数据存储,HBase的使用案例,如Facebook的案例。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 但我没有用户上一次的问题或回答的历史。在这个上下文中,用户的问题是“我想了解HBASE、HDFS和MongoDB的相关信息 请问HBASE、HDFS和MongoDB的介绍、使用、对比等相关信息”,所以我应该基于提供的引用构建回答。 关键点: - HBase:分布式、面向列的NoSQL数据库,适合大规模数据存储,低延迟读,适合增量数据捕获(如Facebook的计数器)。 - HDFS:Hadoop Distributed File System,是一个分布式文件系统,用于存储大规模数据,但不是一个数据库;它适合批量数据处理,不支持随机入。 - MongoDB:面向文档的NoSQL数据库,适合灵活的数据模型、实时查询、中小规模数据。 我需要结构化回答: 1. **介绍**:简要概述每个系统。 2. **使用场景**:基于引用,描述每个系统的最佳应用场景。 3. **对比**:比较HBASE、HDFS和MongoDB,强调它们的区别。 4. **优缺点**:总结每个系统的优缺点。 5. **相关工具**:如引用中提到的Phoenix for HBase等。 6. **生成相关问题**:在回答末尾添加相关问题,类似于示例。 回答结构: - 清晰、逻辑性强。 - 使用中文。 - 在引用段落末尾添加引用标识。 大纲: 1. **介绍HBASE、HDFS和MongoDB** - HDFS:分布式文件系统,用于存储海量数据。 - HBase:建立在HDFS之上的NoSQL数据库,提供实时读能力。 - MongoDB:文档型NoSQL数据库,适合JSON-like数据存储。 2. **使用场景** - 基于引用[^3][^5]:MongoDB用于网站数据、缓存、大尺寸低价值数据、高伸缩性场景、对象存储;不适合高度事务性系统。 - HBase用于大规模数据、实时更新、如日志处理、数据仓库、Facebook的例子。 - HDFS用于大数据批量处理,如Hadoop生态系统。 3. **对比** - 数据模型:引用[^2]:HBase是列族模型,MongoDB是灵活文档模型。 - 查询能力:HBase支持SQL via Phoenix,但复杂查询有限;MongoDB有丰富的查询语法。 - 数据分布:引用[^2]:HBase是master-slave,数据共享;MongoDB是分布式分片。 - 性能:HBase高吞吐、低延迟;HDFS高吞吐但无随机入;MongoDB高性能实时查询。 - 优缺点:引用[^4]:HDFS容错性好但无随机入;HBase低延迟但运维复杂;MongoDB灵活但不适合事务。 4. **总结优缺点** - HDFS: 优点 - 高容错、高吞吐;缺点 - 无随机入。 - HBase: 优点 - 低延迟、灵活Schema;缺点 - 运维复杂。 - MongoDB: 优点 - 灵活数据模型;缺点 - 不适合事务性系统。 5. **相关工具** - 如HBase with Phoenix, NiFi for data ingestion. 6. **生成相关问题** - 类似示例,添加几个相关问题在末尾。 确保回答真实可靠,基于引用。 添加引用标识: - 当提到引用内容时,在句子末尾添加 `[^1]` 等。 - 自然地融入,不打断流畅性。 最终输出: - 回答完成后,添加 `§§相关问题§§` 部分,列出2-4个问题。 </think>### HBASE、HDFS和MongoDB的介绍、使用、对比相关信息 以下是针对HBASE、HDFS和MongoDB的详细介绍、核心使用场景、系统对比以及优缺点总结。这些内容基于您提供的引用资料进行了整合和提炼,确保信息真实可靠。每个系统都是大数据和NoSQL领域的代表性技术,但各有侧重:HDFS是一个分布式文件系统(不是数据库),HBase是一个建立在HDFS之上的面向列的NoSQL数据库,而MongoDB是一个面向文档的NoSQL数据库。它们在大数据存储、查询和处理方面有显著差异。 #### 1. **系统介绍** - **HDFS (Hadoop Distributed File System)**:HDFS是Apache Hadoop生态系统的核心组件,是一个高度容错的分布式文件系统,专为存储海量数据(如TB级或PB级)而设计。它使用主从架构(NameNode和DataNode),将大文件切分成块分布存储在多个节点上,支持高吞吐量的批量读操作,但不支持随机入或实时更新[^3][^4]。 - **HBase**:HBase是Apache HBase的缩,是一个分布式、面向列的NoSQL数据库,直接构建在HDFS之上。它提供了实时读能力,支持灵活的动态Schema(数据模型可随时变更),并通过行键(RowKey)实现低延迟的数据访问。HBase适合处理超大规模结构化或半结构化数据,常用于捕获增量数据流(如日志或用户行为)[^2][^5]。 - **MongoDB**:MongoDB是一个开源的面向文档的NoSQL数据库,采用JSON-like(BSON格式)文档模型,允许嵌套数据结构和高灵活性。它支持丰富的查询语言(包括MapReduce)、自动分片和复制,适用于需要快速开发迭代和实时查询的应用。MongoDBMongoDB Inc.维护,而非Apache基金会[^1][^2]。 #### 2. **核心使用场景** 基于引用资料,以下是每个系统的典型应用场景和限制: - **HDFS**: - **适用场景**:最适合大规模数据存储和离线批处理,例如历史数据归档、日志文件存储和Hadoop MapReduce作业。由于高容错性和低成本(可使用廉价硬件),它常用于数据仓库的底层存储[^3][^4]。 - **不适用场景**:不支持随机入、小文件存储或实时查询(如需要秒级响应的应用),因为其设计侧重于顺序读[^4]。 - **HBase**: - **适用场景**:擅长处理高吞吐量、低延迟的实时数据流,例如网页爬虫数据、广告效果监控(如Facebook统计用户点击次数)、时间序列数据或稀疏数据存储。它适用于半结构化数据(结构可能频繁变更),并能扩展至超大规模数据集(PB级以上)[^5]。例如,Facebook使用HBase构建的Insight系统,每天处理数百亿事件,提供近实时的用户行为分析[^5]。 - **不适用场景**:复杂事务处理(如银行系统)或需要SQL联合查询的场景,因为其事务支持有限,更适合键值访问模式[^2][^3]。 - **MongoDB**: - **适用场景**:理想用于中小规模数据(到中等规模)、需要灵活数据模型和丰富查询的应用,例如内容管理系统、实时分析、缓存层或对象/JSON数据存储。它也适合高伸缩性环境(数十到数百台服务器),例如网站数据(实时插入、更新和查询)或作为持久化缓存避免数据源过载[^1][^3]。 - **不适用场景**:不适合高度事务性系统(如会计应用),因为缺乏ACID事务支持;也不适合传统商业智能(BI)查询或纯SQL需求,因其优化重点在文档查询[^3]。 #### 3. **系统对比** 以下是HBase、HDFS和MongoDB的关键区别对比,基于数据模型、查询能力、数据分布和性能等方面: | 特性 | HBase | HDFS | MongoDB | |------|-------|------|---------| | **数据模型** | 面向列的表格模型(列族),支持稀疏数据存储[^2][^5]。 | 文件系统模型(块存储),无内置数据结构,仅存储原始文件[^3][^4]。 | 面向文档的模型(BSON文档),高度灵活,支持嵌套对象[^1][^2]。 | | **查询能力** | 支持SQL via Phoenix等工具,但复杂查询(如联合查询)受限;优化于键值读和范围扫描[^2][^4]。 | 无内置查询语言,依赖外部工具(如Hive或Spark)进行处理;仅支持批量扫描[^3][^4]。 | 强大的查询语法(类似SQL),支持MapReduce、聚合管道和索引;适合实时分析[^1][^2]。 | | **数据分布** | Master-slave架构,数据均匀分布,所有节点共享同一份数据,确保快速查询[^2][^5]。 | 主从架构(NameNode/DataNode),数据块分布存储,强调容错和吞吐[^4]。 | 分布式分片架构,数据自动分片到多个节点,支持高效的水平缩放[^2][^3]。 | | **性能特点** | 低延迟读(毫秒级),高吞吐量,适合实时更新;但内存消耗高(RegionServer缓存)[^4][^5]。 | 高吞吐量(顺序读),低内存占用;但无随机入能力,延迟较高[^3][^4]。 | 高性能实时查询,易于扩展;但大数据量下可能遇到性能瓶颈(需优化分片)[^1][^3]。 | | **适用数据规模** | 超大规模数据(PB级)[^5]。 | 最大规模数据(PB级以上),作为存储基础[^3]。 | 中小规模数据(到中等规模),扩展上限依赖于分片设计[^1]。 | #### 4. **优缺点总结** - **HDFS**: - **优点**:高容错性(自动数据复制)、高吞吐量(适合批量处理)、易扩展(添加节点简单)、低成本(支持廉价硬件)。 - **缺点**:不支持随机入或实时更新、不适合存储小文件(导致NameNode压力)、无原生查询支持。 - **引用关键点**:HDFS是理想的大数据存储基础,但需结合其他工具(如HBase或Spark)实现数据库功能[^3][^4]。 - **HBase**: - **优点**:低延迟实时读、灵活Schema(动态添加列)、高扩展性(处理增量数据)、支持数据版本控制。 - **缺点**:运维复杂(需调优RowKey设计)、内存需求高、不支持原子性复杂事务。 - **引用关键点**:常用于大数据存储场景,如日志处理或实时监控,并可集成工具(如Phoenix或NiFi)提升SQL能力[^4][^5]。 - **MongoDB**: - **优点**:灵活数据模型(快速适应变更)、丰富查询语法(支持地理空间、文本搜索等)、易用性高(JSON文档友好)、自动故障转移。 - **缺点**:不适合事务密集型应用、大规模数据下性能可能下降、缺乏联合查询优化。 - **引用关键点**:在小到中等数据场景中表现优异,但需避免用于银行级事务系统[^1][^3]。 #### 5. **相关工具和生态系统** - **HDFS**:常与Hadoop生态集成,如Spark、Hive或Flink用于数据处理。 - **HBase**:可结合Phoenix(提供SQL接口)、Apache NiFi(数据导入工具)、或Hadoop工具链实现端到端解决方案[^4]。 - **MongoDB**:支持多种驱动程序和工具,如MongoDB Atlas(云托管服务)、Compass(GUI管理工具)。 通过以上对比可以看出,选择系统时应基于具体需求: - 如果需要存储原始大文件或离线批处理,优先选HDFS。 - 如果处理实时、大规模数据流(如日志或用户行为),HBase是更好的选择。 - 如果应用需要快速迭代、灵活数据模型和实时查询,MongoDB更合适。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值