安装好MySQL后
安装JDK
在/opt目录下创建module、software文件夹
sudo mkdir module
sudo mkdir software
修改module、software文件夹的所有者
sudo chown liushuo:liushuo /opt/module /opt/software
liushuo:liushuo ---前面的是用户,后面的是用户组
用户组添加命令 groupadd 用户组名
将JDK安装包上传到Linux /opt/software目录下
解压JDK到/opt/module目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
配置JDK环境变量
新建/etc/profile.d/my_env.sh文件
vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
保存后退出
重启xshell窗口,让环境变量生效
测试JDK是否安装成功
java -version
如果能看到以下结果、则Java正常安装
java version "1.8.0_212"
重启(如果java -version可以用就不用重启)
sudo reboot
机器配置免密登录
分别在三台机器上执行下面的命令,生成公钥和私钥:
ssh-keygen -t rsa
然后敲(三个回车),就会在 ~/.ssh目录下生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
分别在三台机器上执行,将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
测试机器之间是否可以免密登录
ssh hadoop102
ssh hadoop103
ssh hadoop104
安装hadoop集群
将hadoop安装包上传到/opt/software目录下
cd /opt/software
解压安装文件到/opt/module下面
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
查看是否解压成功
cd /opt/module/hadoop-3.1.3
将Hadoop添加到环境变量
获取Hadoop安装路径 pwd
/opt/module/hadoop-3.1.3
打开/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
在文件中添加
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.1.3
在PATH=......后面加上 :$HADOOP_HOME/bin:$HADOOP_HOME/sbin
在export后面加上 HADOOP_HOME
保存后退出,重启shell窗口,使用hadoop version来测试hadoop是否成功安装
hadoop version
安装成功会出现 Hadoop 3.1.3
对hadoop103 hadoop104 也更改相关/etc/profile.d/my_env.sh文件的环境变量
source /etc/profile.d/my_env.sh 让环境变量更新一下
使用hadoop version来测试hadoop是否成功安装
hadoop version
安装成功会出现 Hadoop 3.1.3
编写集群分发脚本xsync
脚本可以通过scp全拷贝 也可以rsync命令进行拷贝
rsync只对差异文件做更新。scp是把所有文件都复制过去
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
创建bin 目录
cd 到/home/liushuo目录下
创建bin目录 在此目录下创建文件 xsync
mkdir bin
cd bin
touch xsync
vim xsync
文件内容如下
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
修改脚本 xsync 具有执行权限
chmod +x xsync
查看测试脚本 ll
-rwxrwxr-x. 1 liushuo liushuo 622 11月 14 15:37 xsync
hadoop102: DataNode NameNode NodeManager
hadoop103: DataNode ResourceManager NodeManager
hadoop104: DataNode SecondaryNameNode NodeManager
对三台集群进行配置
cd $HADOOP_HOME/etc/hadoop
配置文件都在$HADOOP_HOME/etc/hadoop里面
配置hadoop-env.sh---------------------------------------------------------
echo $JAVA_HOME
/opt/module/jdk1.8.0_212
hadoop-env.sh文件中修改JAVA_HOME 路径:
vim hadoop-env.sh
执行操作shift+: 出现光标后输入/ JAVA_HOME加上回车,找到对应的语句,修改后保存就可以
export JAVA_HOME=/opt/module/jdk1.8.0_212
配置core-site.xml-------------------------------------------------------------
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
文件内容如下:[将<configuration> </configuration>中间的配置参数放进文件的对应部分就可以]
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9820</value>
</property>
<!-- 指定hadoop数据的存储目录
官方配置文件中的配置项是hadoop.tmp.dir ,用来指定hadoop数据的存储目录,
此次配置用的hadoop.data.dir是自己定义的变量,
因为在hdfs-site.xml中会使用此配置的值来具体指定namenode 和 datanode存储数据的目录
<value>/opt/module/hadoop-3.1.3/data</value> 这个指定的是实际的地址
-->
<property>
<name>hadoop.data.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 下面是兼容性配置 -->
<!-- 配置该liushuo(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.liushuo.hosts</name>
<value>*</value>
</property>
<!-- 配置该liushuo(superuser)允许代理的用户所属组 -->
<property>
<name>hadoop.proxyuser.liushuo.groups</name>
<value>*</value>
</property>
<!-- 配置该liushuo(superuser)允许代理的用户-->
<property>
<name>hadoop.proxyuser.liushuo.users</name>
<value>*</value>
</property>
</configuration>
配置hdfs-site.xml--------------------------------------------------------
vim hdfs-site.xml [将<configuration> </configuration>中间的配置参数放进文件的对应部分就可以]
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode数据的存储目录(用到了core-site中的hadoop存储目录)-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.data.dir}/name</value>
</property>
<!-- 指定Datanode数据的存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.data.dir}/data</value>
</property>
<!-- 指定SecondaryNameNode数据的存储目录 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.data.dir}/namesecondary</value>
</property>
<!-- 兼容配置,先跳过 -->
<property>
<name>dfs.client.datanode-restart.timeout</name>
<value>30s</value>
</property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
YARN配置文件------------------------------------------------------------
vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 从官方文档里拿过来的 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 取消虚拟内存的限制 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
MapReduce配置文件------------------------------------------------------
vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在集群上分发配置好的hadoop (发送的整个hadoop安装目录)
xsync /opt/module/hadoop-3.1.3
配置群起群停
配置workers文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
同步workers文件到其他节点
cd /opt/module/hadoop-3.1.3/etc/hadoop
xsync workers
xsync /etc/profile.d/my_env.sh (分发环境变量配置文件)
启动hadoop集群,验证hadoop是否安装好了
如果集群是第一次启动,需要在hadoop102节点格式化NameNode
(注意之前配置的data目录不需要自己创建)
(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
hadoop102上执行
hdfs namenode -format
单点启动
启动HDFS
1)在hadoop102 启动namenode
hdfs --daemon start namenode
2)在hadoop104 启动secondarynamenode
hdfs --daemon start secondarynamenode
在hadoop102 103 104 启动 datanode
hdfs --daemon start datanode
3) 启动Yarn
在hadoop103启动 resourcemanager
yarn --daemon start resourcemanager
在hadoop102 103 104 启动nodemanager
yarn --daemon start nodemanager
至此,hdfs集群基本配置完毕
群起hadoop集群
启动HDFS(hadoop102上执行)
start-dfs.sh
启动YARN(hadoop103上执行)
start-yarn.sh
集群启动/停止方式总结
分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
分别启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
测试集群:
创建目录:hadoop fs -mkdir -p /user/liushuo/input
上传文件:hadoop fs -put $HADOOP_HOME/wcinput/wc.input /user/liushuo/input
(/user/liushuo/input是hdfs上的目录)
文件在hdfs集群上,存储在linux的目录为/opt/module/hadoop-3.1.3/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
配置历史服务器
cd $HADOOP_HOME/etc/hadoop
vim mapred-site.xml
添加如下配置
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
在hadoop102启动历史服务器
mapred --daemon start historyserver
查看JobHistory
http://hadoop102:19888/jobhistory
配置日志的聚集
应用运行完成以后,将程序运行日志信息上传到HDFS系统上
开启日志聚集功能,需要重新启动NodeManager 、ResourceManager 和 HistoryManager。
开启日志聚集功能
配置yarn-site.xml
cd $HADOOP_HOME/etc/hadoop
vim yarn-site.xml
增加如下配置
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
关闭NodeManager 、ResourceManager和HistoryServer
在103上执行: stop-yarn.sh
在102上执行: mapred --daemon stop historyserver
启动NodeManager 、ResourceManager和HistoryServer
在103上执行:start-yarn.sh
在102上执行:mapred --daemon start historyserver
集群时间同步
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步
时间服务器配置(必须root用户)
在所有节点关闭ntp服务和自启动(在三台节点上分别执行一下命令)
sudo systemctl stop ntpd
sudo systemctl disable ntpd
在hadoop102上修改ntp配置文件(hadoop102为时间服务器)
sudo vim /etc/ntp.conf
修改内容如下
(a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
改为(去掉注释#)
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
(b)修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
改为(全部注释掉)
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
(c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
修改/etc/sysconfig/ntpd 文件
sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
重新启动ntpd服务
sudo systemctl start ntpd
设置ntpd服务开机启动
sudo systemctl enable ntpd
其他节点(hadoop103 hadoop104节点)执行命令(切换成root用户)
在其他机器配置1分钟与时间服务器同步一次
crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
HDFS服务全部安装完成,启动hdfs相关服务
HADOOP102: start-dfs.sh/stop-dfs.sh mapred --daemon start historyserver/mapred --daemon stop historyserver
HADOOP103: start-yarn.sh/stop-yarn.sh
HADOOP104:
使用start-dfs.sh启动集群出现以下问题:
localhost: mv: 无法将"/opt/module/hadoop-3.1.3/logs/hadoop-liushuo-datanode-hadoop102.out.2" 移动至"/opt/module/hadoop-3.1.3/logs/hadoop-liushuo-datanode-hadoop102.out.3": 没有那个文件或目录
localhost: mv: 无法获取"/opt/module/hadoop-3.1.3/logs/hadoop-liushuo-datanode-hadoop102.out.1" 的文件状态(stat): 没有那个文件或目录
localhost: mv: 无法获取"/opt/module/hadoop-3.1.3/logs/hadoop-liushuo-datanode-hadoop102.out" 的文件状态(stat): 没有那个文件或目录
删除/opt/module/hadoop-3.1.3/etc/hadoop下的workers的localhost即可
记得保证集群的机器的
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
配置文件的一致性
解决web页面中操作没有权限问题
hadoop默认情况下开启了权限检查,且默认使用dir.who作为http访问的静态用户,因此可通过关闭权限检查或者配置http访问的静态用户为atguigu,二选一即可.
在core-site.xml中修改http访问的静态用户为liushuo
hadoop.http.staticuser.user
liushuo
在hdfs-site.xml中关闭权限检查
dfs.permissions.enabled
false