0、设置root初始密码
sudo passwd
一、配置静态ip
sudo vim /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
#the primary network interface
#网卡名称
auto eth0
#设置为静态
iface eth0 inet static
#静态ip地址
address 192.168.1.101
#子网掩码
netmask 255.255.255.0
#网关
gateway 192.168.1.1
重启网络服务
sudo /etc/init.d/networking restart
二、设置普通用户具有最大权限
修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
nano ALL=(ALL) NOPASSWD:ALL
三、创建目录
sudo mkdir /opt/software 放软件安装包
sudo mkdir /opt/module 放安装后的软件
四、修改用户名:
chown nano:nano /opt/software /opt/module
四、安装jdk
下载jdk(下载一般服务器的jdk会显示版本不匹配,所以直接在线安装就可以)
nano@nano1:~$ sudo apt install default-jdk
查看java版本
java -version
查看java安装路径
进入/usr/bin
查看java的软连接:ls -l java
切换到相应目录/etc/alternatives/java
查看java的软连接:ls -l java
可知java的安装目录为:/usr/lib/jvm/java-11-openjdk-arm64
配置java环境变量
sudo vim /etc/profile
添加如下:
#JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
export CLASSPATH=$CLASSPATH:.
export PATH=$PATH:$JAVA_HOME/bin
立即生效:source /etc/profile
查看是否生效: echo $JAVA_HOME
五、配置ssh无密码登录
先ssh远程连接一下:
进行无密钥配置
nano@nano1:~/.ssh$ cd ~/.ssh/
使用rsa算法生成公钥和私钥:nano@nano1:~/.ssh$ ssh-keygen -t rsa
(一路回车就可以了,其中第一个是要输入公钥和私钥的保存位置,默认在.ssh/id_rsa,会看到如下提示)
.ssh文件夹下的文件功能解释
(1)~/.ssh/known_hosts :记录ssh访问过计算机的公钥(publickey)
(2)id_rsa :生成的私钥
(3)id_rsa.pub :生成的公钥
(4)authorized_keys:存放授权过得无秘登录服务器公钥
- 将公钥拷贝到要免密登录的目标机器上(从101机器拷贝到所有机器上,包括自己)
nano@nano1:~/.ssh$ ssh-copy-id 192.168.1.102
再次远程ssh连接,这次不用密码就可以登录了
有关远程拷贝:
scp可以实现服务器与服务器之间的数据拷贝。
六、安装rsync同步工具(rsync命令可以当成是高级版的cp+scp,它可以跨机器复制(同步)文件)
nano@nano1:/opt/module/test$ sudo apt-get install rsync
注意:每台机器都需要安装rsync同步工具,必须两两都有才能同步,要不然同步不了。
rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
(1)查看rsync使用说明 man rsync | more
(2)基本语法 rsync -rvl
p
d
i
r
/
pdir/
pdir/fname
u
s
e
r
@
h
a
d
o
o
p
user@hadoop
user@hadoophost:$pdir
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
选项 -r 递归 -v 显示复制过程 -l 拷贝符号连接
(3)案例实操 把本机/opt/module/test/下的test.txt文件同步到nano2服务器的nano用户下的/opt/module/test/目录
nano@nano1:/opt/module$ rsync -rvl /opt/module/test/test.txt nano@192.168.1.102:/opt/module/test/
扩展知识:
使用notepad++ 安装NppFTP 远程连接Linux 如果出现如下问题
注意:(每台机器应该都要这样配) 解决: 切换到root用户,打开ssh配置文件sshd_config
root@nano2:/home/nano# vim /etc/ssh/sshd_config 再文件末尾添加如下内容:
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
保存并退出。 重启ssh服务:root@nano2:/home/nano# service sshd restart
七、编写集群分发脚本xsync
1)需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:
nano@nano1:/opt/module$ rsync -rvl /opt/module nano@192.168.1.102:/opt/
(2)期望脚本:
xsync 要同步的文件名称
(3)在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行,需要制定路径。
2)案例实操:
(1)在/usr/local/bin目录下创建xsync文件,文件内容如下:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0));then
echo no args;
exit
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 分发到其它集群上
for((host=102;host<=102;host++));do
echo ----------192.168.1.$host-----------
rsync -rvl $pdir/$fname $user@192.168.1.$host:$pdir
done
- 上面循环中的ip地址随着集群的增大进行更改(只在101机器上改)
(2)修改脚本 xsync 具有执行权限
nano@nano1:/usr/local/bin$ chmod a+x xsync
(3)调用脚本形式:xsync 文件名称
八、编写分发脚本xcall
1)需求分析:在所有主机上同时执行相同的命令
xcall +命令
2)具体实现
(1)在/usr/local/bin目录下创建xcall文件,文件内容如下:
#!/bin/bash
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
echo ----------localhost------------
$@
for((host=102;host<=102;host++));do
echo -----------192.168.1.$host----------------
ssh 192.168.1.$host $@
done
(2)修改脚本 xcall 具有执行权限
nano@nano1:/usr/local/bin$ chmod a+x xcall
(3)调用脚本形式: xcall 操作命令
nano@nano1:/usr/local/bin$ xcall rm -r /opt/module/test/
九、配置/etc/hosts,添加ip 主机名,注释前两行
(每台机器都要)
十、安装hadoop
解压到指定目录
nano@nano1:/opt/software$ tar -xzvf hadoop-2.7.2.tar.gz -C /opt/module/
配置hadoop
1. 将hadoop添加到环境变量
获取Hadoop安装路径:pwd
打开profile:sudo vim /etc/profile
添加如下:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
设置生效:source /etc/profile
查看是否生效:
如果不能生效,重启试一试,,切换到root下,执行如下:
sync
Reboot
2. 配置hadoop-env.sh
nano@nano1:/opt/module/hadoop-2.7.2/etc/hadoop$ vim hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
- 配置core-site.xml(提前建好目录地址)
<configuration>
<!--指定HDFS中namenode地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.101:9000</value>
</property>
<!--指定hadoop运行时产生的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>
- 配置hdfs-site.xml(提前建好目录地址)
<configuration>
<!--指定HDFS副本的数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定secondnamenode地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.1.102:50090</value>
</property>
<!--指定namenode的存放目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-2.7.2/data/hadoop/name</value>
</property>
<!--指定datanode存放的目录地址-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop-2.7.2/data/hadoop/data</value>
</property>
</configuration>
- 配置yarn-env.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64 - 配置yarn-site.xml
<configuration>
<configuration>
<!-- Site specific YARN configuration properties -->
<!--reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--指定yarn的resourcemanager地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.1.101</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 单位/秒 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--容器是否受虚拟内存限制-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!--容器是否受物理内存限制-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.1.101:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.1.101:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.1.101:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.1.101:8033</value>
</property>
<!--根据自己电脑内存来配-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3072</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>3072</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
</configuration>
</configuration>
- 配置mapred-env.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64 - 配置mapred-site.xml (对template重命名)
cp mapred-site.xml.template mapred-site.xml
<configuration>
<!--指定mr运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--配置job历史服务地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.1.101:10020</value>
</property>
<!--配置job的webapp历史服务地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.1.101:19888</value>
</property>
<!--根据自己电脑配置来配-->
<property>
<name>mapreduce.map.memeory.mb</name>
<value>1024</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx819m</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx1638m</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>64</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>64</value>
</property>
</configuration>
- 配置slaves
192.168.1.102
注意:集群扩大,slaves随着增加
其他机器上需要独立安装:jdk,rsync,ntp安装步骤见前面,后面。
十一、分发集群文件
xsync /opt/module
十二、集群启动
集群部署规划
- 如果是第一次启动集群,需要格式化namenode
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs namenode -format
- Hadoop启动停止方式
1)各个服务组件逐一启动
(1)分别启动hdfs组件
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
(2)启动yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
2)各个模块分开启动(配置ssh是前提)常用
(1)整体启动/停止hdfs
start-dfs.sh
nano@nano1:/opt/module/hadoop-2.7.2$ sbin/start-dfs.sh
stop-dfs.sh
(2)整体启动/停止yarn
start-yarn.sh
nano@nano1:/opt/module/hadoop-2.7.2$ sbin/start-yarn.sh
stop-yarn.sh
3)全部启动(不建议使用)
start-all.sh
stop-all.sh
4)可能出现的问题及解决方案:
执行start-dfs.sh后,datenode没有启动
十三、集群测试
- 上传文件到集群
创建文件夹
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -mkdir -p /user/hehuan/test/input
上传文件
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz /user/hehuan/test/input
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -put README.txt /user/hehuan/test/input
- 对文件进行处理
yarn上运行mapreduce程序
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hehuan/test/input/README.txt /user/hehuan/test/output
- 查看文件内容
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -cat /user/hehuan/test/output/*
- 从集群下载文件
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -get /user/hehuan/test/output/* ./data/tmp
- 删除集群上的文件
nano@nano1:/opt/module/hadoop-2.7.2$ bin/hdfs dfs -rm -r /user/hehuan/test/input/hadoop-2.7.2.tar.gz
十四、设置集群时间同步
- 首先master节点下载ntp,ntpdate同步时间工具
nano@nano1:/opt/module/hadoop-2.7.2$ sudo apt-get install ntp ntpdate
- 修改/etc/ntp.conf配置文件
修改如下(表示从IP地址192.168.1.0-192.168.1.254,默认网关255.255.255.0的服务器都可以使用我们的NTP服务器来同步时间)
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
- 重启ntp服务(ntpdate执行时ntp必须关闭才可以执行)
先ntpdate同步网络时间
root@nano1:~/.ssh# ntpdate cn.pool.ntp.org
然后启动ntp服务
root@nano1:/opt/module/hadoop-2.7.2# service ntp stop
root@nano1:/opt/module/hadoop-2.7.2# service ntp status
root@nano1:/opt/module/hadoop-2.7.2# service ntp start
root@nano1:/opt/module/hadoop-2.7.2# service ntp status - slave的机器上进行定时同步时间(和master同步)
先下载ntpdate
nano@nano2:/opt/module/hadoop-2.7.2$ sudo apt-get install ntpdate
切换到root用户下,添加定时任务
crontab -e
设置每分钟同步一次,并写入硬件中(192.168.1.101是master的ip)
* * * * * /usr/sbin/ntpdate 192.168.1.101;/sbin/hwlocal -w
ok