由于机器原因,只拿到了三台机器,所以就先搭3台机器,一条机器做Namenode,另外2台做DataNode。
Hadoop中的管理节点和数据节点最好分开部署
数据节点在实际运行任务时负载是比较重的,很容易影响管理示例的稳定性
下面是搭建步骤:
1 修改/etc/hosts文件
这里说明下有的是把自己的hostname做了修改,改成啥master ,salver 1,salver2这样或者namenode,datanode1,datanode2这样的形式,但是博主因为不能修改hostname,所以直接采用的机器本身的hostname,这里只要把ip和hostname的映射关系做好,都是没有问题的。所以不必太过纠结这一个问题。
三台机器的配置都是一样配置的,大致就如下配置,按实际情况配:后面我就以这三个名字进行举例
192.168.9.1 namenode 192.168.9.2 datanode1 192.168.9.3 datanode2
2 三台机器都修改完后就检查下三台机之间是否都可以Ping 通 进行互联,这里命令如下
ping -c 3 datanode1
三台机器上面都要进行这样的测试,每一台都测试与另外几台机器之间是否能通
3 免密登录,因为在后续Hadoop启动的时候会登录另外的集群,所以这里会做下三台机器之间的免密登录
首先分别在三台机器上生成公钥
ssh-keygen -t rsa -P ''
4 分别在三台机器上创建authorized_keys文件
touch /root/.ssh/authorized_keys
5. 检查authorized_keys文件是否生成成功
ls /root/.ssh/
6 将 三台机器id_rsa.pub中的key复制,然后三个key 都放到authorized_keys中,然后三台机器的authorized_keys文件中的内容保持一致
大致效果如上
7 检查是否能够免密登陆
ssh datanode1
分别在三台机器上进行测试互联
8 JDK环境检查
分别检查三台机器上的JDK环境,我这里用的JDK 版本为 jdk1.8.0_65
如果JDK需要升级大致步骤如下:
下载JDK安装包
在/opt/java 创建java目录
然后将安装包放到该目录下,进行解压缩
mkdir /opt/java
tar -zxvf jdk-8u65-linux-x64.tar.gz
修改配置文件
vim /etc/profile
在该文件内添加如下命令:
export JAVA_HOME=/opt/java/jdk1.8.0_65
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
执行命令来使配置生效
source /etc/profile
测试是否安装成功
Java -version
如果还是没有成功是之前的版本,解决方法如下:
首先查看下
which java
which javac
然后修改对应的软连接
rm -rf /usr/bin/java
rm -rf /usr/bin/javac
ln -s $JAVA_HOME/bin/javac /usr/bin/javac
ln -s $JAVA_HOME/bin/javac /usr/bin/java
执行完后继续查看
Java -version
Javac -version
9 创建hadoop文件夹下载hadoop镜像
mkdir /opt/hadoop
10 进入到hadoop文件夹然后解压安装包
tar -xvf hadoop-2.8.4.tar.gz
11 创建文件夹,在三台机器上都创建
mkdir /root/hadoop
mkdir /root/hadoop/tmp
mkdir /root/hadoop/var
mkdir /root/hadoop/dfs
mkdir /root/hadoop/dfs/name
mkdir /root/hadoop/dfs/data
下面的步骤三台机器都要操作,保持一致性,文件都是一样的,可以只弄一个,后面的几台机器直接复制过去。
12 修改core-site.xml文件
在<configuration> </configuration> 节点之间内加入配置
vim /opt/hadoop/hadoop-2.8.0/etc/hadoop/core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
13 修改hadoop-env.sh文件,这个文件就是配置hadoop运行的jave环境
vim /opt/hadoop/hadoop-2.8.4/etc/hadoop/hadoop-env.sh
将export JAVA_HOME=${JAVA_HOME}
改为
export JAVA_HOME=/opt/java/jdk1.8.0_65
自己的JDK路径
14 修改hdfs-site.xml文件 ,这里配置的就是存放路径
在<configuration> </configuration> 节点之间内加入配置
vim /opt/hadoop/hadoop-2.8.4/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>true</value>
<description>need not permissions</description>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
说明:dfs.permissions配置为false后,可以允许不要检查权限就生成dfs上的文件,方便倒是方便了,但是你需要防止误删除,请将它设置为true,或者直接将该property节点删除,因为默认就是true。
15 新建并且修改mapred-site.xml文件
cp /opt/hadoop/hadoop-2.8.4/etc/hadoop/mapred-site.xml.template /opt/hadoop/hadoop-2.8.4/etc/hadoop/mapred-site.xml
vim /opt/hadoop/hadoop-2.8.4/etc/hadoop/mapred-site.xml
修改这个新建的mapred-site.xml文件,在<configuration> </configuration> 节点之间内加入配置:
<property>
<name>mapred.job.tracker</name>
<value>namenode:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
16 修改slaves文件 注意这里存放的是datanode机器的hostname
vim /opt/hadoop/hadoop-2.8.4/etc/hadoop/slaves
将里面的localhost删除,添加如下内容:
datanode1
datanode2
17 修改yarn-site.xml文件,这个主要就是配置关于yarn服务的
在<configuration> </configuration> 节点之间内加入配置(注意了,内存根据机器配置越大越好,我这里只配2个G是因为机器不行)::
vim /opt/hadoop/hadoop-2.8.4/etc/hadoop/yarn-site.xml
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>namenode</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<description>The https adddress of the RM web application.</description>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<description>The address of the RM admin interface.</description>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<discription>8182MB</discription>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
18 在namenode机器上执行初始化操作
cd /opt/hadoop/hadoop-2.8.0/bin
19 执行初始化脚本,也就是执行命令:
./hadoop namenode -format
20 在namenode机器上执行启动命令
进入目录:
cd /opt/hadoop/hadoop-2.8.4/sbin/
启动命令:
./start-all.sh
21 测试hadoop,关闭防火墙
systemctl stop firewalld.service
22 查看hadoop 集群是否启动起来
输入如下命令 :
jps
23 查看hadoop -overview
访问namenode机器IP:50070,博主这里端口都做了映射,实际访问端口是50070
页面会自动跳转
然后可以访问ip:8088端口查看datanode集群