hadoop生态圈集群搭建(持续更新240606)

Hadoop生态圈

Linux

在刚安装好的Linux上克隆一个hadoop102

在hadoop102上打快照 ----因为晚上需要恢复快照再做一遍

1.修改ip地址

vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改
	BOOTPROTO=static
	ONBOOT=yes
添加如下内容
	IPADDR=192.168.10.102
	GATEWAY=192.168.10.2
	DNS1=114.114.114.114
	DNS2=8.8.8.8

2.重启network服务

	systemctl restart network	
测试
	ping www.baidu.com

(xshell连接Linux)

3.安装插件

yum install -y epel-release net-tools vim
yum install -y  psmisc  nc  rsync  lrzsz  ntp libzstd openssl-static tree iotop git
(可以在安装的过程中,再打开一个窗口继续下面的操作)

4.关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

5.创建用户

#创建用户
useradd lxy
#设置密码123321
passwd lxy 回车再输入密码 123321
#给lxy设置可以使用root权限
visudo
#在root    ALL=(ALL)       ALL下面添加如下内容
lxy ALL=(ALL)       NOPASSWD:ALL

6.创建目录

mkdir /opt/module
mkdir /opt/software

7.修改目录的所属主和所属组为lxy

chown lxy:lxy module software

8.修改主机名:hadoop102 (注意名字后面不要加空格)

vi /etc/hostname

9.修改hosts文件

#修改linux的hosts文件
	vi /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
192.168.10.112 hadoop112
192.168.10.113 hadoop113
192.168.10.114 hadoop114
192.168.10.115 hadoop115
192.168.10.116 hadoop116
192.168.10.117 hadoop117
192.168.10.118 hadoop118
192.168.10.201 hadoop201
192.168.10.202 hadoop202
192.168.10.203 hadoop203
192.168.10.204 hadoop204
192.168.10.205 hadoop205
192.168.10.206 hadoop206
192.168.10.207 hadoop207
192.168.10.208 hadoop208
192.168.10.209 hadoop209
192.168.10.210 hadoop210
192.168.10.211 hadoop211
#修改windows的hosts文件(如果修改保存时显示没有权限。可以将hosts文件复制到桌面
			修改桌面上的hosts文件再把桌面的hosts文件复制回去即可。查看是否成功)
C:\Windows\System32\drivers\etc

添加如下内容

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
192.168.10.112 hadoop112
192.168.10.113 hadoop113
192.168.10.114 hadoop114
192.168.10.115 hadoop115
192.168.10.116 hadoop116
192.168.10.117 hadoop117
192.168.10.118 hadoop118
192.168.10.201 hadoop201
192.168.10.202 hadoop202
192.168.10.203 hadoop203
192.168.10.204 hadoop204
192.168.10.205 hadoop205
192.168.10.206 hadoop206
192.168.10.207 hadoop207
192.168.10.208 hadoop208
192.168.10.209 hadoop209
192.168.10.210 hadoop210
192.168.10.211 hadoop211

10.等插件都装完后再重启Linux

11.把xshell的登录用户换成lxy (注意:不要用root切到lxy 而是直接使用lxy登录)

JDK安装(建议和Hadoop、ZooKeeper一起安装,改的文件都一样,一起改!)

1.将jdk的压缩包上传到linux的/opt/software目录中

zookeeper 安装本地模式后需要先操作一下

先将Zookeeper服务和客户端关掉(正在运行的是本地的)

quit
zkServer.sh stop

删除内容

cd /opt/module/zookeeper-3.7.1/zkData
rm -rf ./*

2.解压

2.1 java Hadoop

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

2.2 zookeeper本地安装后这一步可省略

tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /opt/module/
# 修改名字
cd /opt/module/
mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1

3.配置环境变量

3.1 在/etc/profile.d中创建xxx.sh(在这我们统一叫 my_env.sh)

cd /etc/profile.d
sudo vim my_env.sh

添加如下内容

#声明JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
#声明HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.4
#添加ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.7.1
#将JAVA_HOME添加到path中
export PATH=$PATH:$JAVA_HOME/bin
#将HADOOP_HOME添加到path中
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH=$PATH:$ZOOKEEPER_HOME/bin

3.2 让环境变量生效

第一种方式 :将xshell的窗口断开重新连接 (重新加载环境变量)

第二种方式 :source /etc/profile.d/my_env.sh
注意:source就是执行my_env.sh脚本程序 如果第一次环境变量错误 修改后 再次source
会发现原来错误的环境变量还在。那就重启Linuxsudo reboot

4.测试

4.1java Hadoop测试

java -version
hadoop version

Hadoop安装(上面整过了这块儿不用搞了)

1.将Hadoop的压缩包上传到linux的/opt/software

2.解压压缩包

cd /opt/software
tar -zxvf hadoop-3.3.4.tar.gz -C /opt/module/

3.配置环境变量

cd /etc/profile.d
sudo vim my_env.sh

添加如下内容

#声明HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.4
#将HADOOP_HOME添加到path中
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

4.让环境变量生效

第一种方式 :将xshell的窗口断开重新连接 (重新加载环境变量)

第二种方式 :source /etc/profile.d/my_env.sh
注意:source就是执行my_env.sh脚本程序 如果第一次环境变量错误 修改后 再次source
会发现原来错误的环境变量还在。那就重启sudo reboot

5.测试

hadoop version

克隆两台

修改三个地方

vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/hostname
vim /opt/module/zookeeper-3.7.1/zkData/myid

myid:我们约定hadoop102是2 hadoop103是3 hadoop104是4

单机模式

一 准备数据

1.创建目录

mkdir /opt/module/hadoop-3.3.4/wcinput

2.创建文件

cd /opt/module/hadoop-3.3.4/wcinput
vim a.txt

3.文件中写点数据

hello hello
longge
canglaoshi
longge

二 运行程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount wcinput wcoutput

说明:
hadoop: bin目录中的命令
jar : 参数表示运行一个jar包
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar : jar包路径
wordcount :案例名称-不能随便写
wcinput :数据所在的目录
wcoutput :运算的结果输出的目录—该目录必须不存在

三 查看结果

cd wcoutput
cat part-r-00000

分布式集群搭建

1.scp的使用

进行文件或目录的拷贝

scp -r $pdir/$fname $user@$host:$pdir/$fname

2.rsync的使用

rsync -av $pdir/$fname $user@$host:$pdir/$fname

3.ssh配置

生成私钥和公钥

每个节点执行一次

ssh-keygen -t rsa

每个节点的rootlxy各执行一次

### 拷贝公钥
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

4.xsync脚本的使用

vim /home/lxy/bin/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
测试脚本
xsync /home/lxy/bin

5.集群部署规划

  • NameNode和SecondaryNameNode不要安装在同一台服务器。
  • ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop102hadoop103hadoop104
HDFSNameNode
DataNode
DataNodeSecondaryNameNode
DataNode
YARNNodeManagerResourceManager
NodeManager
NodeManager

6.修改配置文件

cd /opt/module/hadoop-3.3.4/etc/hadoop

修改了下面的5个配置文件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
workers

配置core-site.xml

vim core-site.xml
<!-- 指定NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop102:8020</value>
</property>

<!-- 指定hadoop数据的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-3.3.4/data</value>
</property>

<!-- 配置HDFS网页登录使用的静态用户为lxy -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>lxy</value>
</property>

配置hdfs-site.xml

vim hdfs-site.xml

<!-- 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>

配置yarn-site.xml

vim yarn-site.xml

<!-- 指定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>

<!-- 环境变量的继承 -->
<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>

配置mapred-site.xml

vim mapred-site.xml

<!-- 指定MapReduce程序运行在Yarn上 -->
<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>

配置workers

vim /opt/module/hadoop-3.3.4/etc/hadoop/workers

在该文件中增加如下内容:

hadoop102
hadoop103
hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件。

4.2 zookeeper

修改配置文件(本地模式整过的就不用整了)
cd /opt/module/zookeeper_3.7.1/conf
	mv zoo_sample.cfg zoo.cfg
	vim zoo.cfg
		修改如下内容(记着要创建zkData)
		dataDir=/opt/module/zookeeper-3.7.1/zkData
创建文件myid
cd /opt/module/zookeeper-3.7.1/zkData
echo 2 > myid //myid中的值在zookeeper集群中必须是唯一的我们约定hadoop102是2 hadoop103是3 hadoop104是4
修改配置文件
cd /opt/module/zookeeper-3.7.1/conf
vim zoo.cfg
	添加如下内容
	#######################cluster##########################
	server.2=hadoop102:2888:3888
	server.3=hadoop103:2888:3888
	server.4=hadoop104:2888:3888
说明
	server.myid值=myid值所对应的服务器的IP地址:zk通讯端口号:zk的leader选举端口号

一定要分发

cd /opt/module/hadoop-3.3.4/etc/hadoop
xsync ./
xsync /opt/module/hadoop-3.3.4/etc

7.格式化

7.1 Hadoop

在hadoop102(因为namenode在这个节点上-格式化后产生的文件是给namenode使用的)上格式化。
注意:不要重复格式化。如果是格式化失败(格式化的时候有错误)修改错误后重新格式化
命令:hdfs namenode -format

8.启动集群

启动HDFS:
	start-dfs.sh
关闭HDFS#!#!
	stop-dfs.sh
	
启动YARN(必须在resourcemanager所在的节点-hadoop103):
	start-yarn.sh
关闭YARN(必须在resourcemanager所在的节点-hadoop103):
	stop-yarn.sh

启动zookeeper(必须在三个节点都输入该命令):
	zkServer.sh start
关闭zookeeper(必须在三个节点都输入该命令):
	zkServer.sh stop

启动集群脚本

Hadoop
vim /home/lxy/bin/myhadoop
#!/bin/bash
#参数的个数校验
if [ $# -ne 1 ];then
	echo 参数的个数不对
	exit
fi

#参数的内容校验
case $1 in
"start")
	#启动HDFS
	ssh hadoop102 $HADOOP_HOME/sbin/start-dfs.sh
	#启动YARN
	ssh hadoop103 start-yarn.sh
	;;
"stop")
	#关闭HDFS
	ssh hadoop102 stop-dfs.sh
	#关闭YARN
	ssh hadoop103 stop-yarn.sh
	;;
*)
	echo 输入的内容不对!!!
	;;
esac;
zookeeper

命令:zk.sh [start | stop | status]

#!/bin/bash

#校验参数的个数
if [ $# -ne 1 ];then
	echo 参数的个数不对!!!
	exit
fi


function zkOP
{

	for host in hadoop102 hadoop103 hadoop104
	do
		echo ===========================$host===============
		ssh $host zkServer.sh $1
	done

}
#校验参数的内容
case $1 in
"start")
	zkOP start
	;;
"stop")
	zkOP stop
	;;
"status")
	zkOP status
	;;
*)
	echo 参数的内容不对!!!
	exit
	;;
esac

9.常见错误:

错误一:配置文件错误
错误二:重复格式化

10.写jpsall脚本

vim /home/lxy/bin/jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
	echo =====================$host================
	ssh $host jps
done

11.查看页面

Web端查看HDFS的NameNode

①浏览器中输入:http://hadoop102:9870

	②查看HDFS上存储的数据信息
Web端查看YARN的ResourceManager

①浏览器中输入:http://hadoop103:8088

	②查看YARN上运行的Job信息
	
如果看不到解决方案:
	1.查看集群是否正启动(HDFS YARN都要启动)
	2.将hadoop102的名字替换成IP地址(如果能解决说明windows的hosts的文件有问题)
	3.查看防火墙是否关闭
		systemctl status firewalld
		如果没有关闭 :
			systemctl stop firewalld  
			systemctl disable firewalld

12.集群测试

①在HDFS的页面上创建input目录 并在input目录中上传a.txt
②在任意一台节点上执行job
	hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input /output
	注意:输入和输出路径是HDFS的路径
③在运行时观察两个页面
	http://hadoop103:8088 观察Job执行的进度
	http://hadoop102:9870 观察输出结果

13.历史服务器
作用:查看之前执行过的job信息
配置:vim /opt/module/hadoop-3.3.4/etc/hadoop/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>
注意:一定要分发   
cd /opt/module/hadoop-3.3.4/etc/hadoop/
xsync mapred-site.xml
启动历史服务器:
mapred --daemon start historyserver
历史服务器地址
	http://hadoop102:19888

14.日志的聚集
作用:在历史服务器中通过logs就可以查看job的执行的详细信息
配置:vim /opt/module/hadoop-3.3.4/etc/hadoop/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>

		<!-- 设置日志保留时间为7天 -->
		<property>
			<name>yarn.log-aggregation.retain-seconds</name>
			<value>604800</value>
		</property>
注意:
	①一定要分发 
		cd /opt/module/hadoop-3.3.4/etc/hadoop/
		xsync yarn-site.xml
	②重启HDFS YARN 历史服务器
	③重新执行job
	④再查看logs

15.集群启动方式
方式一 :整个模块的启或停止
start-dfs.sh stop-dfs.sh
start-yarn.sh stop-yarn.sh
方式二: 单个角色的启动或停止
(1)分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager

集群时间同步

将hadoop102配置成时间服务器
1.将ntpd服务关闭
sudo systemctl stop ntpd

2.修改配置文件
	sudo vim /etc/ntp.conf
	sudo vim /etc/sysconfig/ntpd
	
3.启动ntpd服务
	sudo systemctl start ntpd
	
=======时间服务器的时间不对===================

sudo systemctl stop ntpd
sudo ntpdate 时间服务器地址
sudo systemctl start ntpd

配置hadoop103和hadoop104去hadoop102同步时间
1.启动定时任务的服务
sudo systemctl start crond

2.编辑定时任务
	sudo crontab -e
	添加如下内容
	0 2 * * * sudo ntpdate hadoop102

XShell连不上Linux

1.先查看Linux是否启动

没有启动 那么启动即可

2.先查看VMWare服务

此电脑 -> 右键 -> 管理 -> 服务和应用程序 -> 服务 -> VMWarexxxx 有四个查看否启动
如果没有启动右键启动即可。如果已经启动找到VMWare NAT XXX 服务右键重启
重启后再次重次重新连接Xshell

3.在Linux测试是否可以上网 : ping www.baidu.com

如果不可以上网需要查看配置文件
		①VMNet8虚拟网卡的配置
		②VMWare的配置
		③Linux的配置

如果配置都没问题
	①重启虚拟网卡 :
		网络 -> 右键 -> 属性 -> 更改适配器设置 -> VMnet8 -> 右键禁用 再 启用
	②重启Linux服务
		systemctl restart network
		如果报错- 
			方案一是否是配置文件问题    
		
			方案二 关闭网络管理服务
				systemctl stop NetworkManager
				systemctl disable NetworkManager
				
		再次重启 systemctl restart network

4.重启windows(先关闭Linux再关闭windows)

本地安装ZooKeeper

1.将zookeeper压缩包上传到/opt/software

2.解压

cd /opt/software
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /opt/module/

3.修改名字

cd /opt/module/
mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1

4.添加环境变量

sudo vim /etc/profile.d/my_env.sh
添加如下内容
#添加ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.7.1
export PATH=$PATH:$ZOOKEEPER_HOME/bin

5.让环境变量生效

source /etc/profile.d/my_env.sh

6.修改配置文件

cd /opt/module/zookeeper_3.7.1/conf
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改如下内容(记着要先创建zkData)
dataDir=/opt/module/zookeeper-3.7.1/zkData

7.启动zookeeper服务端

zkServer.sh start
zkServer.sh stop
zkServer.sh status

8.启动zookeeper客户端

zkCli.sh 
退出客户端:quit

HA安装

这个比较占内存,平时也没必要,所以可以在开始之前打个快照,试一下就恢复快照

1.把集群全部停掉

所有会话====================
在三台节点上都做(通过右键----> 发送输入到—>所有会话)====================
打开就是这样
在这里插入图片描述
在这里插入图片描述

2.在/opt下创建ha目录

我们不在原来的集群上搞
sudo mkdir /opt/ha

3.设置所属主和所属组

sudo chown atguigu:atguigu ha

========================改回来 :通过右键---->发送输入到----当前会话
===========================当前会话 ==================================================

=在hadoop102====

4.将原hadoop拷贝到/opt/ha下(在hadoop102上即可–后面会分发)

cp -r /opt/module/hadoop-3.3.4 /opt/ha

5.将/opt/ha下的hadoop里面的data logs 和/tmp/* 全部删除

(在hadoop102上即可–因为hadoop103和hadoop104没有分发呢)
rm -rf data logs
sudo rm -rf /tmp/*

6.配置环境变量(将指向/opt/module/hadoop-3.3.4 修改成指向/opt/ha/hadoop-3.3.4)

sudo vim /etc/profile.d/my_env.sh

修改
#定义HADOOP_HOME变量
export HADOOP_HOME=/opt/ha/hadoop-3.3.4

7.分发环境变量

sudo scp -r /etc/profile.d/my_env.sh hadoop103:/etc/profile.d/my_env.sh
sudo scp -r /etc/profile.d/my_env.sh hadoop104:/etc/profile.d/my_env.sh

8.让hadoop102,hadoop103,hadoop104环境变量生效

全部断开连接重新连。
每台节点一定要验证 :echo $HADOOP_HOME

9.分发

xsync /opt/ha/hadoop-3.3.4

1.前面9步准备工作做好

2.配置hdfs的HA

core-site.xml

<!-- 把多个NameNode的地址组装成一个集群mycluster -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://mycluster</value>
</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/ha/hadoop-3.3.4/data</value>
</property>

<!--   配置ZOOKEEPER的地址  -->
<property>
	<name>ha.zookeeper.quorum</name>
	<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>

2.配置hdfs-site.xml

	   <!-- NameNode数据存储目录 -->
	  <property>
		<name>dfs.namenode.name.dir</name>
		<value>file://${hadoop.tmp.dir}/name</value>
	  </property>

	  <!-- DataNode数据存储目录 -->
	  <property>
		<name>dfs.datanode.data.dir</name>
		<value>file://${hadoop.tmp.dir}/data</value>
	  </property>

	  <!-- JournalNode数据存储目录 -->
	  <property>
		<name>dfs.journalnode.edits.dir</name>
		<value>${hadoop.tmp.dir}/jn</value>
	  </property>

	  <!-- 完全分布式集群名称 -->
	  <property>
		<name>dfs.nameservices</name>
		<value>mycluster</value>
	  </property>

	  <!-- 集群中NameNode节点都有哪些 -->
	  <property>
		<name>dfs.ha.namenodes.mycluster</name>
		<value>nn1,nn2,nn3</value>
	  </property>

	  <!-- NameNode的RPC通信地址 -->
	  <property>
		<name>dfs.namenode.rpc-address.mycluster.nn1</name>
		<value>hadoop102:8020</value>
	  </property>
	  <property>
		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
		<value>hadoop103:8020</value>
	  </property>
	  <property>
		<name>dfs.namenode.rpc-address.mycluster.nn3</name>
		<value>hadoop104:8020</value>
	  </property>

	  <!-- NameNode的http通信地址 -->
	  <property>
		<name>dfs.namenode.http-address.mycluster.nn1</name>
		<value>hadoop102:9870</value>
	  </property>
	  <property>
		<name>dfs.namenode.http-address.mycluster.nn2</name>
		<value>hadoop103:9870</value>
	  </property>
	  <property>
		<name>dfs.namenode.http-address.mycluster.nn3</name>
		<value>hadoop104:9870</value>
	  </property>

	  <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
	  <property>
		<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
	  </property>

	  <!-- 访问代理类:client用于确定哪个NameNode为Active -->
	  <property>
		<name>dfs.client.failover.proxy.provider.mycluster</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	  </property>

	  <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
	  <property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	  </property>

	  <!-- 使用隔离机制时需要ssh秘钥登录-->
	  <property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/atguigu/.ssh/id_rsa</value>
	  </property>
	<!-- 启用nn故障自动转移 -->
	<property>
		 <name>dfs.ha.automatic-failover.enabled</name>
		 <value>true</value>
	</property>

分发
在这里插入图片描述

3.在(hadoop102,hadoop103,hadoop104)启动journalnode

hdfs --daemon start journalnode	  

4.在[hadoop102]上,对其进行格式化,并启动NameNode

hdfs namenode -format
hdfs --daemon start namenode

5.在hadoop103和hadoop104上同步元数据并启动NameNode

hdfs namenode -bootstrapStandby
hdfs --daemon start namenode

6.启动三台节点上的datanode

hdfs --daemon start datanode

7.查看页面
9870

8.关闭所有HDFS服务:

stop-dfs.sh

9.启动Zookeeper集群:

zk.sh start

10.初始化HA在Zookeeper中状态(在zookeeper中创建节点):

hdfs zkfc -formatZK

11.启动HDFS服务(通过jpsall查看是否对):

start-dfs.sh

12.验证
将active的那台namenode给停掉查看其它namenode有没有变成active

hdfs --daemon stop namenode

配置Yarn的HA

yarn-site.xml

configuration里换成这个

<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 启用resourcemanager ha -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!-- 声明两台resourcemanager的地址 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>

    <!--指定resourcemanager的逻辑列表-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2,rm3</value>
    </property>
<!-- ========== rm1的配置 ========== -->
    <!-- 指定rm1的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop102</value>
    </property>

    <!-- 指定rm1的web端地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hadoop102:8088</value>
    </property>

    <!-- 指定rm1的内部通信地址 -->
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>hadoop102:8032</value>
    </property>

    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>  
        <value>hadoop102:8030</value>
    </property>

    <!-- 指定供NM连接的地址 -->  
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>hadoop102:8031</value>
    </property>

<!-- ========== rm2的配置 ========== -->
    <!-- 指定rm2的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop103</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hadoop103:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>hadoop103:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>hadoop103:8030</value>
    </property>

    <property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>hadoop103:8031</value>
    </property>

<!-- ========== rm3的配置 ========== -->
    <!-- 指定rm1的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm3</name>
        <value>hadoop104</value>
    </property>
    <!-- 指定rm1的web端地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm3</name>
        <value>hadoop104:8088</value>
    </property>
    <!-- 指定rm1的内部通信地址 -->
    <property>
        <name>yarn.resourcemanager.address.rm3</name>
        <value>hadoop104:8032</value>
    </property>
    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm3</name>  
        <value>hadoop104:8030</value>
    </property>

    <!-- 指定供NM连接的地址 -->  
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm3</name>
        <value>hadoop104:8031</value>
    </property>

    <!-- 指定zookeeper集群的地址 --> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
    </property>

    <!-- 启用自动恢复 --> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!-- 指定resourcemanager的状态信息存储在zookeeper集群 --> 
    <property>
        <name>yarn.resourcemanager.store.class</name>     
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</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>

3.分发文件
sudo scp
4.在hadoop102中执行:
start-yarn.sh
5.查看服务状态
yarn rmadmin -getServiceState rm1

Hive安装

先装MySQL

1.上传到/opt/software

2.解压
tar -xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar -C ./

3.卸载mariadb
sudo rpm -qa | grep mariadb | xargs sudo rpm -e --nodeps

4.安装mysql
sudo rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm

5.如果自己安装过(linux上)可以先用卸载脚本进行卸载再安装
sudo bash remove mysql.sh(脚本在资料中先上传到linux上再使用)

6.启动mysql服务
sudo systemctl start mysqld

7.查看临时密码
sudo cat /var/log/mysqld.log | grep password

8.登录mysql
mysql -u root -p

9.修改临时密码
9.1更改MySQL密码策略
set global validate_password_policy=0;//密码策略为0表示最低
set global validate_password_length=4;//密码长度必须大于等于4

9.2设置简单好记的密码
	set password=password("123456");

10.修改可以在任意节点登录mysql
use mysql;
update user set Host=‘%’ where User=‘root’;
flush privileges; //刷新

Hive

1.上传hive到/opt/software

2.解压

cd /opt/software
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/module/

3.修改名字

cd /opt/module/
mv apache-hive-3.1.3-bin hive

4.添加环境变量

sudo vim /etc/profile.d/my_env.sh 
添加如下内容
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
 让环境变量生效
source /etc/profile.d/my_env.sh 

5.初始化元数据库(一定要在/opt/module/hive目录下执行)

cd /opt/module/hive
schematool -dbType derby -initSchema

配置Hive元数据存到MySQL

1.将mysql驱动包放到/opt/module/hive/lib目录中
将mysql驱动包上传到/opt/software中
mv /opt/software/mysql-connect-xxxxx.jar /opt/module/hive/lib

2.在mysql中创建metastore库
登录mysql
create database metastore;

3.在hive中创建配置文件
cd /opt/module/hive/conf
vim hive-site.xml
添加如下内容

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> javax.jdo.option.ConnectionURL jdbc:mysql://hadoop102:3306/metastore?useSSL=false
<!-- jdbc连接的Driver-->
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>

<!-- jdbc连接的username-->
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
</property>

<!-- jdbc连接的password -->
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
</property>

<!-- Hive默认在HDFS的工作目录 -->
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
</property>

4.初始化
schematool -dbType mysql -initSchema -verbose

其他配置

1.Hive客户端显示当前库和表头
cd /opt/module/hive/conf
vim hive-site.xml
添加如下内容

hive.cli.print.header
true
Whether to print the names of the columns in query output.


hive.cli.print.current.db
true
Whether to include the current database in the Hive prompt.

2.Hive运行日志路径配置
cd /opt/module/hive/conf
mv hive-log4j2.properties.template hive-log4j2.properties
vim hive-log4j2.properties
修改如下内容
property.hive.log.dir = /opt/module/hive/logs

3.配置Hive运行时堆内存大小
cd /opt/module/hive/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
修改如下内容-将注释去掉将1024改成2048
export HADOOP_HEAPSIZE=2048

4.修改yarn-site.xml
cd /opt/module/hadoop-3.3.4/etc/hadoop
vim yarn-site.xml
添加如下内容

yarn.nodemanager.vmem-check-enabled
false

分发
重启yarn

5.测试
5.1启动hive客户端
hive (没有权限需要修改权限 hdfs dfs -chmod 777 /tmp/hive)

5.2创建库
create dat abase db1; //观察HDFS上是否有目录(路径:/user/hive/warehouse)

5.3建表
use db1;
create table emp(id int,name string);//观察HDFS上是否有目录(路径:/user/hive/warehouse)

5.4观察元数据
在mysql中观察

5.5向表中插入数据
方式一 :向集群提交job (因为hive会把sql语句翻译成mr然后执行该job-集群)
insert into emp(id,name) values(1,‘aa’); //观察http://hadoop103:8088是否有job运行 和 hdfs中是否有数据(http://hadoop102:9870)

方式二:在本地运行
set hive.exec.mode.local.auto=true; 
insert into emp(id,name) values(1,'aa');

Flume

安装

1.将flume上传到/opt/software

2.解压
cd /opt/software
tar -zxvf apache-flume-1.10.1-bin.tar.gz -C /opt/module

3.改名
cd /opt/module
mv apache-flume-1.10.1-bin flume

4.添加环境变量
sudo vim /etc/profile.d/my_env.sh
添加如下内容
export FLUME_HOME=/opt/module/flume
export PATH= P A T H : PATH: PATH:FLUME_HOME/bin

5.让环境变量生效
source /etc/profile.d/my_env.sh

6.测试
flume-ng version

7.修改配置文件
cd /opt/module/flume/conf
vim log4j2.xml
修改!!!
第21行:/opt/module/flume/logs
在第53行下面添加

7.分发flume和环境变量
cd /opt/module
xsync flume

sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh 

8.让hadoop102和hadoop103的环境变量生效
source /etc/profile.d/my_env.sh

运行agent(Flume)

命令
flume-ng agent --name agent的名字 --conf flume配置文件的路径 --conf-file agent配置文件的路径

flume-ng agent -n agent的名字 -c flume配置文件的路径 -f agent配置文件的路径

案例:
flume-ng agent -n a1 -c conf -f jobs/job1.conf

nc 工具

接收端
nc -lk 端口号

发送端
nc 接收端的主机名称 端口号

https://flume.apache.org/releases/content/1.10.0/FlumeUserGuide.html

Kafka

1.将kafka上传到/opt/software中

2.解压
cd /opt/software
tar -zxvf kafka_2.12-3.3.1.tgz -C /opt/module/

3.配置环境变量
sudo vim /etc/profile.d/my_env.sh
添加如下内容
export KAFKA_HOME=/opt/module/kafka
export PATH= P A T H : PATH: PATH:KAFKA_HOME/bin

4.让环境变量生效
source /etc/profile.d/my_env.sh

5.修改配置文件
cd /opt/module/kafka/config
vim server.properties
修改如下内容
broker.id=0 #每台服务器的该址必须不同。约定hadoop102为0 hadoop103为1 hadoop104为2
log.dirs=/opt/module/kafka/datas #数据存放的路径
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka #zookeeper的地址

6.分发
分发kafka :xsync /opt/module/kafka
分发环境变量 : sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh

7.让hadoop103和hadoop104环境变量生效
方式一:断开重连
方式二:source

8.修改hadoop103和hadoop104的配置文件
cd /opt/module/kafka/config
vim server.properties
修改如下内容
broker.id=1 #每台服务器的该址必须不同。约定hadoop102为0 hadoop103为1 hadoop104为2

9.启动kafka集群
9.1先启动zookeeper(必须先正确启动zookeeper)
zk.sh start
9.2在每一台节点上启动kafka
kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties

10.注意
10.1启动kafka时先启动zookeeper再启动kafka
10.2关闭kafka时先关闭kafka再关闭zookeeper(如果顺序错误会发现kafka关不掉)

	10.3如果顺序错了导致某一个节点上的kakfa无法正常启动 
			删除 /opt/module/kafka/datas/meta.properties

启动脚本

#!/bin/bash
if [ $# -ne 1 ];then
	echo 参数的个数不对!!!
	exit
fi


case $1 in
"start")
	for host in hadoop102 hadoop103 hadoop104
	do
		echo $host启动中......
		ssh $host kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties
	done
	;;
"stop")
	for host in hadoop102 hadoop103 hadoop104
	do
		echo $host关闭中......
		ssh $host kafka-server-stop.sh
	done
	;;
*)
	echo 参数的内容不对!!!
	;;
esac

kafka命令

一 topic
						集群地址						 操作			 topic名字			其它参数		
	kafka-topics.sh  --bootstrap-server xxxx:9092		--create	  --topic topic名字		--partitions 分区数 / --replication-factor 副本数
		注意:1.分区数任意个数  副本数<=broker节点数量
			  2.如果不指定分区数默认是1 不指定副本数默认是1
	
	kafka-topics.sh  --bootstrap-server xxxx:9092	    --delete      --topic topic名字
	kafka-topics.sh  --bootstrap-server xxxx:9092	    --list(查看所有的topic)      
	kafka-topics.sh  --bootstrap-server xxxx:9092	    --describe    --topic topic名字
	kafka-topics.sh  --bootstrap-server xxxx:9092		--alter      --topic topic名字      --partitions 分区数
		注意:分区数只能往大的改。副本数不支持修改
	


二 生产者	
		命令							集群地址								主题的名字
	kafka-console-producer.sh 		--bootstrap-server hadoop102:9092 		--topic demo1



三 消费者
	命令							集群地址								主题的名字			可选参数
	kafka-console-consumer.sh 		--bootstrap-server hadoop102:9092 		--topic demo1	 --from-beginning
		注意:消费者默认是从当前位置开始消费。也可以指定参数--from-beginning (从头开始消费)

Kafka可视化工具Kafka-Eagle安装

官网:https://www.kafka-eagle.org/
上传压缩包kafka-eagle-bin-2.0.8.tar.gz到集群/opt/software目录
解压到本地
tar -zxvf kafka-eagle-bin-2.0.8.tar.gz
进入刚才解压的目录
将efak-web-2.0.8-bin.tar.gz解压至/opt/module
tar -zxvf efak-web-2.0.8-bin.tar.gz -C /opt/module/
6)修改名称
mv efak-web-2.0.8/ efak
/opt/module/efak/conf/system-config.properties

efak.zk.cluster.alias=cluster1
cluster1.zk.list=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka

# offset保存在kafka(把下面多出来的那行注释掉)
cluster1.efak.offset.storage=kafka

# 配置mysql连接
efak.driver=com.mysql.jdbc.Driver
efak.url=jdbc:mysql://hadoop102:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
efak.username=root
efak.password=123456

添加环境变量
sudo vim /etc/profile.d/my_env.sh
export KE_HOME=/opt/module/efak
export PATH= P A T H : PATH: PATH:KE_HOME/bin
注意:source /etc/profile
source /etc/profile
启动
注意:启动之前需要先启动ZK以及KAFKA。
kf.sh start
启动efak
ke.sh start
打开http://192.168.10.102:8048/

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值