准备工作
-
三台虚拟机
hostname hosts配置文件 ip 用户 hadoop101 192.168.43.11 hadoop101
192.168.43.12 hadoop102
192.168.43.13 hadoop103192.168.43.11 xiaomao hadoop102 同上 192.168.43.12 xiaomao hadoop103 同上 192.168.43.13 xiaomao 注意:IP配置为静态,每台虚拟机用新建的xiaomao账户。每个用户授予管理员权限。
如何配置用户的管理员权限:
vi编辑 /etc/sudoers 文件,找到 root ALL=(ALL) ALL,在下面添加一行,如下所示:
## Allow root to run any commands anywhere root ALL=(ALL) ALL xiaomao ALL=(ALL) ALL
-
准备安装目录:
在/opt/下创建下面两个目录:
total 0 drwxr-xr-x. 4 xiaomao xiaomao 40 Jun 3 12:23 module drwxr-xr-x. 2 xiaomao xiaomao 67 Jun 3 12:21 software [xiaomao@hadoop101 opt]$
分别存放安装包和解压的程序
部署计划
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
1.安装JDK和Hadoop
分别下载JDK和Hadoop安装包到/opt/software目录,解压到/opt/module目录。(三个节点分别安装,也可以先配置一台,克隆后,修改ip和hostname等即可)
vim /etc/profile 配置环境变量
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile
2.编写一个集群同步脚本
所有节点需要先安装同步工具:
yum install rsync -y
因为修改一些配置文件时,需要同步修改其他所有节点,利用脚本可以提升效率。
将脚本xsync文件放在用户bin目录:/home/xiaomao/bin 。这样可以在任意目录执行。注意授予该文件执行权限:
chmod +x xsync
3.配置Hadoop
以下操作在101进行,最后同步到其他节点
cd /opt/module/hadoop-3.1.3/etc/hadoop
-
环境变量配置:hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8
-
核心配置文件:core-site.xml
<configuration> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data/tmp</value> </property> </configuration>
-
HDFS配置文件: hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 指定Hadoop辅助名称节点主机配置,即SecondaryNameNode --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop103:9868</value> </property> </configuration>
-
YARN配置:yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop102</value> </property> </configuration>
-
MapReduce配置:mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
Workers:workers (hadoop3.x之前是slavers文件)
hadoop101 192.168.43.11 hadoop102 192.168.111.12 hadoop103 192.168.111.13
最后同步配置文件到其他两个节点:
xsync /opt/module/hadoop-3.1.3/etc/hadoop
至此,安装配置结束。
更多配置选项和默认值,参加hadoop官网
4.单节点启动
第一次启动需要先格式化HDFS:
hadoop101上:
$HADOOP_HOME/bin/hdfs namenode -format
启动NameNode:
$HADOOP_HOME/bin/hdfs --daemon start namenode
启动DataNode:
$HADOOP_HOME/bin/hdfs --daemon start datanode
然后分别到102和103上启动DataNode ,可以通过jps查看进程启动情况。
显然,如果集群节点很多,这样效率很低。所以hadoop提供了另外的脚步,可以直接启动所有节点的进程。前提是配置ssh免登录
在master节点启动HDFS的namenode和其他所有的datanode脚本:在101执行
$HADOOP_HOME/sbin/start-dfs.sh
启动yarn:在102(配置ResourceManager所在的机器执行)
$HADOOP_HOME/sbin/start-yarn.sh
5.配置SSH免登录
Hadoop框架本身并不需要ssh,因为hadoop是分布式架构,但是Hadoop提供的启动脚本(e.g., start-mapred.sh and start-dfs.sh)利用ssh去启动不同节点的进程,所以需要进行配置。需要配置namenode到其他节点的免登录(101到101,102,103)和ResourceManager到其他节点的免登录(102到101,102,103)
-
首先在三台机器生成对应的ssh公钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
-
101到其他机器的免登录
ssh-copy-id hadoop101 ssh-copy-id hadoop102 ssh-copy-id hadoop103
-
102到其他机器的免登录
ssh-copy-id hadoop101 ssh-copy-id hadoop102 ssh-copy-id hadoop103
遇到问题:
配置免登录后,登录还提示需要密码:
跟 sshd 服务相关的登录日志可以在 /var/log/secure 中查看
从日志可以看出是 /home/xiaomao/.ssh/ 目录权限不对
ll /home/xiaomao/.ssh -d
drwxrwxrwx 3 xiaomao xiaomao 80 Jun 13 15:47 /home/xiaomao/.ssh
权限为777,安全策略会禁止访问
修改目录权限为 700,问题解决
chmod 700 /home/xiaomao/.ssh
6.集群启动
hdfs上面已经格式化了
启动HDFS: 在101上启动
$HADOOP_HOME/sbin/start-dfs.sh
启动yarn: 在102上(ResourceManager配置的是102)启动
$HADOOP_HOME/sbin/start-yarn.sh
7.访问
Daemon | Web Interface | Notes |
---|---|---|
NameNode | http://nn_host:port/ | Default HTTP port is 9870. |
ResourceManager | http://rm_host:port/ | Default HTTP port is 8088. |
MapReduce JobHistory Server | http://jhs_host:port/ | Default HTTP port is 19888. |
8.集群时间同步
选取集群中性能较好的一台机器作为时间服务器,其他节点定时向时间服务器做时间同步。
这里选取101作为时间服务器。
时间服务器需要做如下配置:
-
1.先安装ntp服务
查询是否已安装
rpm -qa|grep ntp
没有安装需要安装:
yum install -y ntp
-
2.修改ntp配置
vi /etc/ntp.conf
修改内容如下
a)修改1(授权192.168.43.0-192.168.43.255网段上的所有机器可以从这台机器上查询和同步时间)
restrict 192.168.43.0 mask 255.255.255.0 nomodify notrap
b)修改2(集群在局域网中,不使用其他互联网上的时间)
c) 添加添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0 fudge 127.127.1.0 stratum 10
最后截图
-
3.修改/etc/sysconfig/ntpd 文件
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
重启ntpd服务:
service ntpd status service ntpd start
设置开机启动:
chkconfig ntpd on
其他要同步时间的机器,需要安装ntpdate
yum install -y ntpdate
编写一个定时任务:每10分钟去101同步时间,定时任务编写教程
crontab -e
*/10 * * * * /usr/sbin/ntpdate hadoop101
通过date命令修改时间,然后执行同步测试是否可以正常同步:
[xiaomao@hadoop102 hadoop-3.1.3]$ date
Sat Jun 13 19:07:55 CST 2020
[xiaomao@hadoop102 hadoop-3.1.3]$ sudo date -s "2019-12-11 11:11:11"
[sudo] password for xiaomao:
Wed Dec 11 11:11:11 CST 2019
[xiaomao@hadoop102 hadoop-3.1.3]$ date
Wed Dec 11 11:11:12 CST 2019
[root@hadoop102 sbin]# /usr/sbin/ntpdate hadoop101
13 Jun 19:18:19 ntpdate[9154]: step time server 192.168.43.11 offset 16012648.245208 sec
[root@hadoop102 sbin]# date
Sat Jun 13 19:18:21 CST 2020
常见错误
stop-dfs.sh和stop.sh命令失效问题。
hadoop关闭是通过记录进程ID,然后通过ssh登录到各个节点关闭进程。默认记录pid的文件存放在系统/tmp目录下,但是Linux会定期清理/tmp目录,所以导致运行一段时间,关闭机器脚本失效。解决办法是修改pid文件存放目录:
修改配置文件hadoop-env.sh 找到下面的配置,修改路径:
export HADOOP_PID_DIR=${HADOOP_HOME}/pid