1 下载hadoop
安装版本:CentOS7 Hadoop2.8.5 JDK1.8
说明:Hadoop从版本2开始加入了Yarn这个资源管理器,Yarn并不需要单独安装。只要在机器上安装了JDK就可以直接安装Hadoop,单纯安装Hadoop并不依赖Zookeeper之类的其他东西。
下载Hadoop:http://www-eu.apache.org/dist/hadoop/common/hadoop-2.8.5/ hadoop-2.8.5.tar.gz
2 安装3个虚拟机并实现ssh免密码登录
2.1安装3个机器
这里用的Linux系统是CentOS7,安装方法参考:
安装6个机器,机器名称分别叫master、slaver1、slaver2、slaver3、slaver4、slaver5。
说明:为了免去后面一系列授权的麻烦,这里直接使用root账户登录和操作了。
修改各节点的IP,我的机器名和ip的对应关系是:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
配置如下图:master的IP地址设置,其中网关和DNS每个节点都一样
修改其中的IPADDR,各自的IP地址分别为
mastaer 192.168.144.130
slaver1 192.168.144.131
slaver2 192.168.144.132
slaver3 192.168.144.133
slaver4 192.168.144.134
slaver5 192.168.144.135
保存退出后重启网络服务
systemctl restart network
使用ifconfig命令,查看这6个机器的IP。
2.2 修改主机名
永久修改
hostnamectl set-hostname master
或者编辑配置文件/etc/hostname,在此文件中输入要修改的主机名
vim /etc/hostname
如图为master的/etc/hostname文件内容
2.3修改/etc/hosts文件
vim /etc/hosts
打开之后的内容是:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
然后在后面添加
192.168.144.130 master
192.168.144.131 slaver1
192.168.144.132 slaver2
192.168.144.133 slaver3
192.168.144.134 slaver4
192.168.144.135 slaver5
每个节点都一样的配置,如下为master的/etc/hosts配置
2.4 关闭防火墙
查看状态:
systemctl status firewalld
停止:
systemctl disable firewalld
禁用:
systemctl stop firewalld
在开机时禁用一个服务:
systemctl disable firewalld.service
关闭以后查看状态:
2.5 ssh免密登陆
每个机器上都生成密码对
ssh-keygen –t rsa
生成其无密码密钥对,一路回车键,生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录
接下来要做的事情是在6台机器的/root/.ssh/目录下都存入一个内容相同的文件,文件名称叫authorized_keys,文件内容是我们刚才为6台机器生成的公钥。
为了方便,我下面的步骤是现在master上生成authorized_keys文件,然后把6台机器刚才生成的公钥加入到这个master的authorized_keys文件里,然后在将这个authorized_keys文件复制到其他节点上。
touch /root/.ssh/authorized_keys
把id_rsa.pub追加到授权的key里面去:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
再将其余节点的key加进去,之后是这样的:
修改文件"authorized_keys"权限,这步骤很重要,很多莫名其妙的错误有可能就是权限的问题
chmod 600 ~/.ssh/authorized_keys
master/root/.ssh/目录下已经有authorized_keys这个文件了,该文件的内容也已经OK了,接下来要将该文件复制到其他节点的/root/.ssh/
scp ~/.ssh/authorized_keys slave1:~/.ssh/
scp ~/.ssh/authorized_keys slave2:~/.ssh/
scp ~/.ssh/authorized_keys slave3:~/.ssh/
scp ~/.ssh/authorized_keys slave4:~/.ssh/
scp ~/.ssh/authorized_keys slave5:~/.ssh/
测试一下各个节点之间是否可以互相免密登录
ssh slaver1
ssh slaver2
3 安装jdk和hadoop
3.1 安装JDK
在每一个节点上都安装jdk1.8,要将Centos7自带的jdk卸载掉,重新安装(最好安装1.8版本,最初安装最新版JDK_11,但是后续安装spark报错,又换成了JDK1.8)。
3.2 安装hadoop
(1)上载文件并解压缩
上传hadoop-2.8.5.tar.gz到目录/usr/local/hadoop/下,并解压,删除安装包:
tar hadoop-2.8.5.tar.gz
rm -rf hadoop-2.8.5.tar.gz
(2) 新建几个目录
cd /usr/local/hadoop/hadoop-2.8.5/
mkdir tmp
mkdir hdfs
mkdir hdfs/name
mkdir hdfs/data
(3) 修改etc/hadoop中的一系列配置文件
cd /usr/local/hadoop/hadoop-2.8.5/etc/hadoop
vim hadoop-env.sh
修改JAVA安装路径
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_181
- 修改core-site.xml
<configuration>
<!--配置hdfs文件系统的命名空间-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 配置操作hdfs的存冲大小 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 配置临时数据存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoop-2.8.5/tmp</value>
</property>
</configuration>
- 修改hdfs-site.xml
<configuration>
<!--配置副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--hdfs的元数据存储位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/hadoop-2.8.5/hdfs/name</value>
</property>
<!--hdfs的数据存储位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/hadoop-2.8.5/hdfs/data</value>
</property>
<!--hdfs的namenode的web ui 地址-->
<property>
<name>dfs.http.address</name>
<value>master:50070</value>
</property>
<!--hdfs的snn的web ui 地址-->
<property>
<name>dfs.secondary.http.address</name>
<value>master:50090</value>
</property>
<!--是否开启web操作hdfs-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!--是否启用hdfs权限(acl)-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
- 新建并且修改mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
<!--指定maoreduce运行框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--历史服务的通信地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!--历史服务的web ui地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
- 修改slaves文件
vim slaves
内容为:
master
slaver1
slaver2
slaver3
slaver4
slaver5
- 修改yarn-site.xml文件
vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!--指定resourcemanager所启动的服务器主机名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!--指定mapreduce的shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定resourcemanager的内部通讯地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<!--指定scheduler的内部通讯地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<!--指定resource-tracker的内部通讯地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<!--指定resourcemanager.admin的内部通讯地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<!--指定resourcemanager.webapp的ui监控地址-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
3.3 分发配置
每一个节点都要进行Hadoop的安装,在master上安装好以后分发给其他节点
cd /usr/local
scp hadoop slaver1:/usr/local/
scp hadoop slaver2:/usr/local/
scp hadoop slaver3:/usr/local/
scp hadoop slaver4:/usr/local/
scp hadoop slaver5:/usr/local/
并分别配置每个节点的/etc/profile文件
4 启动hadoop
4.1 在namenode上执行初始化
因为master是namenode,其余都是datanode,所以只需要对master进行初始化操作,也就是对hdfs进行格式化。
进入到master这台机器的/usr/local/hadoop/hadoop-2.8.5/bin目录
./hdfs namenode -format
格式化成功后,可以在看到在/usr/local/hadoop/hadoop-2.8.5/hdfs/name/目录多了一个current目录,而且该目录内有一系列文件
4.2 在namenode上执行启动命令
进入到hserver1这台机器的/usr/local/hadoop/hadoop-2.8.5/sbin目录,
执行初始化脚本,也就是执行命令:
./start-all.sh
5 测试hadoop
访问 http://192.168.144.130:50070/
记:hdfs文件存储位置
/usr/local/hadoop/hadoop-2.8.5/hdfs/data/current/BP-1236883458-192.168.144.130-1538123110928/current/finalized/subdir0/subdir0