本次安装是在CentOS系统上安装。
一、安装内容
1.1. 安装jdk;
1.2. ssh免秘钥登录;
1.3. 关闭防火墙;
1.4. 安装Hadoop集群;
二、Hadoop集群架构
本次环境搭建使用3台机器,有1台是NameNode,其它2台是DataNode,详细信息如下:
机器名 | 运行进程 | 备注 |
---|---|---|
CDH0 | NameNode/SecondaryNameNode/ResourceManager | NameNode节点 |
CDH1 | NodeManager/DataNode | 数据节点 |
CDH0 | NodeManager/DataNode | 数据节点 |
三、安装jdk
在Oracle官网下载JDK的rpm包,然后使用rpm命令进行安装;安装成功后,使用java命令可用。
rpm -ivh jdk*.rpm
四、ssh免秘钥登录
在cdh0上,使用ssh-keygen生成免密登录的私钥-公钥对,然后把这个
#生成免密登录的私钥-公钥对
#会产生id_rsa私钥和id_rsa.pub公钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#把cdh0的公钥加入到本机或则cdh1、cdh2的授权keys中
#则在cdh0通过ssh ipaddr可以不通过密码直接登录其它主机了
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
可是cdh1、cdh2不能免密登录其它主机,那么就要把所有主机的免密公钥都复制到authorized_keys文件中,具体做法如下:
#生成cdh0/cdh1/cdh2免密登录的私钥-公钥对(3台主机上都要运行1次)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#拷贝cdh1的公钥到cdh0上(cdh1上执行)
scp ~/.ssh/id_rsa.pub root@cdh0:~/.ssh/id_rsa_1.pub
#拷贝cdh2的公钥到cdh0上(cdh2上执行)
scp ~/.ssh/id_rsa.pub root@cdh0:~/.ssh/id_rsa_2.pub
#合并公钥(cdh0上执行)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa_1.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa_2.pub >> ~/.ssh/authorized_keys
#分发authorized_keys给cdh1/cdh2
scp ~/.ssh/authorized_keys root@cdh1:~/.ssh/
scp ~/.ssh/authorized_keys root@cdh2:~/.ssh/
这是在任意一台机器上,即可免秘钥ssh ipaddr了。
五、关闭防火墙
防止防火墙拦截了某些端口,这里先把防火墙关掉好了。CentOS 7里面使用的firewalld防火墙,那么使用如下命令关闭防火墙:
service firewalld stop
六、Hadoop集群配置
配置Hadoop,可以先在每台机器上解压hadoop安装包,然后再某台机器上配置所有配置文件,最后分发到所有机器上即可。配置过程如下,我选择在cdh0上进行配置,cd到hadoop主目录下的etc/hadoop中。
6.1. 在cdh0/cdh1/cdh2上解压hadoop安装包(我都解压在/root目录中)
tar xzvf hadoop-2.8.0.tar.gz
6.2. 配置hadoop-env.sh修改hadoop使用的Java环境变量
使用vi打开hadoop-env.sh,修改前和修改后的内容对比如下:
#修改前的配置
# The java implementation to use.
export JAVA_HOME=${JAVA_HOME}
#修改后的配置(我的JAVA_HOME在usr目录)
# The java implementation to use.
export JAVA_HOME=/usr
#创建hadoop的NameNode和DataNode所需要的目录
mkdir /hadoop
cd /hadoop
mkdir name
mkdir data
mkdir tmp
6.3. 配置etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cdh0:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
6.4. 配置etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/hadoop/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop/data</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cdh0:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
6.5 配置etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>cdh0:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>cdh0:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>cdh0:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>cdh0:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>cdh0:18088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
6.6 配置etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6.7 配置slaves
cdh1
cdh2
6.8 分发配置文件
在hadoop主目录/etc/hadoop下,执行如下命令,把这些配置文件分发到cdh1/cdh2主机上:
scp * root@cdh1:~/hadoop-2.8.0/etc/hadoop/
scp * root@cdh2:~/hadoop-2.8.0/etc/hadoop/
6.9 给hadoop配上环境变量
#打开系统环境变量配置文件
vi /etc/profile
#在文件中增加这两行,添加环境变量
export HADOOP_HOME=/root/hadoop-2.8.0
export PATH=$PATH:$HADOOP_HOME/bin
#使得系统环境变量生效
source /etc/profile
同样,你也可以把这个profile分发到所有主机上,这样方便在其它主机上执行hadoop命令。
6.9 格式化NameNode
以cdh0作为NameNode,执行hadoop命令:
hadoop namenode -fromat
如果不报错没有任何异常,继续往下。
6.10 启动集群
在hadoop主目录中执行start-all.sh批处理启动集群;
sbin/start-all.sh
七、效果预览
在cdh0上使用jps查看java进程;
在cdh1/2上使用jps查看java进程;
接着使用浏览器访问http://cdh0:50070,即可看到Hadoop集群的信息总览;
八、错误总计
在启动Hadoop集群后,可以使用jps命令查看每台机器上该启动的进程是否启动,如果没有启动,则要看hadoop目录中的logs目录的日志,如下图是由于没有创建hadoop用到的namenode存储目录,导致namenode启动失败。