1. 环境安装

https://hadoop.apache.org/docs/stable/ 官方文档

2. 虚拟机安装前置

  1. sudo yum install -y epel-release #额外软件源
  2. sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git wget #安装 psmisc工具包 nc工具包 net-tools工具包 rsync 远程同步 vim编辑器 lrzsz上传下载 ntp时间同步

3. 修改静态地址

  1. sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
  2. #如手写可以 ctrl+alt+tab 补全

配置为符合的 记得改UUID和Mac地址

  1. DEVICE=ens33
  2. TYPE=Ethernet
  3. ONBOOT=yes
  4. BOOTPROTO=static
  5. NAME="ens33"
  6. IPADDR=192.168.1.101
  7. PREFIX=24
  8. GATEWAY=192.168.1.2
  9. DNS1=192.168.1.2
  1. service network restart

4. 修改主机名

  1. sudo hostnamectl --static set-hostname hadoop102

5. 修改hosts

  1. sudo vim /etc/hosts
  1. 192.168.1.100 hadoop100
  2. 192.168.1.101 hadoop101
  3. 192.168.1.102 hadoop102
  4. 192.168.1.103 hadoop103
  5. 192.168.1.104 hadoop104
  6. 192.168.1.105 hadoop105
  7. 192.168.1.106 hadoop106
  8. 192.168.1.107 hadoop107
  9. 192.168.1.108 hadoop108

物理机也改host

6. 关闭防火墙

  1. sudo systemctl stop firewalld
  2. sudo systemctl disable firewalld

7. 创建用户

  1. sudo useradd atguigu
  2. sudo passwd atguigu
  3. reboot

8. 修改atguigu权限

  1. visudo
  1. #第91行
  2. ## Allow root to run any commands anywhere
  3. root ALL=(ALL) ALL
  4. atguigu ALL=(ALL) ALL

创建opt下的存放目录

  1. cd /opt
  2. sudo mkdir module
  3. sudo mkdir software
  4. sudo chown atguigu:atguigu /opt/module /opt/software

9. 安装java

先卸载

  1. rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

解压

  1. cd /opt/software/
  2. tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

配置环境变量

  1. sudo vim /etc/profile.d/my_env.sh
  1. #JAVA_HOME
  2. #yum 为/usr/lib/jvm/java
  3. export JAVA_HOME=/opt/module/jdk1.8.0_212
  4. export PATH=$PATH:$JAVA_HOME/bin

更新环境变量

  1. source /etc/profile
  2. java -version

10. 安装hadoop

解压

  1. tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

配置环境变量

  1. sudo vim /etc/profile.d/my_env.sh
  1. ##HADOOP_HOME
  2. export HADOOP_HOME=/opt/module/hadoop-3.1.3
  3. export PATH=$PATH:$HADOOP_HOME/bin
  4. export PATH=$PATH:$HADOOP_HOME/sbin

更新

  1. source /etc/profile
  2. hadoop version

11. SSH免密登陆

生成密钥 全部回车 为空即可

  1. ssh-keygen -t rsa

发送密钥 给另外一台主机

  1. ssh-copy-id hadoop102
  2. ssh-copy-id hadoop103
  3. ssh-copy-id hadoop104

默认存储在 /home/用户/.ssh文件下

注意

还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;

还需要在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

11.1. xsync 脚本

安装

  1. yum install -y rsync

创建xsync脚本

  1. cd /home/atguigu
  2. vim xsync
  1. #!/bin/bash
  2. #1. 判断参数个数
  3. if [ $# -lt 1 ]
  4. then
  5. echo Not Enough Arguement!
  6. exit;
  7. fi
  8. #2. 遍历集群所有机器
  9. for host in hadoop102 hadoop103 hadoop104
  10. do
  11. echo ==================== $host ====================
  12. #3. 遍历所有目录,挨个发送
  13. for file in $@
  14. do
  15. #4 判断文件是否存在
  16. if [ -e $file ]
  17. then
  18. #5. 获取父目录
  19. pdir=$(cd -P $(dirname $file); pwd)
  20. #6. 获取当前文件的名称
  21. fname=$(basename $file)
  22. ssh $host "mkdir -p $pdir"
  23. rsync -av $pdir/$fname $host:$pdir
  24. else
  25. echo $file does not exists!
  26. fi
  27. done
  28. done
  1. chmod +x xsync
  2. sudo mv xsync /bin/ #将脚本移动到/bin中,以便全局调用

https://rsync.samba.org/

https://vault.centos.org/6.5/os/x86_64/

安装包安装

  1. wget https://vault.centos.org/6.5/os/x86_64/Packages/rsync-3.0.6-9.el6_4.1.x86_64.rpm
  2. rpm -ivh rsync-3.0.6-9.el6_4.1.x86_64.rpm

11.2. 复制ssh免密key

  1. cd /home/atguigu
  2. xsync .ssh

11.3. 同步环境

同步环境变量

  1. sudo xsync /etc/profile.d/my_env.sh

同步软件

  1. cd /
  2. sxsync opt

12. hadoop配置文件

  1. cd /opt/module/hadoop-3.1.3/etc/hadoop

12.1. 配置core-site.xml

  1. vim core-site.xml

<configuration>标签中追加

  1. <property>
  2. <name>fs.defaultFS</name>
  3. <!-- 配置hdfs默认的地址 -->
  4. <value>hdfs://hadoop102:8020</value>
  5. </property>
  6. <property>
  7. <!-- 配置hadoop临时存放路径-->
  8. <name>hadoop.tmp.dir</name>
  9. <value>/opt/module/hadoop-3.1.3/data</value>
  10. </property>
  11. <property>
  12. <!-- 兼容性配置hive -->
  13. <name>hadoop.proxyuser.atguigu.hosts</name>
  14. <value>*</value>
  15. </property>
  16. <property>
  17. <name>hadoop.proxyuser.atguigu.groups</name>
  18. <value>*</value>
  19. </property>
  20. <property>
  21. <name>hadoop.http.staticuser.user</name>
  22. <value>atguigu</value>
  23. </property>

12.2. 配置hdfs-site.xml

  1. vim hdfs-site.xml

同样在<configuration>标签中追加

  1. <property>
  2. <!-- 2nn的地址 -->
  3. <name>dfs.namenode.secondary.http-address</name>
  4. <value>hadoop104:9868</value>
  5. </property>

12.3. 配置yarn-site.xml

  1. vim yarn-site.xml

同样在<configuration>标签中追加

  1. <property>
  2. <!--设置NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可运行MapReduce程序-->
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <property>
  7. <name>yarn.resourcemanager.hostname</name>
  8. <value>hadoop103</value>
  9. </property>
  10. <property>
  11. <name>yarn.nodemanager.env-whitelist</name>
  12. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  13. </property>
  14. <!--设定单个容器可以申领到的最小内存资源-->
  15. <property>
  16. <name>yarn.scheduler.minimum-allocation-mb</name>
  17. <value>2048</value>
  18. </property>
  19. <property>
  20. <name>yarn.scheduler.maximum-allocation-mb</name>
  21. <value>4096</value>
  22. </property>
  23. <!--设定物理节点有4G内存加入资源池-->
  24. <property>
  25. <name>yarn.nodemanager.resource.memory-mb</name>
  26. <value>4096</value>
  27. </property>
  28. <property>
  29. <name>yarn.nodemanager.pmem-check-enabled</name>
  30. <value>false</value>
  31. </property>
  32. <property>
  33. <name>yarn.nodemanager.vmem-check-enabled</name>
  34. <value>false</value>
  35. </property>

12.4. 配置mapred-site.xml

  1. vim mapred-site.xml

同样在<configuration>标签中追加

  1. <!--Hadoop对MapReduce运行框架一共提供了3种实现,在mapred-site.xml中通过"mapreduce.framework.name"这个属性来设置为"classic"、"yarn"或者"local"-->
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>

12.5. 配置workers

  1. vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

删除localhost 文件中添加的内容结尾不允许有空格,文件中不允许有空行。

  1. hadoop102
  2. hadoop103
  3. hadoop104

12.6. 同步

  1. cd ..
  2. xsync hadoop

13. 启动集群

格式化hdfs

  1. hdfs namenode -format #在节点机子上

启动集群

  1. start-dfs.sh

如果报java未找到 修改hadoop.env.sh文件

  1. vim /opt/module/hadoop-3.1.3/etc/hadoop/hadoop.env.sh

修改JAVA_HOME为 并同步

  1. export JAVA_HOME=/usr/lib/jvm/java

02. 环境安装 - 图1

显示这样启动成功

13.1. dfs启动

在103中启动

  1. start-yarn.sh

13.2. JPS

  1. JPS

14. 配置历史服务器

关闭dfs和yarn

  1. stop-yarn.sh #103
  2. stop-dfs.sh #102

14.1. 配置mapred-site.xml

  1. vi mapred-site.xml

同样在<configuration>标签中追加

  1. <!-- 历史服务器端地址 -->
  2. <property>
  3. <name>mapreduce.jobhistory.address</name>
  4. <value>hadoop102:10020</value>
  5. </property>
  6. <!-- 历史服务器web端地址 -->
  7. <property>
  8. <name>mapreduce.jobhistory.webapp.address</name>
  9. <value>hadoop102:19888</value>
  10. </property>

15. 配置日志聚集

15.1. 配置 yarn-site.xml

  1. vim yarn-site.xml

同样在<configuration>标签中追加

  1. <property>
  2. <!-- 开启日志聚集-->
  3. <name>yarn.log-aggregation-enable</name>
  4. <value>true</value>
  5. </property>
  6. <property>
  7. <!-- 日志服务器-->
  8. <name>yarn.log.server.url</name>
  9. <value>http://${yarn.timeline-service.webapp.address}/applicationhistory/logs</value>
  10. </property>
  11. <property>
  12. <!-- 日志保存时间-->
  13. <name>yarn.log-aggregation.retain-seconds</name>
  14. <value>604800</value>
  15. </property>
  16. <property>
  17. <name>yarn.timeline-service.enabled</name>
  18. <value>true</value>
  19. </property>
  20. <property>
  21. <name>yarn.timeline-service.hostname</name>
  22. <value>${yarn.resourcemanager.hostname}</value>
  23. </property>
  24. <property>
  25. <name>yarn.timeline-service.http-cross-origin.enabled</name>
  26. <value>true</value>
  27. </property>
  28. <property>
  29. <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
  30. <value>true</value>
  31. </property>

16. 配置完成重新同步 并启动

  1. cd ..
  2. xsync hadoop/

重新启动

  1. start-dfs.sh #102
  2. start-yarn.sh #103
  3. mapred --daemon start historyserver #102 启动历史服务器

配置完成后不要同步整个hadoop文件夹 只需要etc配置文件夹 千万不要同步data文件夹

如想修改data路径

  1. vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml #hadoop.data.dir

如果想重新按配置开 删除掉logs文件夹里的东西 重新格式化HDFS 再启动

17. 集群时间同步

在所有节点关闭ntp服务和自启动

建议root用户下操作

  1. su -
  2. sudo systemctl stop ntpd
  3. sudo systemctl disable ntpd

17.1. 修改ntp配置文件

  1. vim /etc/ntp.conf
  1. restrict 192.168.130.2 mask 255.255.255.0 nomodify notrap #去掉#号修改即可
  2. #加上井号
  3. #server 0.centos.pool.ntp.org iburst
  4. #server 1.centos.pool.ntp.org iburst
  5. #server 2.centos.pool.ntp.org iburst
  6. #server 3.centos.pool.ntp.org iburst
  7. #添加
  8. server 127.127.1.0
  9. fudge 127.127.1.0 stratum 10

17.2. 修改ntpd文件

  1. vim /etc/sysconfig/ntpd
  1. #追加
  2. SYNC_HWCLOCK=yes
  1. #重启服务
  2. systemctl start ntpd
  3. #开机启动
  4. systemctl enable ntpd

以上修改文件在102进行

17.3. 其他机器配置

切换root用户 进行

  1. su -
  2. crontab -e
  1. #追加
  2. */1 * * * * /usr/sbin/ntpdate hadoop102
  1. date #查看当前时间是否同步

18. 常用端口

18.1. hadopp2.x和3.x端口变化

hadoop2.x Hadoop3.x
访问HDFS端口 50070 9870
访问MR执行情况端口 8088 8088
历史服务器 19888 19888
客户端访问集群端口 9000 8020

02. 环境安装 - 图2

18.2. HDFS

组件 节点 端口 配置 用途说明
HDFS Namenode 9870 dfs.namenode.http-address http服务的端口
HDFS NameNode 9871 dfs.namenode.https-address https服务的端口
HDFS NameNode 9820 fs.defaultFS 接收Client连接的RPC端口,用于获取文件系统metadata信息。
HDFS DataNode 9866 dfs.datanode.address datanode服务端口,用于数据传输
HDFS DataNode 9864 dfs.datanode.http.address http服务的端口
HDFS DataNode 9865 dfs.datanode.https.address https服务的端口
HDFS DataNode 9867 dfs.datanode.ipc.address ipc服务的端口
HDFS journalnode 8485 dfs.journalnode.rpc-address RPC服务
HDFS journalnode 8480 dfs.journalnode.http-address HTTP服务

18.3. Yarn

组件 节点 端口 配置 用途说明
YARN ResourceManager 8032 yarn.resourcemanager.address RM的applications manager(ASM)端口
YARN ResourceManager 8030 yarn.resourcemanager.scheduler.address scheduler组件的IPC端口
YARN ResourceManager 8031 yarn.resourcemanager.resource-tracker.address IPC
YARN ResourceManager 8033 yarn.resourcemanager.admin.address IPC
YARN ResourceManager 8088 yarn.resourcemanager.webapp.address http服务端口
YARN NodeManager 8040 yarn.nodemanager.localizer.address localizer IPC
YARN NodeManager 8042 yarn.nodemanager.webapp.address http服务端口
YARN NodeManager 8041 yarn.nodemanager.address NM中container manager的端口
YARN JobHistory Server 10020 mapreduce.jobhistory.address IPC
YARN JobHistory Server 19888 mapreduce.jobhistory.webapp.address http服务端口

18.4. Hbase

组件 节点 端口 配置 用途说明
HBase Master 60000 hbase.master.port IPC
HBase Master 60010 hbase.master.info.port http服务端口
HBase RegionServer 60020 hbase.regionserver.port IPC
HBase RegionServer 60030 hbase.regionserver.info.port http服务端口
HBase HQuorumPeer 2181 hbase.zookeeper.property.clientPort HBase-managed ZK mode,使用独立的ZooKeeper集群则不会启用该端口。
HBase HQuorumPeer 2888 hbase.zookeeper.peerport HBase-managed ZK mode,使用独立的ZooKeeper集群则不会启用该端口。
HBase HQuorumPeer 3888 hbase.zookeeper.leaderport HBase-managed ZK mode,使用独立的ZooKeeper集群则不会启用该端口。

18.5. Hive

组件 节点 端口 配置 用途说明
Hive Metastore 9083 /etc/default/hive-metastore中export PORT=<port>来更新默认端口
Hive HiveServer 10000 /etc/hive/conf/hive-env.sh中export HIVE_SERVER2_THRIFT_PORT=<port>来更新默认端口

18.6. Zookeeper

组件 节点 端口 配置 用途说明
ZooKeeper Server 2181 /etc/zookeeper/conf/zoo.cfg中clientPort=<port> 对客户端提供服务的端口
ZooKeeper Server 2888 /etc/zookeeper/conf/zoo.cfg中server.x=[hostname]:nnnnn[:nnnnn],标蓝部分 follower用来连接到leader,只在leader上监听该端口。
ZooKeeper Server 3888 /etc/zookeeper/conf/zoo.cfg中server.x=[hostname]:nnnnn[:nnnnn],标蓝部分 用于leader选举的。只在electionAlg是1,2或3(默认)时需要。