提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、aliyun服务器配置
1、阿里云买服务器,学习使用抢占式实例即可。
选择地址,cpu核数2核、内存大小8g、实例数量3
选择系统centOS 7.5,盘大小。
带宽拉满,这个是按流量计费的。
密码选择自定义,实例名称和主机名自定义。
2、安装一些工具包
#安装工具包
yum install -y net-tools
yum install -y epel-release
yum install -y vim
#关闭防火墙,便于机器之间访问
systemctl stop firewalld
systemctl disable firewalld.service
#添加用户
useradd hz
passwd hz
#设置用户权限
vim /etc/sudoers
hz ALL=(ALL) NOPASSWD: ALL
#创建目录
mkdir /opt/software
#设置目录权限
chown hz:hz /opt/software
3、机器映射
#阿里云服务器
sudo vim /etc/hosts
#将地址和对应的机器名写进去,机器内部用私有地址即可
hadoop102 192.168.0.100
...
#本地电脑也需要配置对应的映射,方便后续hadoop地址访问,本地机器访问需要公网地址
C:\Windows\System32\drivers\etc\hosts
4、机器间免密配置
#生成密钥对
ssh-keygen –t rsa –P ''
#把公钥追加到授权的key里面去
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#修改权限
chmod 600 ~/.ssh/authorized_keys
#用root用户修改ssh配置文件
vi /etc/ssh/sshd_config
把文件中的下面几条信息的注释去掉:
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
#重启服务
service sshd restart
#把公钥复制到其他机器上
scp ~/.ssh/id_rsa.pub 地址:~/
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm -rf ~/id_rsa.pub
#以上四部一步完成
ssh-copy-id -i ~/.ssh/id_rsa.pub 地址
5、一些脚本
1、集群分发脚本
cd /home/hz/bin
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
==================分割线====================
#权限
chmod +x xsync
2、xcall集群端口查询
cd /home/hz/bin
vim xcall.sh
=========================分割线=======================
#! /bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo --------- $i ----------
ssh $i "$*"
done
=========================分割线=======================
#权限设置
chmod 777 xcall.sh
#启动脚本
xcall.sh jps
二、JDK安装
1.引入jar包
2、解压并配置环境变量
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
#改名
mv jdk1.8.0_212/ jdk
#配置环境变量
sudo vim /etc/profile.d/my_env.sh
================添加====================
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk
export PATH=$PATH:$JAVA_HOME/bin
========================================
#让环境变量生效
source /etc/profile.d/my_env.sh
#测试
java -version
#分发jdk
xsync /opt/module/jdk
#分发环境变量
sudo /home/hz/bin/xsync /etc/profile.d/my_env.sh
#在其他两台机器上也需要执行source命令
三、Hadoop安装及配置
1、hadoop102上安装hadoop
Hadoop 下载地址:Index of /dist/hadoop/common/hadoop-3.1.3
1)上传包到hadoop102上
2)解压
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
mv hadoop3.1.3 hadoop
3) 将hadoop添加到环境变量
#打开my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
=======================================分割线============================
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
=======================================分割线============================
#是环境变量生效
source /etc/profile
#检查
hadoop version
4) hadoop不能使用,重启虚拟机
sudo reboot
5) 重要目录
(1)bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
(3)lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
(4)sbin 目录:存放启动或停止 Hadoop 相关服务的脚本
(5)share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例
2、本地运行模式(官方WordCount案例)
1)、在hadoop目录下创建一个wordCountInput文件
mkdir wordCountInput
#进入文件夹
cd wordCountInput
# 编辑一个word.txt 文件,内容随便写一些
vim word.txt
2)、返回hadoop目录
3)、执行官方的jar包
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wordCountInput wcoutput
4)、查看结果cat wcoutput/part-r-00000
完全分布式运行模式
1)、配置集群
将hadoop分发到其他两台服务器
xsync /opt/module/hadoop
#环境变量
sudo xsync /etc/profile.d/my_env.sh
#使环境变量生效
source /etc/profile.d/my_env.sh
2) 、参数设置
进入/opt/module/hadoop/etc/hadoop/目录下
vim core-site.xml
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 hz-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hz</value>
</property>
</configuration>
vim hdfs-site.xml
<configuration>
<!-- NameNode web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- SecondaryNameNode web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<!--NameNode的工作线程池,处理DataNode的并发心跳和客户端的并发元数据操作20*ln(clusterSize)-->
<property>
<name>dfs.namenode.handler.count</name>
<value>22</value>
</property>
</configuration>
vim yarin-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!--RM暴露AppMaster的地址,用于申请资源,释放资源-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop103:8030</value>
</property>
<!--RM暴露给NodeManager的地址,汇报心跳、领取任务-->
<property>
<name>yarn.nodemanager.resource-tracker.address</name>
<value>hadoop103:8031</value>
</property>
<property>
<name>yarn.nodemanager.memory-mb</name>
<value>6GB</value>
</property>
<property>
<name>yarn.nodemanager.cpu-vcores</name>
<value>1</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.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--历史服务器端地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
配置workers
cd $HADOOP_HOME/etc/hadoop
在workers里面添加下面三台机器,注意不要有空格和换行
hadoop102
hadoop103
hadoop104
============================分割线===============================
分发配置
xsync /opt/module/hadoop/etc/hadoop
启动服务
#初始化namenode
如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
(注意:格式化 NameNode,会产生新的集群 id,
导致 NameNode 和 DataNode 的集群 id 不一致,
集群找不到已往数据。如果集群在运行过程中报错,
需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,
并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)
hdfs namenode -format
#hadoop102上启动namenode和datanode
cd /opt/module/hadoop/sbin
start-dfs.sh
#hadoop103上启动ResourceManager和NodeManager
cd /opt/module/hadoop/sbin
start-yarn.sh
#启动历史服务器
mapred --daemon start historyserver