Hadoop(开源的分布式计算框架)
·
一、Hadoop 简介
Apache Hadoop 是一个开源的分布式计算框架,专为大规模数据处理设计,具有以下特点:
- 分布式存储:通过 HDFS(Hadoop Distributed File System)实现数据的分块存储和冗余备份。
- 分布式计算:基于 MapReduce 编程模型,支持并行处理海量数据。
- 高容错性:数据自动复制,节点故障不影响任务执行。
- 可扩展性:从单节点扩展到数千节点集群。
二、环境准备
1. 前置条件
- 操作系统:CentOS 7+(其他 Linux 发行版类似)。
- Java:Hadoop 依赖 JDK 1.8+,需提前安装并配置环境变量。
- SSH 免密登录:所有节点间需配置 SSH 免密登录(生产环境建议创建专用用户,如
hadoop)。
2. 下载 Hadoop
从官网或镜像站下载 Hadoop 安装包(如 hadoop-3.3.5.tar.gz):
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.5/hadoop-3.3.5.tar.gz
tar -xzf hadoop-3.3.5.tar.gz -C /usr/local/
ln -s /usr/local/hadoop-3.3.5 /usr/local/hadoop
3. 配置环境变量
在 ~/.bashrc 中添加:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/local/jdk1.8.0_401
使配置生效:
source ~/.bashrc
三、Hadoop 集群搭建
1. 单机模式(开发测试)
直接运行 Hadoop 命令,无需额外配置:
start-dfs.sh # 启动 HDFS
start-yarn.sh # 启动 YARN
jps # 查看进程(NameNode, DataNode, ResourceManager 等)
2. 伪分布式模式(单节点模拟集群)
编辑 etc/hadoop/core-site.xml:
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
编辑 etc/hadoop/hdfs-site.xml:
<property>
<name>dfs.replication</name>
<value>1</value> # 单机模式仅需 1 个副本
</property>
启动集群:
start-dfs.sh
start-yarn.sh
3. 多节点集群模式
- 配置主机名与 IP 映射(所有节点修改
/etc/hosts):192.168.245.128 hadoop01 192.168.245.129 hadoop02 192.168.245.130 hadoop03 - 配置主节点(NameNode):
- 修改
core-site.xml:<property> <name>fs.defaultFS</name> <value>hdfs://hadoop01:9000</value> </property> - 修改
hdfs-site.xml:<property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> # 副本数等于 DataNode 数量 </property>
- 修改
- 同步配置文件到所有节点:
scp -r /usr/local/hadoop/etc/hadoop hadoop02:/usr/local/hadoop/etc/ scp -r /usr/local/hadoop/etc/hadoop hadoop03:/usr/local/hadoop/etc/ - 格式化 NameNode(仅首次启动时执行):
hdfs namenode -format - 启动集群:
start-dfs.sh # 启动 HDFS start-yarn.sh # 启动 YARN
四、HDFS 操作
1. 上传文件到 HDFS
hadoop fs -mkdir /user/input
hadoop fs -put local_file.txt /user/input/
2. 查看文件内容
hadoop fs -cat /user/input/local_file.txt
3. 删除文件
hadoop fs -rm -r /user/input/local_file.txt
4. 浏览器查看 HDFS
访问 http://hadoop01:9870 查看 HDFS 状态。
五、MapReduce 编程
1. WordCount 示例
- 编写代码(Java 示例):
public class WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "Word Count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } - 编译与提交任务:
javac -classpath $HADOOP_HOME/share/hadoop/common/hadoop-common-3.3.5.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.5.jar -d wordcount_classes WordCount.java jar -cvf wordcount.jar -C wordcount_classes/ . hadoop jar wordcount.jar WordCount /user/input/local_file.txt /user/output/ - 查看输出:
hadoop fs -cat /user/output/part-r-00000
六、常见问题与优化
1. 问题排查
- NameNode 无法启动:检查
core-site.xml中的fs.defaultFS是否正确。 - DataNode 失联:确保防火墙关闭,且
dfs.datanode.data.dir目录权限正确。 - 任务执行失败:查看日志(
$HADOOP_HOME/logs)或 Web UI(http://hadoop01:8088)。
2. 性能优化
- 调整副本数:根据集群规模设置
dfs.replication。 - 启用压缩:使用
Snappy或Gzip压缩 MapReduce 输出。 - 资源调优:通过
yarn.scheduler.maximum-allocation-mb和yarn.scheduler.minimum-allocation-mb调整资源分配。
七、学习资源
- 官方文档:https://hadoop.apache.org/docs/current/
- 教程网站:
- 实践平台:
- Cloudera 实战演练(需注册)
- Hortonworks Sandbox(虚拟集群环境)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)