Hadoop集群搭建
将下载好的hadoop压缩包上传到主节点服务器
$ tar -zxvf hadoop-3.3.1.tar.gz -C /usr/local # 解压到/usr/local中
$ cd mv ./hadoop-3.3.1/ ./hadoop # 将文件名改为hadoop
$ sudo chown -R humpy ./hadoop # 修改权限,当前是什么用户登录,就给他赋予用户的权限
STEP1 Java环境准备
由于Hadoop的安装是需要使用到Java环境的,因此在服务器上需要配置JDK,并记录好Java的安装位置,这个路径在后面的安装过程中会频繁出现。
由于Centos自带了JDK.1.7和JDK1.8,因此需要先将其删除,重新安装JDK并配置环境变量;
$ rpm -qa|grep java #查询系统是否装有JDK
$ rpm -e --nodeps 文件名 # 删除对应的文件
$ yum install -y java-1.8.0-openjdk* # 下载openjdk并安装
安装完成后,需要先定位到Java的安装路径,命令如下
$ which java
$ ls -lr /usr/bin/java
$ ls -lr /etc/alternatives/java
最后输出的 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64
就是需要配置到文件里的JAVA_HOME
的值
$ source /etc/profile # 使配置文件生效
$ echo $JAVA_HOME # 查看Java地址
在进入下一步之前一定要检查自己的Java环境是否配置成功且生效, 否则安装启动Hadoop会有一系列的问题
以上操作需要做三台机器中都执行一次;
STEP2 网络映射配置
尽管前一次实验中已经配置成功了集群网络,但是在这里还需要将主机名和IP地址映射配置上,以便Hadoop直接通过主机名去找对应主机的地址;
在三台机子中同时执行以下操作
$ vim /etc/hosts
我这里已经配置成功了;
STEP3 集群搭建
1. 免密登录
(1)主节点需要免密登录子节点,如果主节点上之前有过公钥,需要先将其删除
$ cd ~/.ssh
$ rm ./id_rsa* # 删除旧的公钥
$ ssh-keygen -t rsa # 三次回车
(2)生成密钥之后,首先需要主节点能免密登录本机
$ cat ./id_rsa.pub >> ./authorized_keys
$ ssh master01 # 测试联通性
(3)然后将公钥传到子节点上
$ scp ~/.ssh/id_rsa.pub slave01:/home/humpy
$ scp ~/.ssh/id_rsa.pub slave02:/home/humpy
(4) 在2个子节点上授权接受到的公钥
$ mkdir ~/.ssh # 如果不存在就先创建它
$ cat /home/humpy/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm /home/humpy/id_rsa.pub # 移出公钥
$ ssh master01 # 测试联通性
2. 配置Hadoop集群环境
需要修改/usr/local/hadoop/etc/hadoop
下的workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml5个文件
(1)修改workers文件
$ vim workers
在其中添加两个子节点
localhost
slave01
slave02
(2)修改core-site.xml文件
$ vim core-site.xml
在<configuration>
标签内添加
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
</configuration>
fs.defaultFS
:指定namenode的hdfs协议的文件系统通信地址,可以指定一个主机+端口
hadoop.tmp.dir
:hadoop集群在工作时存储的一些临时文件存放的目录
(3)修改hdfs-site.xml文件
$ vim hdfs-site.xml
dfs.secondary.http.address
:secondarynamenode运行节点的信息
dfs.repliction
:hdfs的副本数设置,默认为3
dfs.namenode.name.dir
:namenode数据的存放位置,元数据存放位置
dfs.datanode.data.dir
:datanode数据的存放位置,block块存放的位置
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave01:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
(4)修改mapred-site.xml文件
$ vim mapred-site.xml
mapreduce.framework.name
:指定mapreduce框架为yarn方式
mapreduce.jobhistory.address
:指定历史服务器的地址和端口
mapreduce.jobhistory.webapp.address
:查看历史服务器已经运行完的Mapreduce作业记录的web地址
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master01:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
</configuration>
(5)修改yarn-site.xml文件
$ vim yarn-site.xml
在其中添加两个子节点
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
(6) 将配置好的Hadoop传给子节点
$ tar -zcf ~/hadoop.master.tar.gz hadoop
$ scp hadoop.master.tar.gz slave01:/home/
$ scp hadoop.master.tar.gz slave02:/home/
在子节点中授权并解压文件
$ sudo rm -r /usr/local/hadoop
$ sudo tar -zxf /home/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R humpy /usr/local/hadoop
(7) 初始化
HDFS启动
$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format
启动成功shell
(8)集群启动
$ ./sbin/start-dfs.sh
$ ./sbin/start-yarn.sh
$ ./sbin/mr-jobhistory-daemon.sh start historyserver
若出现如下报错,ERROR: Attempting to operate on hdfs namenode as root
,是因为缺少用户定义造成的
需要分别编辑开始和关闭脚本
$ vim sbin/start-dfs.sh
$ vim sbin/stop-dfs.sh
在空白处添加如下内容
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
再次执行若还是不能启动,则需要修改hadoop目录下的etc/hadoop/hadoop-env.sh
文件添加jdk的环境变量
如果再次运行还是启动不了,则需要修改start-yarn.sh
和stop-yarn.sh
文件
$ vim sbin/start-yarn.sh
$ vim sbin/stop-yarn.sh
在顶部添加如下内容
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
最后启动后是这样的