文章目录
- 简介
- 内容&流程
- 一、模板虚拟机准备
- 安装模板虚拟机
- 1,选择 - 自定义(高级)
- 2,稍后安装操作系统(也可以选择直接安装,没有太大区别)
- 3,虚拟机名称只作标识该虚拟机的作用,自定义即可
- 4,处理器数量1,内核数量2
- 5, 内存4G & 硬盘50G
- 6,自定义硬件
- 7,开启此虚拟机,选择install centos 7(对应选项呈白色)
- 8,语言 - 中文 - 简体中文
- 9,日期和时间:亚洲-上海
- 10,软件选择:只选择GNOME桌面
- 11,安装位置:自动配置分区
- 12,网络和主机名
- ☭问题1:打开网络后出现DNS1或者无法连接网络
- 13, 开始安装
- 14, 设置ROOT密码
- 15, 创建用户
- 模板虚拟机环境准备
- 1, 配置静态网络
- 2,设置hostname
- ☭问题2:主机名变为bogon如何解决?
- 3,SSH免密登录
- 4,安装工具包
- ☭问题3:报错14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误”
- 5,关闭防火墙,并设置关闭防火墙开机自启
- 6,修改/etc/sudoers文件,使hadoop用户(普通用户)具有 root 权限,方便后期加 sudo 执行 root 权限的命令
- 7,在/opt 目录下创建 module、software 文件夹
- 8,卸载虚拟机自带JDK并重启虚拟机
- 二、克隆虚拟机准备
- 1,修改克隆机 IP
- 2,修改克隆机主机名
- 3,修改/etc/hosts文件
- 4,重启虚拟机
- 5,修改 windows 的主机映射文件
- 6,在hadoop102上安装JDK
- ☭问题4:执行 source /etc/profile命令时,报错:bash: #: 未找到命令
- 7,在hadoop102安装Hadoop
- 三、完全分布式环境部署
- 1,本地测试
- 2,编写集群分发脚本 xsync
- 3,ssh免密登录
- 4,集群配置
- 5,群起集群
- 6,配置历史服务器
- 7,配置日志的聚集
- 8,编写 Hadoop 集群常用脚本
- 9,时间同步
- 四、安装ZooKeeper、HBase、MAVEN和IDEA
- ZooKeeper完全分布式部署
- 1,解压安装
- 2,配置服务器编号
- 3,配置 zoo.cfg 文件
- ☭问题5:启动ZooKeeper报错 mkdir: 无法创建目录".": 权限不够 ?
- ☭问题6:Zookeeper启动显示成功,zkServer.sh status报错?
- 4,集群操作
- HBase安装
- 1,Zookeeper 正常部署
- 2,Hadoop 正常部署
- 3,HBase 的解压
- 4,HBase 的配置文件
- ☭问题7:HBase启动警告:Java HotSpot™ 64-Bit Server VM warning
- 5,HBase 远程发送到其他集群
- 6,HBase 服务的启动
- ☭问题8:HBase启动报错 错误:找不到或无法加载主类 org.jruby.Main
- 安装MAVEN & IDEA
- 1,解压安装
- 2,设置环境变量
- 3,测试 MAVEN
- 4,修改MAVEN配置文件,使用阿里的镜像地址
- 5,运行IDEA
- 参考资料
- 资源分享
简介
- 保姆级入门教程:图片讲解 + 各种问题解决方案
- 集群服务器:hadoop102、hadoop103和hadoop104
- 虚拟机版本:CentOS7-1804
- 资源分享处(文章最后)提供CentOS7和Hadoop各组件压缩包(也可以自行下载,要注意版本兼容的问题),有需要自取~
内容&流程
1, 模板虚拟机准备
2, 克隆三台虚拟机,作为完全分布式集群
3, Hadoop完全分布式环境搭建
4, ZooKeeper & HBase & Maven & IDEA安装
一、模板虚拟机准备
安装模板虚拟机
注:下方未出现的步骤,选择默认选项即可
1,选择 - 自定义(高级)
2,稍后安装操作系统(也可以选择直接安装,没有太大区别)
3,虚拟机名称只作标识该虚拟机的作用,自定义即可
4,处理器数量1,内核数量2
5, 内存4G & 硬盘50G
(此虚拟机只为演示Hadoop完全分布式环境搭建过程所用,4G内存基本够用)
硬盘50G
(安装内容包含JDK、Hadoop、ZooKeeper、HBase、Maven和IDEA,50G够用)
6,自定义硬件
6.1 选择ISO映像文件
选择稍后安装的要在这一步选择自定义硬件,添加ISO映像文件
6.2 USB兼容性 - USB 3.1
7,开启此虚拟机,选择install centos 7(对应选项呈白色)
8,语言 - 中文 - 简体中文
(在操作体验上,与选择英语差别不大,建议英语不太好的童靴选择中文)
进入安装信息摘要界面
9,日期和时间:亚洲-上海
10,软件选择:只选择GNOME桌面
11,安装位置:自动配置分区
选择自动配置分区即可
(若想要手动分区,则点击 我要配置分区 - 完成,就会出现手动分区的界面)
12,网络和主机名
12.1 选择配置
12.2 查看个人虚拟机的相关信息
-
虚拟机 - 编辑选项卡 - 虚拟网络编辑器
-
选择NAT模式
-
NAT设置 - 查看子网掩码和网关
-
DHCP设置 - 查看IP地址范围
- 之后在配置静态IP地址时,所有的IP地址都必须在这个范围之内
-
回到配置界面 - 选择IPv4配置 - 点击 Add
-
根据前面的步骤,地址填IP地址范围内的地址,子网掩码和网关照填即可
-
附加DNS服务器:填入与网关IP相同的地址
-
点击保存 - 回到配置界面 - 打开网络
☭问题1:打开网络后出现DNS1或者无法连接网络
出现DNS1:检查网关地址是否正确
无法连接网络:检查IP地址是否在起始和终止的IP地址范围之内
- 点击完成
13, 开始安装
将出现以下界面:
14, 设置ROOT密码
建议密码不要太复杂
15, 创建用户
- 创建一个普通用户,名称可自定义(我创建的用户名称是hadoop,之后用此名称指代普通用户)
- 目的: 在搭建项目的过程中,所有的项目有关的操作都由普通用户来执行,以此与超级用户(root用户)作区别,来维护系统的安全性(防止一些涉及到系统内核的操作被执行)。
- 建议密码不要太复杂
模板虚拟机环境准备
1, 配置静态网络
Q: 为什么使用静态IP地址?
A: 在使用虚拟机的时候,默认情况下使用的DHCP协议分配的动态IP地址,使得每次打开虚拟机后当前的IP地址都会发生变化,这样不方便管理。为了能够给当前虚拟机设置一个静态IP地址,方便后期使用XShell连接工具进行连接,以及配置各种服务。所以,我们需要为虚拟机设置一个静态IP地址。
1.1 打开终端,查看网卡名称 - 我的网卡名称为ens33,如下图所示
[root@bogon ~]$ ip addr
1.2 修改网卡配置文件(记得后面要改成自己的网卡名称)
[root@bogon ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 修改以下选项
BOOTPROTO='dhcp' -> 'static' ONBOOT='no' -> 'yes'
- 如果在前面安装过程中,设置 网络和主机名 没有出错,那下列选项应该没有问题
IPADDR='要设置的IP地址' PREFIX='子网掩码' GATEWAY='网关IP' DNS1='网关IP'
1.3 重启网络
[root@bogon ~]$ service network restart
2,设置hostname
- 设置主机名很重要,我设置的模板机的主机名为hadoop100,之后集群服务器中的主机名为hadoop102、hadoop103和hadoop104
- 下面的命令按自己的主机名来
[root@bogon ~]$ hostnamectl set-hostname 主机名 例如:hostnamectl set-hostname hadoop100
2.1 查看hostname
[root@bogon ~]$ cat /etc/hostname hadoop100
2.2 编辑hosts文件
目的: 修改/etc/hosts 文件,该文件主要用于映射 IP 地址和域名之间的连接
[root@bogon ~]$ vi /etc/hosts
- 在第二行添加:原本第二行如果有内容删除即可;
- 之后保存退出
IP地址 主机名 例如: 我设置的IP地址为xxx.xxx.xxx.130,那么我要添加的内容就是 xxx.xxx.xxx.130 hadoop100
☭问题2:主机名变为bogon如何解决?
# 执行su命令 [root@bogon ~]$ su [root@localhost ~]$
3,SSH免密登录
# hadoop 普通用户 [root@localhost ~]$ su hadoop # 第一次配置免密登录,执行下面这个命令后点三次回车即可 [hadoop@localhost root]$ ssh-keygen [hadoop@localhost root]$ ssh-copy-id localhost [hadoop@localhost root]$ ssh localhost Last login: Web Feb 8 21:43:26 2023 [hadoop@localhost ~]$
4,安装工具包
[root@localhost ~]$ yum install -y epel-release ... 已安装: epel-release.noarch 0:7-11 完毕! [root@localhost ~]$ yum install -y net-tools [root@localhost ~]$ yum install -y vim
☭问题3:报错14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误”
CentOS7下报错14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误”-解决方法
5,关闭防火墙,并设置关闭防火墙开机自启
[root@localhost ~]$ systemctl stop firewalld [root@localhost ~]$ systemctl disable firewalld.service Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. # 查看防火墙是否已关闭 [root@localhost ~]$ systemctl list-unit-files |grep firewalld firewalld.service disabled
6,修改/etc/sudoers文件,使hadoop用户(普通用户)具有 root 权限,方便后期加 sudo 执行 root 权限的命令
[root@localhost ~]$ vim /etc/sudoers
在%wheel 这行下面添加一行,其他为文件本身内容,不要改动
## Allow root to run any commands anywhere root ALL=(ALL) ALL ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL hadoop ALL=(ALL) NOPASSWD:ALL
7,在/opt 目录下创建 module、software 文件夹
7.1 module文件夹存放解压后的文件,software文件夹存放待解压的压缩包
[root@localhost ~]$ mkdir /opt/module /opt/software
7.2 修改两个目录的所属组和所有者均为hadoop用户
[root@localhost ~]$ chown -R hadoop:hadoop /opt/module [root@localhost ~]$ chown -R hadoop:hadoop /opt/software
7.3 查看 module、software 文件夹的所有者和所属组
[root@localhost ~]$ cd /opt/ [root@localhost opt]$ ll 总用量 0 drwxr-xr-x. 2 hadoop hadoop 6 2月 8 21:53 module drwxr-xr-x. 2 root root 6 9月 7 2017 rh drwxr-xr-x. 2 hadoop hadoop 6 2月 8 12:53 software
8,卸载虚拟机自带JDK并重启虚拟机
[root@localhost opt]$ rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps [root@localhost opt]$ reboot
8.1 查看JDK版本(看是否卸载干净)
[root@hadoop100 ~]$ java -version bash: java: 未找到命令...
二、克隆虚拟机准备
使用VMware自带的克隆功能,利用模板虚拟机克隆三台虚拟机:
主机名分别为hadoop102、hadoop103和hadoop104
IP地址为xxx.xxx.xxx.132、xxx.xxx.xxx.133和xxx.xxx.xxx.134(根据自己虚拟机的IP地址范围配置,下面有具体配置过程)
注意:克隆时,要先关闭hadoop100
1,修改克隆机 IP
以下过程以hadoop102为例,三台虚拟机都需要做
1.1 修改网卡配置文件(记得后面要改成自己的网卡名称)
[root@hadoop100 ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 修改以下选项
- 附:Linux中为网卡生成UUID
UUID='原来的UUID' -> '新生成的UUID' IPADDR='原来的IP地址' -> '要设置的IP地址'
1.2 重启网络
[root@hadoop100 ~]$ service network restart
2,修改克隆机主机名
以下过程以hadoop102为例,三台虚拟机都需要做
[root@hadoop100 ~]$ vim /etc/hostname hadoop102
3,修改/etc/hosts文件
以下过程以hadoop102为例,三台虚拟机都需要做
[root@hadoop100 ~]$ vim /etc/hosts
3.1 添加如下内容
依然是IP地址要修改成你自己的:
尤其是hadoop102~104,对应的IP地址为你要设置的IP
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104 192.168.10.105 hadoop105 192.168.10.106 hadoop106 192.168.10.107 hadoop107 192.168.10.108 hadoop108
4,重启虚拟机
以下过程以hadoop102为例,三台虚拟机都需要做
[root@hadoop100 ~]$ reboot
4.1 重启之后,打开终端发现主机名已经修改成功
[root@hadoop102 ~]$
5,修改 windows 的主机映射文件
5.1 如果操作系统是window7,可以直接修改
- 进入C:\Windows\System32\drivers\etc 路径
- 打开hosts 文件并添加如下内容,然后保存
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104 192.168.10.105 hadoop105 192.168.10.106 hadoop106 192.168.10.107 hadoop107 192.168.10.108 hadoop108
5.2 如果操作系统是window10,先拷贝出来,修改保存以后,再覆盖即可
- 进入C:\Windows\System32\drivers\etc 路径
- 拷贝hosts 文件到桌面
- 打开桌面 hosts 文件并添加同上内容
- 将桌面 hosts 文件覆盖 C:\Windows\System32\drivers\etc 路径 hosts 文件
修改完毕后,就可以在windows环境下使用xshell连接虚拟机了,操作会方便很多哦~
附:XShell免费版的安装配置教程以及使用教程(超级详细、保姆级)
6,在hadoop102上安装JDK
6.1 首先确保虚拟机自带JDK卸载干净
[root@hadoop102 ~]$ java -version bash: java: 未找到命令...
6.2 解压JDK到/opt/module
- 提示1:xshell中可以使用rz命令将本地文件上传至虚拟机,或者建立共享文件夹也有同样效果。
- 提示2:文章末尾提供JDK8等各组件的安装包,需要自取~
- 进入/opt/software文件夹,查看压缩包名称
[root@hadoop102 ~]$ cd /opt/software [root@hadoop102 software]$ ls
- 解压JDK压缩包
[root@hadoop102 software]$ su hadoop [hadoop@hadoop102 software]$ sudo tar -zxvf jdk-8u211-linux-x64.tar.gz -C /opt/module
6.3 修改JDK安装包名称
[hadoop@hadoop102 software]$ cd ../module [hadoop@hadoop102 module]$ ls jdk1.8.0_211 [hadoop@hadoop102 module]$ mv jdk1.8.0_211 jdk [hadoop@hadoop102 module]$ ls jdk
6.4 配置 JDK 环境变量
[hadoop@hadoop102 module]$ sudo vim /etc/profile.d/my_env.sh
- 添加以下内容:
#JAVA_HOME export JAVA_HOME=/opt/module/jdk export PATH=$PATH:$JAVA_HOME/bin
- 刷新shell环境,让环境变量生效
[hadoop@hadoop102 module]$ source /etc/profile
- 查看JDK版本信息
[hadoop@hadoop102 module]$ java -version
☭问题4:执行 source /etc/profile命令时,报错:bash: #: 未找到命令
首先再仔细检查一下 /etc/profile.d/my_env.sh 文件,尤其是注释前面的 # 有没有省略,以及HOME目录有没有配错。
7,在hadoop102安装Hadoop
7.1 进入/opt/software文件夹,解压Hadoop到/opt/module
[hadoop@hadoop102 software]$ sudo tar -zxvf hadoop-2.6.0-cdh5.14.2.tar.gz -C /opt/module
7.2 修改Hadoop安装包名称
[hadoop@hadoop102 module]$ ls hadoop-2.6.0-cdh5.14.2 jdk [hadoop@hadoop102 module]$ mv hadoop-2.6.0-cdh5.14.2 hadoop [hadoop@hadoop102 module]$ ls hadoop jdk # 确保hadoop用户具有操作module目录下文件的权限 [hadoop@hadoop102 module]$ cd .. [hadoop@hadoop102 opt]$ chown -R hadoop:hadoop module
7.3 将 Hadoop 添加到环境变量
[hadoop@hadoop102 module]$ 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
- 刷新shell环境,让环境变量生效
[hadoop@hadoop102 module]$ source /etc/profile
- 查看Hadoop版本信息
[hadoop@hadoop102 module]$ hadoop version
三、完全分布式环境部署
1,本地测试
里面有些步骤与后续内容相关,尽量不要跳过
#创建hello.txt文件,用来测试hadoop自带的wordcount程序 [hadoop@hadoop102 module]$ mkdir /hadoop/wcinput [hadoop@hadoop102 module]$ cd /hadoop/wcinput [hadoop@hadoop102 wcinput]$ vim hello.txt
1.1 在hello.txt文件中填入任意内容即可,举例:
hello world hello java I'm MOSS
1.2 运行wordcount程序
注:在$HADOOP_HOME/share/hadoop/mapreduce/目录下找对应jar包
[hadoop@hadoop102 hadoop]$ pwd /opt/module/hadoop [hadoop@hadoop102 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount wcinput wcoutput [hadoop@hadoop102 hadoop]$ cat wcoutput/part-r-00000
2,编写集群分发脚本 xsync
2.1 执行以下命令同步jdk和hadoop文件到hadoop103和hadoop104,顺便测试scp和rsync命令
注意执行各命令的服务器
[hadoop@hadoop102 hadoop]$ scp -r /opt/module/jdk hadoop@hadoop103:/opt/module [hadoop@hadoop103 hadoop]$ scp -r hadoop@hadoop102:/opt/module/hadoop /opt/module/ [hadoop@hadoop103 hadoop]$ scp -r hadoop@hadoop102:/opt/module/* hadoop@hadoop104:/opt/module # 在hadoop103上删除wcinput目录,执行rsync同步命令后,hadoop103上wcinput目录恢复 [hadoop@hadoop103 hadoop]$ rm -rf wcinput/ [hadoop@hadoop102 opt]$ rsync -av hadoop/ hadoop@hadoop103:/opt/module/hadoop/
2.2 编写xsync脚本
- 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径):
[hadoop@hadoop102 opt]$ echo $PATH [hadoop@hadoop102 opt]$ cd /home/hadoop [hadoop@hadoop102 ~]$ mkdir bin
- 将/home/hadoop/bin目录添加到全局环境变量中
[hadoop@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
- 添加以下内容:
#XSYNC_HOME export XSYNC_HOME=/home/hadoop export PATH=$PATH:$XSYNC_HOME/bin
- 刷新shell环境,让环境变量生效
[hadoop@hadoop102 ~]$ source /etc/profile # 查看发现全局环境变量中已有/home/hadoop/bin目录 [hadoop@hadoop102 ~]$ echo $PATH
- 在/home/hadoop/bin目录下编写xsync脚本
[hadoop@hadoop102 ~]$ cd bin [hadoop@hadoop102 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
2.3 修改脚本 xsync 具有执行权限
[hadoop@hadoop102 bin]$ chmod +x xsync
2.4 测试脚本
[hadoop@hadoop102 bin]$ xsync /home/hadoop/bin
2.5 同步环境变量配置
注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。
[hadoop@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
2.6 让环境变量生效
[hadoop@hadoop103 bin]$ source /etc/profile [hadoop@hadoop104 bin]$ source /etc/profile
3,ssh免密登录
3.1 生成公钥和私钥
[hadoop@hadoop102 ~]$ cd /home/hadoop/.ssh [hadoop@hadoop102 .ssh]$ ssh-keygen -t rsa
3.2 将公钥拷贝到要免密登录的目标机器上
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop102 [hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103 [hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意:
- 还需要在 hadoop103 上采用 hadoop 账号配置一下无密登录到 hadoop102、hadoop103、 hadoop104 服务器上;
- 还需要在 hadoop104 上采用 hadoop 账号配置一下无密登录到 hadoop102、hadoop103、 hadoop104 服务器上;
- 还需要在 hadoop102 上采用 root 账号,配置一下无密登录到 hadoop102、hadoop103、hadoop104。
接下来就可以通过ssh 主机名命令免密登录到别的服务器了~
以下为测试:
[hadoop@hadoop102 .ssh]$ ssh hadoop103 Last login: Tue Feb 14 11:57:09 2023 from hadoop102 [hadoop@hadoop103 ~]$ pwd /home/hadoop [hadoop@hadoop103 ~]$ exit 登出 Connection to hadoop103 closed. [hadoop@hadoop102 .ssh]$
4,集群配置
4.1 集群部署规划
- 元数据节点、资源管理器和从元数据节点分别安装在三台服务器上
- 数据节点和节点管理器在三台服务器上均安装
4.2 配置集群
- 核心配置文件配置 core-site.xml
[hadoop@hadoop102 .ssh]$ cd $HADOOP_HOME/etc/hadoop [hadoop@hadoop102 hadoop]$ vim core-site.xml
- core-site.xml修改内容如下:
注意这个hadoop数据存储目录哦,如果没有指定的话,hadoop会在HOME目录下生成一个tmp目录,现在我们指定了,就变成 /opt/module/hadoop/data目录。
所以如果在进行hadoop的格式化之前要删除的tmp目录和logs目录,就变成了data目录和logs目录了。
附:如何重新格式化Hadoop文件系统
fs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop/data hadoop.http.staticuser.user hadoop - HDFS 配置文件-配置 hdfs-site.xml
[hadoop@hadoop102 hadoop]$ vim hdfs-site.xml
- hdfs-site.xml修改内容如下:
dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868 - YARN 配置文件-配置 yarn-site.xml
[hadoop@hadoop102 hadoop]$ vim yarn-site.xml
- yarn-site.xml修改内容如下:
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP RED_HOME - MapReduce 配置文件-配置 mapred-site.xml
[hadoop@hadoop102 hadoop]$ vim mapred-site.xml
- mapred-site.xml内容如下:
mapreduce.framework.name yarn 4.3 在集群上分发配置好的 Hadoop 配置文件
[hadoop@hadoop102 hadoop]$ xsync /opt/module/hadoop/etc/hadoop/
4.4 去103 和 104上查看文件分发情况
[hadoop@hadoop103 ~]$ cat /opt/module/hadoop/etc/hadoop/core-site.xml [hadoop@hadoop104 ~]$ cat /opt/module/hadoop/etc/hadoop/core-site.xml
5,群起集群
5.1 配置 slaves(hadoop3.0之后版本改为workers)
[hadoop@hadoop102 hadoop]$ vim /opt/module/hadoop/etc/hadoop/slaves
- 文件内容如下:(原本的内容要删除)
hadoop102 hadoop103 hadoop104
- 同步所有节点配置文件:
[hadoop@hadoop102 hadoop]$ xsync /opt/module/hadoop/etc
5.2 启动集群
注意:如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
[hadoop@hadoop102 hadoop]$ hdfs namenode -format
- 启动HDFS:
[hadoop@hadoop102 hadoop]$ start-dfs.sh
- 在配置了 ResourceManager 的节点(hadoop103)启动 YARN:
[hadoop@hadoop103 hadoop]$ start-yarn.sh
6,配置历史服务器
- 目的: 为了查看程序的历史运行情况
- Hadoop自带了一个历史服务器,可以通过历史服务器在web端查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息
- 所以修改mapreduce的配置文件以配置历史服务器
6.1 配置 mapred-site.xml
[hadoop@hadoop102 hadoop]$ vim mapred-site.xml
- 在该文件里面增加如下配置:
mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888 6.2 分发配置
[hadoop@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
6.3 在 hadoop102启动历史服务器
在hadoop2.0和hadoop3.0上,启动和终止历史服务器的命令有区别,以下为2.0版本
附:hadoop3.x集群:配置、启动历史服务(history server,端口19888)
[hadoop@hadoop102 hadoop]$ mr-jobhistory-daemon.sh start historyserver
6.4 查看历史服务器是否启动
[hadoop@hadoop102 hadoop]$ jps
7,配置日志的聚集
- 目的: 可以方便的查看到程序运行详情,方便开发调试(在102的HDFS上)
7.1 配置 yarn-site.xml
[hadoopu@hadoop102 hadoop]$ vim yarn-site.xml
- 在该文件里面增加如下配置
yarn.log-aggregation-enable true yarn.log.server.url http://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800 7.2 分发配置
[hadoop@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
7.3 关闭 NodeManager 、ResourceManager和 HistoryServer
[hadoop@hadoop103 hadoop]$ stop-yarn.sh [hadoop@hadoop102 hadoop]$ mr-jobhistory-daemon.sh stop historyserver
7.4 启动 NodeManager 、ResourceManage 和 HistoryServer
[hadoop@hadoop103 hadoop]$ start-yarn.sh [hadoop@hadoop102 hadoop]$ mr-jobhistory-daemon.sh start historyserver
7.5 测试
- 上传hello.txt文件
[hadoop@hadoop102 hadoop]$ pwd /opt/module/hadoop [hadoop@hadoop102 hadoop]$ hadoop fs -mkdir /input [hadoop@hadoop102 hadoop]$ hadoop fs -put wcinput/hello.txt /input
- 执行 WordCount 程序
[hadoop@hadoop102 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /input /output # 查看运行结果 [hadoop@hadoop102 hadoop]$ hadoop fs -text /out*/p*
7.6 查看日志
- 历史服务器地址:地址
- 历史任务列表
- 查看任务运行日志
- 运行日志详情
8,编写 Hadoop 集群常用脚本
8.1 Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver)
[hadoop@hadoop102 ~]$ cd /home/hadoop/bin [hadoop@hadoop102 bin]$ vim myhadoop.sh
- 编写myhadoop.sh脚本内容
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case in "start") echo " =================== 启动 hadoop 集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh hadoop102 "/opt/module/hadoop/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh hadoop103 "/opt/module/hadoop/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh hadoop102 "/opt/module/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver" ;; "stop") echo " =================== 关闭 hadoop 集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh hadoop102 "/opt/module/hadoop/sbin/mr-jobhistory-daemon.sh stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh hadoop103 "/opt/module/hadoop/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh hadoop102 "/opt/module/hadoop/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;; esac
- 保存后退出,然后赋予脚本执行权限
[hadoop@hadoop102 bin]$ chmod +x myhadoop.sh
8.2 查看三台服务器 Java 进程脚本
[hadoop@hadoop102 ~]$ cd /home/hadoop/bin [hadoop@hadoop102 bin]$ vim jpsall
- 输入如下内容
#!/bin/bash for host in hadoop102 hadoop103 hadoop104 do echo =============== $host =============== ssh $host jps done
- 保存后退出,然后赋予脚本执行权限:
[hadoop@hadoop102 bin]$ chmod +x jpsall
8.3 分发/home/hadoop/bin 目录,保证自定义脚本在三台机器上都可以使用:
# 先确保一下文件所属 [hadoop@hadoop102 ~]$ chown -R hadoop:hadoop bin # 分发bin目录 [hadoop@hadoop102 ~]$ xsync /home/hadoop/bin/
8.4 测试
[hadoop@hadoop102 ~]$ myhadoop.sh stop [hadoop@hadoop102 ~]$ jpsall
9,时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差, 导致集群执行任务时间不同步。
因为我没有配置,所以需要配置时间同步的童靴请自行搜索 Hadoop集群时间同步配置。
四、安装ZooKeeper、HBase、MAVEN和IDEA
ZooKeeper完全分布式部署
1,解压安装
1.1 解压 Zookeeper 安装包到/opt/module/目录下
[hadoop@hadoop102 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/ # 在/opt/module目录下修改ZK文件包名称 [hadoop@hadoop102 software]$ cd /opt/module [hadoop@hadoop102 module]$ mv zookeeper-3.4.10 zookeeper [hadoop@hadoop102 module]$ ls hadoop jdk zookeeper # 修改其所属为hadoop用户 [hadoop@hadoop102 module]$ sudo chown -R hadoop:hadoop zookeeper
1.2 同步/opt/module/zookeeper 目录内容到 hadoop103、hadoop104
[hadoop@hadoop102 module]$ xsync zookeeper/
2,配置服务器编号
2.1 在/opt/module/zookeeper/这个目录下创建 zkData
[hadoop@hadoop102 zookeeper]$ mkdir zkData
2.2 在/opt/module/zookeeper/zkData 目录下创建一个 myid 的文件
[hadoop@hadoop102 zkData]$ touch myid
添加 myid 文件,注意一定要在 linux 里面创建,在 notepad++里面很可能乱码
2.3 编辑 myid 文件
[hadoop@hadoop102 zkData]$ vim myid
- 在文件中添加与 server 对应的编号:
2
2.4 拷贝配置好的 zookeeper 到其他机器上
[hadoop@hadoop102 zkData]$ xsync myid
- 并分别在 hadoop103、hadoop104 上修改 myid 文件中内容为 3、4
- 注意:使用xsync分发文件会使目标服务器上的文件与本服务器文件完全一致。进行Hadoop完全分布式环境搭建的时候,如果分发的目录或文件中包含myid文件,一定记得修改目标服务器上的myid文件,否则可能导致zookeeper无法启动等问题。
3,配置 zoo.cfg 文件
3.1 重命名/opt/module/zookeeper/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg
[hadoop@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg
3.2 修改 zoo.cfg 文件
[hadoop@hadoop102 conf]$ vim zoo.cfg
- 修改数据存储路径配置:
dataDir=/opt/module/zookeeper/zkData
- 增加如下配置:
#######################cluster########################## server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888
- 配置参数解读
server.A=B:C:D
- A 是一个数字,表示这个是第几号服务器; 集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息 较从而判断到底是哪个 server;
- B 是这个服务器的地址;
- C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
- D 是万一集群中的 Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
3.3 同步 zoo.cfg 配置文件
[hadoop@hadoop102 conf]$ xsync zoo.cfg
3.4 删除hadoop103和hadoop104上的多余文件
# hadoop103 [hadoop@hadoop103 conf]$ pwd /opt/module/zookeeper/conf [hadoop@hadoop103 conf]$ rm -rf zoo_sample.cfg # hadoop104 [hadoop@hadoop104 conf]$ rm -rf zoo_sample.cfg
☭问题5:启动ZooKeeper报错 mkdir: 无法创建目录".": 权限不够 ?
注意:ZK有启动成功,只是在启动时返回这样一条报错信息,那么只需要把集群中的zoo_sample.cfg文件删除即可。
☭问题6:Zookeeper启动显示成功,zkServer.sh status报错?
- 附:Zookeeper启动显示成功,zkServer.sh status报错
- 补充一条:重新查看集群中各服务器的myid文件中的编号,是否与在zoo.cfg文件配置的服务器编号一致。
4,集群操作
4.1 将ZooKeeper目录所在路径添加到环境变量,方便全局调用命令
[hadoop@hadoop102 conf]$ sudo vim /etc/profile.d/my_env.sh [hadoop@hadoop102 conf]$ source /etc/profile
- 添加以下内容:
#ZOOKEEPER_HOME export ZOOKEEPER_HOME=/opt/module/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin export PATH=$PATH:$ZOOKEEPER_HOME/sbin
4.2 编写ZooKeeper启动脚本
注意:集群中全部服务器上的Zookeeper均启动成功,才能正常运行
[hadoop@hadoop102 conf]$ cd /home/hadoop/bin [hadoop@hadoop102 bin]$ vim myzk.sh
- 编写myzk.sh脚本内容
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case in "start") echo " =================== 启动 zookeeper ===================" echo " --------------- hadoop102 ---------------" ssh hadoop102 "/opt/module/zookeeper/bin/zkServer.sh start" echo " --------------- hadoop103 ---------------" ssh hadoop103 "/opt/module/zookeeper/bin/zkServer.sh start" echo " --------------- hadoop104 ---------------" ssh hadoop104 "/opt/module/zookeeper/bin/zkServer.sh start" ;; "stop") echo " =================== 关闭 zookeeper ===================" echo " --------------- hadoop104 ---------------" ssh hadoop104 "/opt/module/zookeeper/bin/zkServer.sh stop" echo " --------------- hadoop103 ---------------" ssh hadoop103 "/opt/module/zookeeper/bin/zkServer.sh stop" echo " --------------- hadoop102 ---------------" ssh hadoop102 "/opt/module/zookeeper/bin/zkServer.sh stop" ;; *) echo "Input Args Error..." ;; esac
- 保存后退出,然后赋予脚本执行权限
[hadoop@hadoop102 bin]$ chmod +x myzk.sh
4.3 分发/home/hadoop/bin 目录,保证自定义脚本在三台机器上都可以使用
# 进入bin的上级目录/home/hadoop [hadoop@hadoop102 bin]$ cd .. # 先确保一下文件所属 [hadoop@hadoop102 ~]$ chown -R hadoop:hadoop bin # 分发bin目录 [hadoop@hadoop102 ~]$ xsync bin/
4.4 运行ZooKeeper
[hadoop@hadoop102 ~]$ myzk.sh start
4.5 查看状态
[hadoop@hadoop102 zookeeper]$ zkServer.sh status [hadoop@hadoop103 zookeeper]$ zkServer.sh status [hadoop@hadoop104 zookeeper]$ zkServer.sh status
HBase安装
1,Zookeeper 正常部署
首先保证 Zookeeper 集群的正常部署,并启动之
# 启动过就不要再启动了 [hadoop@hadoop102 zookeeper]$ myzk.sh start
2,Hadoop 正常部署
Hadoop 集群的正常部署并启动
[hadoop@hadoop102 hadoop]$ myhadoop.sh start
3,HBase 的解压
3.1 解压 HBase 到指定目录
[hadoop@hadoop102 software]$ tar -zxvf hbase-1.2.0-cdh5.14.0.tar.gz -C /opt/module
3.2 修改文件包名称和所属
[hadoop@hadoop102 module]$ mv hbase* hbase [hadoop@hadoop102 module]$ sudo chown -R hadoop:hadoop hbase # 进入conf目录,之后需修改配置文件 [hadoop@hadoop102 module]$ cd hbase/conf [hadoop@hadoop102 conf]$
4,HBase 的配置文件
4.1 修改 hbase-env.sh
- 修改内容如下:分别在27和128行左右
export JAVA_HOME=/opt/module/jdk export HBASE_MANAGES_ZK=false
☭问题7:HBase启动警告:Java HotSpot™ 64-Bit Server VM warning
警告内容:
Java HotSpot™ 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot™ 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
解决方案:
hbase-env.sh文件中45行左右有注释说明下面两个export在JDK8+版本可以被安全地移除,注释掉即可
4.2 hbase-site.xml 修改内容
hbase.rootdir hdfs://hadoop102:8020/hbase hbase.cluster.distributed true hbase.master.port 16000 hbase.zookeeper.quorum hadoop102:2181,hadoop103:2181,hadoop104:2181 hbase.zookeeper.property.dataDir /opt/module/zookeeper/zkData 4.3 regionservers文件内容如下:原内容删去
regionservers文件列出了所有运行HRegionServer进程服务器,对该文件的配置与Hadoop中对slaves或者workers文件的配置相似,需要在文件的每一行指定一台服务器,当HBASE启动时会读取该文件,将文件指定的所有服务器启动HRegionServer进程,当HBASE停止的时候,也会同时停止他们。
因此,在启动hbase后,主服务器hadoop102将启动两个节点HMaster和HRegionServer,其余各服务器启动一个节点HRegionServer。
hadoop102 hadoop103 hadoop104
4.4 软连接 hadoop 配置文件到 hbase:
[hadoop@hadoop102 module]$ ln -s /opt/module/hadoop/etc/hadoop/core-site.xml /opt/module/hbase/conf/core-site.xml [hadoop@hadoop102 module]$ ln -s /opt/module/hadoop/etc/hadoop/hdfs-site.xml /opt/module/hbase/conf/hdfs-site.xml
5,HBase 远程发送到其他集群
[hadoop@hadoop102 module]$ xsync hbase/
6,HBase 服务的启动
6.1 添加环境变量
[hadoop@hadoop102 module]$ sudo vim /etc/profile.d/my_env.sh [hadoop@hadoop102 module]$ source /etc/profile
- 添加内容如下
#HBASE_HOME export HBASE_HOME=/opt/module/hbase export PATH=$PATH:$HBASE_HOME/bin
6.2 分发环境变量文件
[hadoop@hadoop102 module]$ sudo /home/hadoop/bin/xsync /etc/profile.d/my_env.sh # 使文件在各服务器上生效 [hadoop@hadoop103 module]$ source /etc/profile [hadoop@hadoop104 module]$ source /etc/profile
6.3 测试
[hadoop@hadoop102 module]$ start-hbase.sh [hadoop@hadoop102 module]$ jpsall [hadoop@hadoop102 module]$ hbase shell
☭问题8:HBase启动报错 错误:找不到或无法加载主类 org.jruby.Main
这里提供一个特别zz的解决方案:
我在后续把IDEA的目录添加到环境变量中时,因为错把$IDEA_HOME写成$HBASE_HOME(复制粘贴的锅),导致环境变量中$HBASE_HOME被IDEA的目录所覆盖,因此出现如上报错。
所以可以先仔细检查环境变量文件,我当时就是没有全部看一遍,导致困扰许久。
6.4 关闭集群顺序
[hadoop@hadoop102 module]$ stop-hbase.sh [hadoop@hadoop102 module]$ myhadoop.sh stop [hadoop@hadoop102 module]$ myzk.sh stop # 查看各服务器上的进程,正常关闭后,各服务器上均只剩下一个进程jps [hadoop@hadoop102 module]$ jpsall
安装MAVEN & IDEA
1,解压安装
# 解压安装 ## MAVEN [hadoop@hadoop102 software]$ tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/module ## IDEA [hadoop@hadoop102 software]$ tar -zxvf ideaIU-2017.2.7.tar.gz -C /opt/module # 修改目录名和所属 [hadoop@hadoop102 module]$ mv apache* maven [hadoop@hadoop102 module]$ mv idea* idea [hadoop@hadoop102 module]$ sudo chown -R hadoop:hadoop maven idea [hadoop@hadoop102 module]$ ll
2,设置环境变量
[hadoop@hadoop102 module]$ sudo vim /etc/profile.d/my_env.sh [hadoop@hadoop102 module]$ source /etc/profile
- 添加下列内容
#MAVEN_HOME export MAVEN_HOME=/opt/module/maven export PATH=$PATH:$MAVEN_HOME/bin #IDEA_HOME export IDEA_HOME=/opt/module/idea export PATH=$PATH:$IDEA_HOME/bin
3,测试 MAVEN
# 输入名令 mvn -v 可以查看版本号 [hadoop@hadoop102 module]$ mvn -v
4,修改MAVEN配置文件,使用阿里的镜像地址
[hadoop@hadoop102 conf]$ pwd /opt/module/maven/conf [hadoop@hadoop102 conf]$ vim settings.xml
- 找到mirrors标签,插入
id=alimaven name=aliyun maven url=http://maven.aliyun.com/nexus/content/groups/public/ mirrorOf=central
- 修改前:
- 修改后:
5,运行IDEA
[hadoop@hadoop102 conf]$ idea.sh
参考资料
教程相关
【1】尚硅谷大数据技术之 Hadoop(入门)
【2】hadoop3.x集群:配置、启动历史服务(history server,端口19888)
【3】【尚硅谷】大数据全套教程下载
【4】centos7安装IDEA配置Maven
【5】如何重新格式化Hadoop文件系统
【6】同一个局域网内如何共享文件夹(含共享打印机操作方法)
【7】在本地用idea连接虚拟机上的hbase集群
报错相关
【1】Hbase启动警告
【2】linux 终端启动图形化程序界面时报错:No protocol specified
【3】stop-hbase.sh一直处于等待状态
知识相关
【1】【hadoop 的坑】hadoop的配置文件slaves/workers
【2】Hadoop配置文件详解
【3】Zookeeper学习笔记
【4】Hbase的集群模式安装配置(笔记)
【5】maven-porm.xml详解
【6】hadoop3.x——历史服务器
【7】UUID详细介绍
实战项目
【1】HBase快速入门系列 (九)| HBase 的实战案例(微博)
资源分享
链接:https://pan.baidu.com/s/1YnO6NQYrU4gGgx1kEVy1jA
提取码:MNZX
以上过程希望对你有所帮助! 欢迎评论区交流指教!
- 找到mirrors标签,插入
- 添加下列内容
- 添加内容如下
- 修改内容如下:分别在27和128行左右
- 保存后退出,然后赋予脚本执行权限
- 编写myzk.sh脚本内容
- 配置参数解读
- 增加如下配置:
- 修改数据存储路径配置:
- 在文件中添加与 server 对应的编号:
- 保存后退出,然后赋予脚本执行权限:
- 输入如下内容
- 保存后退出,然后赋予脚本执行权限
- 编写myhadoop.sh脚本内容
- 执行 WordCount 程序
- 上传hello.txt文件
- 在配置了 ResourceManager 的节点(hadoop103)启动 YARN:
- 启动HDFS:
- 同步所有节点配置文件:
- 文件内容如下:(原本的内容要删除)
- mapred-site.xml内容如下:
- MapReduce 配置文件-配置 mapred-site.xml
- yarn-site.xml修改内容如下:
- YARN 配置文件-配置 yarn-site.xml
- hdfs-site.xml修改内容如下:
- HDFS 配置文件-配置 hdfs-site.xml
- core-site.xml修改内容如下:
- 在该文件中编写如下代码
- 在/home/hadoop/bin目录下编写xsync脚本
- 刷新shell环境,让环境变量生效
- 添加以下内容:
- 将/home/hadoop/bin目录添加到全局环境变量中
- 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径):
- 查看Hadoop版本信息
- 刷新shell环境,让环境变量生效
- 添加以下内容:
- 查看JDK版本信息
- 刷新shell环境,让环境变量生效
- 添加以下内容:
- 解压JDK压缩包
- 附:Linux中为网卡生成UUID
- 修改以下选项
- 如果在前面安装过程中,设置 网络和主机名 没有出错,那下列选项应该没有问题
- 点击完成
-
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章