安装hadoop(三种模式):本地模式,伪分布模式,完全分布式模式,区分的依据是NameNode、DataNode、ResourceManager、NodeManager等模块运行在几个JVM进程、几个机器。(前两种不再介绍,我们直接介绍第三种)
模式名称 | 各个模块占用的JVM进程数 | 各个模块运行在几个机器数上 |
---|---|---|
本地模式 | 1个 | 1个 |
伪分布式模式 | N个 | 1个 |
完全分布式模式 | N个 | N个 |
首先介绍一下hadoop默认的一些端口:
50070 //namenode http port
50075 //datanode http port
50090 //secondarynamenode http port
8088 //yarn http port
8020 //namenode rpc port
50010 //datanode rpc port
注:修改主机名/etc/hostname和/etc/hosts映射(每台设备都需要修改),我准备了4台
1.检查是否安装了ssh相关软件包(openssh-server + openssh-clients + openssh),主要用于namenode节点所在机器免密登录其他主机
$yum list installed | grep ssh
2.删除所有主机上的 ~/.ssh/*
3.在s130主机上生成密钥对(namenode节点所在机器,s130是我自己的机器)
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
4.将s130的公钥文件id_rsa.pub远程复制到131 ~ 133主机上,放置在 ~/.ssh/authorized_keys
(scp命令分别复制在其他机器上 scp id_rsa.pub root@s131:~/.ssh/authorized_keys)
5.解压安装jdk,并配置环境变量(这里不在介绍过程)
6.解压安装hadoop,并配置环境变量(这里不在介绍过程,只要注意一点,一个bin,一个sbin,都需要加入PATH后)
注:以上两步骤在自己安装目录下解压,然后在/etc/profile里配置环境变量即可。
7.配置完全分布式(${HADOOP_HOME}/etc/hadoop/),这里介绍了一些主要配置信息,了解更多可查阅网上资料
[core-site.xml]
fs.defaultFS参数配置的是HDFS的地址。
hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下,查看*-default.xml
等默认配置文件,就可以看到很多依赖${
hadoop.tmp.dir}
的配置。如果不配置会在/tmp自动创建,该目录是一个临时目录,重启会被清理到,测试可以不配,实际应用中一定要配置,要注意权限问题,不是在root用户下,要修改相应的用户权限,比如在hadoop用户下,执行sudo chown -R hadoop:hadoop /user/centos/hadoop。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://s130/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/user/centos/hadoop</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
</configuration>
[hdfs-site.xml]
dfs.replication配置的是HDFS存储时的备份数量,一般情况下数据节点与名称节点不在同一个机器上,所以我这里配3个副本
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
[mapred-site.xml]
指定mapreduce运行在yarn框架上。
注意:cp mapred-site.xml.template mapred-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
[yarn-site.xml]
yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>s130</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
[slaves]
slaves文件是指定HDFS上有哪些DataNode节点。
s131
s132
S133
[hadoop-env.sh]
手动配置jdk路径
...
export JAVA_HOME=…
8.分发配置(使用scp命令,复制配置与其他机器上,参考步骤4)
9.格式化文件系统
$>hadoop namenode -format(我们配置过环境变量,所以可以在任何目录下执行)
10.启动hadoop进程(关闭防火墙)
$>start-all.sh
11.通过web页面查看(在我们开始分别介绍不同 http port)