介绍
Hadoop 伪分布式模式是指在一台机器的各个进程上运行 Hadoop 的各个模块, 非真正意义上的分布式(多机器).先配置伪分布式环境, 完成后在此基础上修改为分布式.
- Hadoop 的四种部署模式
各模块分别指: NameNode, DataNode, ResourceManager, NodeManager 等
模式名 | 各模块占用的 JVM 进程数 | 各模块运行的机器数 |
---|---|---|
本地模式 | 1个 | 1个 |
伪分布式模式 | N个 | 1个 |
完全分布式及HA完全分布式 | N个 | N个 |
配置文件解析
配置 Hadoop
在单机模式的基础上增加以下配置
- 配置
$HADOOP_HOME/etc/hadoop/core-site.xml
<property>
<!-- 配置 HDFS 的地址 -->
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<!-- 配置 Hadoop 临时目录, 比如 NameNode 数据存放于此 -->
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/tmp</value>
</property>
- 配置
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
<property>
<!-- 配置 HDFS 存储时的备份数量, 由于伪分布式环境只有一个节点,所以为1 -->
<name>dfs.replication</name>
<value>1</value>
</property>
格式化 HDFS:
hdfs namenode -format
格式化是对 HDFS 这个分布式文件系统中的 DataNode 进行分块, 统计所有分块后的初始元数据存储在 NameNode 中.
执行后,查看 指定 tmp 目录下是否有了 dfs 目录, 有即成功.启动 NameNode:
hadoop-daemon.sh start namenode
启动 DataNode :
hadoop-daemon.sh start datanode
类似可启动 SecondaryNameNode.jps
查看是否启动成功创建目录:
hdfs dfs -mkdir /demo1
上传文件:
hdfs dfs -put file.txt.local /demo1
读取文件:
hdfs dfs -cat /demo1/file.txt
下载文件:
hdfs dfs -get /demo1/file.txt
配置, 启动 YARN
- 配置
$HADOOP_HOME/etc/hadoop/mapredp-site.xml
<property>
<!-- 指定 mapreduce 运行在 yarn 框架上 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 配置
$HADOOP_HOME/etc/hadoop/yarn-site.xml
<property>
<!-- 配置 yarn 的默认混洗方式 -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!-- 指定 ResourceManager 运行在哪个节点上 -->
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
- 启动 ResourceManager 和 NodeManager
yarn-daemon.sh start resourcemanager; yarn-daemon.sh start nodemanager
- 启动后,
jps
测试可以看到 5 个进程, 除了 jps. - 访问 YARN 的 web 页面: master:8088
- 开启 历史服务:
mr-jobhistory-daemon.sh start historyserver
在上面的基础上配置分布式环境
- 配置 hdfs-site.xml
<property>
<!-- 指定 SNN 的地址和端口 -->
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
- 配置 yarn-site.xml
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master8025</value>
</property>
<property>
<!-- 指定 resourcemanager 服务器指向 master:8040
<name>yarn.resourcemanager.address</name>
<value>master:8040</value>
</property>
<property>
<!-- 启用日志聚焦功能 -->
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
- 配置 slaves( 指定 HDFS 上有哪些 DataNode 节点)
vim $HADOOP_HOME/etc/hadoop/slaves
master
slave1
slave1
:qw
模式切换技巧
使用符号链接 ln -s conf.standalone $HADOOP_HOME/etc/hadoop