Hadoop学习指南
一、大数据概述
大数据定义:指数据量达到TB级或日增量达GB级别的海量数据集合。
K -- M---- G ---- T ----PB ---- EB ---ZB 1024
通过对海量数据进行分析挖掘,可发现数据内在规律,为企业创造价值。
1.2 大数据特征
- Volume(体量大):数据量级达到TB级别
- Velocity(速度快):需实现快速处理
- Value(价值密度低):需从海量数据中提取有价值信息
- Variety(多样性):包含结构化/半结构化/非结构化数据
二、Hadoop体系架构
核心组件:
- HDFS(分布式文件系统)
- MapReduce(分布式计算框架)
- HBase(NoSQL数据库)
- YARN(资源管理器)
2.1 HDFS架构原理
采用主从架构,包含:
- NameNode:管理元数据
- DataNode:存储数据块
- Block:默认大小128MB
2.2 安装配置
- 环境准备:CentOS7.x + JDK8
- 主机名配置
- SSH免密登录
- 核心配置文件设置
- 数据目录配置
三、MapReduce实践
3.1 WordCount案例
public class WordCount {
public static class Mapper extends Mapper<LongWritable, Text, Text, IntWritable> {
public void map(LongWritable key, Text value, Context context) {
String[] words = value.toString().split("\\s+");
for (String word : words) {
context.write(new Text(word), new IntWritable(1));
}
}
}
public static class Reducer extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values, Context context) {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
}
3.2 分布式计算优势
- 横向扩展能力
- 容错机制
- 数据本地化计算
四、集群部署
4.1 高可用架构
- 双NameNode配置
- JournalNode集群
- ZooKeeper协调服务
4.2 安装步骤
- 软件包准备
- 配置文件同步
- 服务启动验证
- 故障转移测试
五、高级特性
5.1 自定义数据类型
public class CustomWritable implements Writable {
private int field1;
private String field2;
// 实现Writable接口方法
public void write(DataOutput out) throws IOException {}
public void readFields(DataInput in) throws IOException {}
// Getter/Setter方法
}
5.2 分区策略
public class CustomPartitioner extends Partitioner<Text, CustomWritable> {
@Override
public int getPartition(Text key, CustomWritable value, int numPartitions) {
return (key.hashCode() & Integer.MAX_VALUE) % numPartitions;
}
}
六、性能优化
6.1 数据压缩
- 支持Snappy/LZO/GZIP等压缩算法
- 配置参数优化
6.2 资源调优
- 动态资源分配
- 内存参数调整
- 任务并行度控制
七、监控与调优
7.1 监控指标
- 任务执行时间
- 资源使用情况
- 数据倾斜检测
7.2 性能调优技巧
- 合理设置reduce数量
- 优化数据分区策略
- 启用Combiner合并