Hadoop/Hive简介

本文介绍了Hadoop的两大核心组件HDFS和MapReduce的基本原理及架构,包括名称节点、数据节点、作业跟踪节点等关键角色。同时,还探讨了基于Hadoop的数据仓库工具Hive及其SQL类查询接口HQL,旨在降低数据分析门槛。

 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hadoop是一个存储计算框架,主要由两部分组成:

 

1,存储(Hadoop分布式文件系统-HDFS)

2,计算(MapReduce计算框架)


1,Hadoop分布式文件系统

这是一种文件系统实现,类似于NTFS,ext3,ext4等等,不过它是建立在更高的层次之上的。在HDFS上存储的文件被分成块(每块默认未64M,比一般的文件系统块大小大的多,可调)分布在多台机器上,其中的每块又会有多块的冗余备份(默认为3),以增强文件系统的容错能力。这种存储模式与后面将要说明的MapReduce计算模型相得益彰。HDFS在具体实现中主要有以下几个部分:

一、名称节点(NameNode):它的职责在于存储整个文件系统的元数据,这是个非常重要的角色。元数据在集群启动时会加载到内存中,元数据的改变也会写到磁盘上的一个文件系统映像文件中(同时还会维护一个对元数据的编辑日志)。目前名称节点还是一个单点。因为HDFS存储文件的时候是将文件划分成逻辑上的块来存储的,模个文件对应那些块都存储在名称节点上,所以如果它有损坏整个集群的数据将不可用。当然我们可以采取一些措施来备份名称节点的元数据(文件系统映像文件),比如可以将名称节点目录同时设置到本地目录和一个NFS目录,这样任何元数据的改变将写入到两个位置做冗余备份,向两个目录冗余写的过程是原子的。这样,在使用中的名称节点宕机之后,我们可以使用NFS上的备份文件来恢复文件系统。

二、第二名称节点(SecondaryNameNode):这个角色的作用就是定期通过编辑日志合并命名空间映像,防止编辑日志过大。不过第二名称节点的状态是滞后于主名称节点的,所以如果主名称节点挂掉,也必定会有一些文件损失。

三、数据节点(DataNode):这是HDFS中具体存储数据的地方,一般有多台机器。除了提供存储服务,它们还定时向名称节点发送它们存储的块的列表,所以名称节点没有必要永久保存每个文件的每个块所在的数据节点,这些信息会在系统启动后由数据节点重建。

2,MapReduce计算框架

这是一种分布式计算模型,其核心就是将任务分解成小任务由不同的计算者同时参与计算,并将各个计算者的计算结果合并得出最终的结果。模型本身非常简单,一般只需要实现两个接口即可;问题的关键在于怎样将实际问题转化为MapReduce任务。Hadoop的MapReduce部分主要由以下几部分组成:

一、作业跟踪节点(JobTracker):负责任务的调度(可以设置不同的调度策略)、状态跟踪。它的角色有点类似于HDFS中的名称节点,JobTracker也是一个单点,在未来的版本中可能会有所改进。

二、任务跟踪节点(TaskTracker):负责具体的任务的执行。它通过“心跳”的方式告知JobTracker其状态,并由JobTracker根据其报告的状态为其分配任务,TaskTracker会启动一个新的JVM来运行一个任务,当然JVM实例也可以被重用。

以上就是对于Hadoop最重要的两个部分的简介,Hadoop存在的理由就是它适应于大数据的存储计算。一个Hadoop集群可以看成是一个存储、计算“数据”的“库”。

Hive是一个构建于Hadoop集群之上的“数据仓库”应用

Hive是Facebook开发的构建于Hadoop集群之上的数据仓库应用,它提供了类似于SQL语法的HQL语句作为数据访问接口,这使得普通分析人员的应用Hadoop的学习曲线变缓。至于Facebook为什么使用Hadoop和Hive组建其数据仓库,其内部人员分享了他们的一些经历,大致的过程是如下的:

1,Facebook的数据仓库一开始是构建于MySQL之上的,但是随着数据量的增加某些查询需要几个小时甚至几天的时间才能完成。

2,当数据量接近1T的时候,mysqld后台进程宕掉,这时他们决定将他们数据仓库转移到Oracle。当然这次转移的过程也是付出了很大的代价的,比如支持的SQL方言不同,修改以前的运行脚本等等。

3,Oracle应付几T的数据还是没有问题的,但是在开始收集用户点击流的数据(每天大约400G)之后,Oracle也开始撑不住了,由此又要考虑新的数据仓库方案。

4,内部开发人员花了几周的时间建立了一个并行日志处理系统Cheetah,这样的话勉强可以在24小时之内处理完一天的点击流数据。

5,Cheetah也存在许多缺点。后来发现了Hadoop项目,并开始试着将日志数据同时载入Cheetah和Hadoop做对比,Hadoop在处理大规模数据时更具优势,后来将所有的工作流都从Cheetah转移到了Hadoop,并基于Hadoop做了很多有价值的分析。

6,后来为了使组织中的多数人能够使用Hadoop,开发了Hive,Hive提供了类似于SQL的查询接口,非常方便。与此同时还开发了一些其它工具。

7,现在集群存储2.5PB的数据,并且以每天15TB的数据在增长,每天提交3000个以上的作业,大约处理55TB的数据...

现在很多大的互联网公司出于成本考虑都在研究、使用Hadoop;数据的价值正得到越来越多的人的重视,而这种重视,又体现出Hadoop存在的巨大价值。

<think>我们正在查找`org/apache/hadoop/hive/thrift/FilterTransport`所属的包。根据之前的引用和回答,我们可以总结如下: 1. 在引用[3]中提到了一个错误:`java.lang.NoClassDefFoundError: org/apache/hadoop/hive/thrift/TFilterTransport`。虽然类名不完全相同(这里是`TFilterTransport`),但路径相似,说明这个包下的类通常与Hive的Thrift服务相关。 2. 在之前的回答中,我们指出`org/apache/hadoop/hive/thrift/FilterTransport`类属于Hive Thrift服务组件,包含在`hive-service`这个JAR包中。 现在,我们进一步确认: - 在Hive的源码结构中,`org.apache.hadoop.hive.thrift`包下的类通常位于`hive-service`模块中。 - 通过Maven仓库查询,我们可以验证`hive-service`的依赖树。 ### 验证步骤: 1. 访问Maven中央仓库:https://mvnrepository.com/ 2. 搜索`hive-service`,选择版本(例如3.1.3) 3. 查看该JAR包包含的类:通常可以在文件列表中查找,或者通过下载JAR包来确认。 ### 结论: **`org/apache/hadoop/hive/thrift/FilterTransport`类位于`org.apache.hive:hive-service`这个JAR包中。** ### 依赖坐标: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> <version>${hive.version}</version> <!-- 例如3.1.3 --> </dependency> ``` ### 常见问题: 如果遇到`NoClassDefFoundError`,请检查: 1. 是否包含了`hive-service`依赖。 2. 是否版本冲突(例如,同时存在多个版本的`hive-service`)。 3. 是否缺少Hadoop依赖(因为Hive依赖Hadoop,所以需要添加`hadoop-client`)。 ### 相关问题: 1. 如何解决Hive Thrift服务启动时的`NoClassDefFoundError`错误? 2. `hive-service`和`hive-exec`模块分别包含哪些功能? 3. 如何检查项目中是否存在重复的Hive依赖? </think> 根据引用内容分析,`org/apache/hadoop/hive/thrift/FilterTransport` 类属于 **Hive Thrift 服务组件**,主要包含在以下JAR包中: ### 📦 所属JAR包信息 1. **Group ID**: `org.apache.hive` 2. **Artifact ID**: `hive-service` 3. **典型版本**: Hive 1.x 至 3.x(如引用[2][3]所示) ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> <version>3.1.3</version> <!-- 与引用[2][3]版本一致 --> </dependency> ``` ### 🔍 验证方式 在JAR包中确认类的存在: ```bash # 解压查看类文件 jar tf hive-service-3.1.3.jar | grep 'thrift/FilterTransport.class' # 输出应包含: org/apache/hadoop/hive/thrift/FilterTransport.class ``` ### ⚠️ 常见错误解决方案 当出现 `NoClassDefFoundError: org/apache/hadoop/hive/thrift/FilterTransport` 时(引用[3]): 1. **添加核心依赖**: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.3.4</version> <!-- 需与Hive版本兼容 --> </dependency> ``` 2. **解决shims冲突**(引用[5]): ```bash # 删除不兼容的shims包(保留与Hive主版本匹配的) rm hive-shims-0.*.jar ``` 只保留 `hive-shims-common-3.1.3.jar` 等匹配版本 3. **类加载顺序调整**: ```bash export HADOOP_USER_CLASSPATH_FIRST=true ``` ### 🌐 下载链接 - [Maven Central: hive-service 3.1.3](https://repo1.maven.org/maven2/org/apache/hive/hive-service/3.1.3/) > **关键提示**:根据引用[3]的报错分析,此类缺失通常因缺少`hive-service`依赖或版本冲突导致[^3]。若使用Spark/Flink(引用[1][2]),需确保与`spark-hive-thriftserver`或`hive-exec`的兼容性[^1][^2]。 --- ### 📚 相关问题 1. 如何解决Hive Thrift服务启动时的`NoClassDefFoundError: TFilterTransport`错误? 2. Hive的`hive-service`和`hive-exec`模块在功能上有何区别? 3. 如何检查HadoopHive和Spark/Flink之间的版本兼容性? 4. 为什么`hive-shims`模块会导致类加载冲突?如何正确管理? : 引用自Spark连接Hive的依赖缺失问题 [^2]: 引用自Flink连接Hive的依赖配置 : 引用自Hive Thrift服务类加载异常 [^4]: 引用自Hive核心配置类缺失问题 [^5]: 引用自Hive shims模块冲突解决方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值