Hadoop
修改Linux的主机映射文件
请确保所有节点 的用户均相同;如,都有rishinyan用户.
如果没有用户名相同的用户,请使用root用户来创建用户
1 2 3 4 5 6 # 使用root用户 su root # 新建用户 useradd rishinyan # 给用户设置密码,将输入两次,最后一次为确认密码 passwd rishinyan123
使用root用户编辑sudoers文件,赋予rishinyan用户权限
1 2 3 4 5 6 # 编辑sudoers文件 vi /etc/sudoers # 找到root ALL=(ALL) ALL # 按i进入编辑,在其下方输入 rishinyan ALL=(ALL) ALL
先按下esc键 ,后输入:wq!保存并退出编辑
所有节点均要有rishinyan用户
修改所有节点 的hosts文件,方便我们在Linux里面通过主机名访问服务器
1 2 3 4 # 通过命令su切换用户rishinyan su rishinyan # 添加节点,执行sudo命令会要求输入密码,输入创建rishinyan用户时所设置的密码 sudo vi /etc/hosts
按i进入编辑,并添加如下内容,前面为ip,后面为对应的映射名
这里,有五台服务器,将192.168.2.246与192.168.2.247设置为主节点;192.168.2.248,192.168.2.249和192.168.2.250设置为数据节点
1 2 3 4 5 192.168.2.246 master1 192.168.2.247 master2 192.168.2.248 slave1 192.168.2.249 slave2 192.168.2.250 slave3
先按下esc ,后输入:wq!保存并退出编辑
关闭Selinux和防火墙
所有节点 均需关闭Selinux和防火墙
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # setenforce 0 # 编辑配置文件 # vi /etc/selinux/config SELINUX=disabled # 查看防火墙状态 sudo systemctl status firewalld # 执行关闭命令,会提示输入root用户密码,输入密码即可 sudo systemctl stop firewalld # 再次执行查看防火墙命令 sudo systemctl status firewalld # 执行开机禁用防火墙自启命令,会提示输入密码,输入两次root用户的密码 sudo systemctl disable firewalld
查看防火墙,Actice为active(running)表示防火墙开启
查看防火墙,Active为inactive(dead)表示防火墙关闭
SSH免密登录配置
所有节点都要判断是否安装了ssh服务
如果没有出现openssh相关信息,则安装ssh服务
1.主节点的免密钥配置
对于master1和master2,slave1
(1)生成公钥和私钥
1 2 ssh-keygen -t rsa # 按三次回车
(2)将公钥拷贝到要免密登录的目标机器上
对于master1和master2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # master1可替换为/etc/hosts文件中对应的ip,192.168.2.246 # 执行命令后,先输入yes,再回车,之后再输入rishinyan用户的密码。下同 ssh-copy-id master1 # master2可替换为/etc/hosts文件中对应的ip,192.168.2.247 ssh-copy-id master2 # slave1可替换为/etc/hosts文件中对应的ip,192.168.2.248 ssh-copy-id slave1 # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 ssh-copy-id slave2 # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 ssh-copy-id slave3
对于slave1,hbase需要免密连接slave2和slave3
1 2 3 4 5 6 7 8 # slave1可替换为/etc/hosts文件中对应的ip,192.168.2.248 ssh-copy-id slave1 # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 ssh-copy-id slave2 # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 ssh-copy-id slave3
注:.ssh文件夹下(~/.ssh)的文件功能解释
known_hosts :记录ssh访问过计算机的公钥(public key)
id_rsa :生成的私钥
id_rsa.pub :生成的公钥
authorized_keys :存放授权过的可以免密登录本服务器的其它机器的公钥
2.验证
在master1输入
1 2 3 ssh slave1 # 或 ssh rishinyan@slave1
rishinyan为用户名;slave1为/etc/hosts文件中的映射名
无需输入密码便可登陆。slave1可替换为master1,master2,slave2,slave3
master2也需做相同的操作
设置时间同步
当前采用master1作为时间同步服务端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 管理节点: #yum install chrony #cp /etc/chrony.conf /etc/chrony.conf.bak #vim /etc/chrony.conf(注释前4行,新增3行内容) #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 192.168.2.246 iburst allow 192.168.2.0/24 local stratum 10 sudo systemctl start chronyd sudo systemctl enable chronyd 客户端节点 #yum install chrony #cp /etc/chrony.conf /etc/chrony.conf.bak #vi /etc/chrony.conf(注释前4行,新增1行内容) #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 192.168.2.246 iburst #systemctl start chronyd #systemctl enable chronyd
JDK安装
准备
在所有节点,新建用于存放安装软件的目录
1 2 # 安装软件的目录 mkdir ~/module
将所需的安装包全部放入~/installed目录下
安装步骤
主节点master1解压jdk-8u281-linux-x64.tar.gz的压缩包
1 2 3 4 5 #将jdk解压到/rishinyan/module/jdk1.8.0_281 tar -zxvf ~/installed/Java-1.8/jdk-8u281-linux-x64.tar.gz -C ~/module #将解压后的文件夹重命名为java mv ~/module/jdk1.8.0_281/ ~/module/java
配置jdk环境变量~/.bashrc
所有节点 均需要配置环境变量(.bashrc 或 .bash_profile 均可)文件
按i进入编辑,在文件尾部添加如下内容
注:JAVA_HOME为jdk的解压路径,对应上面-C后的路径,如果解压路径改变,这里也将相应的改变
1 2 3 # Java export JAVA_HOME=/home/rishinyan/module/java export PATH=$JAVA_HOME/bin:$PATH
先按下esc ,后输入:wq!保存并退出编辑
测试是否安装成功
1 2 source ~/.bash_profile java -version
当出现openjdk version “1.8.0_281”,则说明安装成功。
将解压好的jdk分发给其他节点
1 2 3 4 5 6 7 8 # master2可替换为/etc/hosts文件中对应的ip,192.168.2.247 scp -r ~/module/java master2:~/module # slave1可替换为/etc/hosts文件中对应的ip,192.168.2.248 scp -r ~/module/java slave1:~/module # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 scp -r ~/module/java slave2:~/module # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 scp -r ~/module/java slave3:~/module
配置各个节点的Java环境变量
切换至集群其他节点,分别执行4.2.2及4.2.3的步骤,配置各个节点的Java环境变量
zookeeper安装
准备
选择需要安装zookeeper的节点(节点个数通常为奇数,至少三个节点),
本次选择slave1、slave2、slave3三个节点安装部署zookeeper。
在数据节点中选择一个,如slave1节点,~/installed目录中存在apache-zookeeper-3.7.1-bin.tar.gz的压缩包
安装步骤
解压apache-zookeeper-3.7.1-bin.tar.gz到指定目录~/module/下
这里我选择slave1节点
1 2 3 4 5 #将zookeeper解压到/rishinyan/package/apache-zookeeper-3.7.1-bin tar -zxvf ~/installed/Zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz -C ~/module/ #将apache-zookeeper-3.7.1-bin重命名为zookeeper mv ~/module/apache-zookeeper-3.7.1-bin/ ~/module/zookeeper
创建目录,用来存放数据和日志
所有zookeeper节点都需要创建~/data/zkData和~/logs/zookeeper
1 2 3 4 5 # ~/data/zkData 存放数据 mkdir -p ~/data/zkData #~/logs/zookeeper 存放日志 mkdir -p ~/logs/zookeeper
重命名zoo_sample.cfg为zoo.cfg
1 cp ~/module/zookeeper/conf/zoo_sample.cfg ~/module/zookeeper/conf/zoo.cfg
修改配置文件
修改或添加以下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 vi ~/module/zookeeper/conf/zoo.cfg # 按i进入编辑 # 修改存放数据的路径,设置为解压zookeeper的路径下的zkData目录 # rishinyan为用户目录 dataDir=/home/rishinyan/data/zkData # 在末尾添加zookeeper集群的ip和端口 # slave1为hosts中映射的主机名,可替换为192.168.2.248:2888:3888 # slave2为hosts中映射的主机名,可替换为192.168.2.249:2888:3888 # slave3为hosts中映射的主机名,可替换为192.168.2.250:2888:3888 server.1=slave1:2888:3888 server.2=slave2:2888:3888 server.3=slave3:2888:3888
先按下esc ,后输入:wq!保存并退出编辑
配置参数解读 server.A=B:C:D
A是一个数字,表示这个是第几号服务器;
B是这个服务器的ip地址;
C是这个服务器与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
注意,zookeeper节点的数量一定是奇数,且不少于三个节点
1 2 3 4 vi ~/module/zookeeper/bin/zkEnv.sh # 按i进入编辑 # 修改日志数据的路径 ZOO_LOG_DIR=/home/rishinyan/logs/zookeeper
在zkData目录下创建一个myid的文件
1 2 # 创建myid文件 touch ~/data/zkData/myid
编辑myid文件
在文件中添加与server对应的编号
zoo.cfg文件中server.1=slave1:2888:3888中slave1对应server.1。则在myid文件中输入1
按i进入编辑。结束后先按下esc ,后输入:wq!保存并退出编辑
配置zookeeper环境变量~/.bashrc
在slave1,slave2,slave3节点均需配置
按i进入编辑,在.bashrc文件尾部添加如下内容
1 2 3 # ZOOKEEPER_HOME为zookeeper的解压路径,对应上面-C后的路径,如果解压路径改变,这里也将相应的改变 export ZOOKEEPER_HOME=/home/rishinyan/module/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin
先按下esc ,后输入:wq!保存并退出编辑
拷贝配置好的zookeeper分发到其他数据节点上
这里我配置在slave1上,所以要分发到slave2和slave3
1 2 3 4 # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 scp -r ~/module/zookeeper slave2:~/module # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 scp -r ~/module/zookeeper slave3:~/module
其他数据节点修改分发节点的myid文件
1 2 mkdir -p ~/data/zkData vi ~/data/zkData/myid
将id改为/rishinyan/module/zookeeper/conf/zoo.cfg文件中对应ip的server对应的编号
如slave2的myid为2,slave3的myid为3
所有数据节点启动zookeeper
1 ~/module/zookeeper/bin/zkServer.sh start
查看状态
1 ~/module/zookeeper/bin/zkServer.sh status
每个节点安装并启动成功后,Mode会显示follower或leader
HadoopHA安装
准备
主节点的~/installed目录下有hadoop-3.3.4.tar.gz压缩包
这里我选择master1节点
安装步骤
解压apache-hadoop-3.3.4.tar.gz到/rishinyan/module/目录下
1 tar -zxvf ~/installed/Hadoop-3.3.4/hadoop-3.3.4.tar.gz -C ~/module/
将hadoop配置环境变量
所有节点均需配置.bashrc
按i进入编辑,在.bashrc文件尾部添加如下内容
1 2 3 # HADOOP_HOME为hadoop-3.3.4.tar.gz的解压路径,如果-C后改变,这里也得修改 export HADOOP_HOME=/home/rishinyan/module/hadoop-3.3.4 export PATH=$PATH:$HADOOP_HOME/bin
先按下esc ,后输入:wq!保存并退出编辑
测试是否安装成功
1 2 source ~/.bash_profile hadoop version
出现 Hadoop 3.2.2,则安装成功。
数据节点配置
1 2 3 4 5 6 7 8 9 10 vi ~/module/hadoop-3.3.4/etc/hadoop/workers # 按i进入编辑 # 将文件修改成以下格式 # slave1可替换为/etc/hosts文件中对应的ip,192.168.2.248 # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 slave1 slave2 slave3
先按下esc ,后输入:wq!保存并退出编辑
HDFS的配置
(1)配置Hadoop所使用Java的环境变量,告知hadoop我们jdk的安装目录
1 2 3 4 5 6 7 8 9 10 11 12 13 每个节点创建日志和pid目录 mkdir -p ~/pids/hadoop mkdir -p ~/logs/hadoop mkdir -p ~/data/hadoop vi ~/module/hadoop-3.3.4/etc/hadoop/hadoop-env.sh # 按i进入编辑 # 修改jdk路径,此为jdk的解压路径,如果路径改变,这里也得修改 export JAVA_HOME=/home/rishinyan/module/java # 因为hdfs要启动namenode、datanode等进程,会产生pid,hadoop要把pid记录在某个位置,默认是放在/tmp下。这里修改pid文件存放位置 export HADOOP_PID_DIR=/home/rishinyan/pids/hadoop # hadoop的日志存放路径 export HADOOP_LOG_DIR=/home/rishinyan/logs/hadoop
先按下esc ,后输入:wq!保存并退出编辑
(2)修改Hadoop核心配置文件
~/module/hadoop-3.3.4/etc/hadoop/core-site.xml
在<configuration></configuration>标签中添加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 vi ~/module/hadoop-3.3.4/etc/hadoop/core-site.xml <!-- 按i进入编辑 --> <configuration> <!-- 指定HDFS中NameNode的地址,要在master1和master2上启动namenode进程 --> <!-- 把两个NameNode的地址组装成一个集群mycluster --> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- 开启回收站 --> <!-- interval在这个回收周期之内,文件实际上被移动到/user/<username>/.Trash的目录下,而不是马上删除掉,默认单位是分钟60*24=1440 --> <property> <name>fs.trash.interval</name> <value>1440</value> </property> <!-- 垃圾回收的检查间隔,时间小于或等于fs.trash.interval --> <property> <name>fs.trash.checkpoint.interval</name> <value>1440</value> </property> <!-- datanode是个进程,把数据交给它后,它会把数据存储到本地磁盘,这里指定存储到磁盘的位置--> <property> <name>hadoop.tmp.dir</name> <value>/rishinyan/data/hadoop/tmp</value> </property> <!-- 故障转移需要的zookeeper集群设置一下。--> <!-- 可替换为192.168.2.248:2181,192.168.2.249:2181,192.168.2.250:2181--> <property> <name>ha.zookeeper.quorum</name> <value>slave1:2181,slave2:2181,slave3:2181</value> </property> <!-- 后面hive的兼容性配置 --> <!-- 注意配置中的root代表的是一个用户,hadoop.proxyuser.root.hosts 配置成*的意义,表示任意节点使用 hadoop 集群的代理用户 root 都能访问 hdfs 集群 --> <!-- hadoop引入了一个安全伪装机制,使得hadoop 不允许上层系统直接将实际用户传递到hadoop层,而是将实际用户传递给一个超级代理,由此代理在hadoop上执行操作,避免任意客户端随意操作hadoop --> <property> <name>hadoop.proxyuser.rishinyan.hosts</name> <value>*</value> </property> <!-- hadoop.proxyuser.rishinyan.groups 表示代理用户的组所属 --> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration>
先按下esc ,后输入:wq!保存并退出编辑
(3)修改HDFS核心配置文件:
~/module/hadoop-3.3.4/etc/hadoop/hdfs-site.xml
在<configuration></configuration>标签中添加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 vi ~/module/hadoop-3.3.4/etc/hadoop/hdfs-site.xml <!-- 按i进入编辑 --> <configuration> <!--副本数量--> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 完全分布式集群名称 --> <!-- 与core-site.xml中fs.defaultFS的集群名相同 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 集群中NameNode节点都有哪些 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <!-- 可替换为192.168.2.246:9000 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>master1:9000</value> </property> <!-- nn2的RPC通信地址 --> <!-- 可替换为192.168.2.247:9000 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>master2:9000</value> </property> <!-- nn1的http通信地址 --> <!-- 可替换为192.168.2.246:9870 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>master1:9870</value> </property> <!-- nn2的http通信地址 --> <!-- 可替换为192.168.2.247:9870 --> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>master2:9870</value> </property> <!-- 指定NameNode元数据在JournalNode上的存放位置 --> <!-- 当editlog发生改变,则直接写入JournalNode,以用来分享给其他NameNode --> <!-- 必须允许至少3个节点。当然可以运行更多,但是必须是奇数个 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master1:8485;master2:8485;slave1:8485;slave2:8485;slave3:8485/mycluster</value> </property> <!-- 声明journalnode本地磁盘存放数据的位置--> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/rishinyan/data/hadoop/jn</value> </property> <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应,防止namenode脑裂 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <value>shell(true)</value> </property> <!-- 使用隔离机制时需要ssh无秘钥登录--> <!-- /home/rishinyan为用户目录,如果是其它用户,这里要替换 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/rishinyan/.ssh/id_rsa</value> </property> <!-- namenode多目录配置 --> <!-- 可配置多个namenode目录,用逗号分隔开 --> <property> <name>dfs.namenode.name.dir</name> <value>/rishinyan/data/hadoop/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/rishinyan/data/hadoop/data</value> </property> <!-- 权限检查--> <property> <name>dfs.permissions.enabled</name> <value>true</value> </property> <!-- 访问代理类:client,mycluster,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.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
先按下esc ,后输入:wq!保存并退出编辑
YARN的配置
修改~/module/hadoop-3.3.4/etc/hadoop/yarn-site.xml
在<configuration></configuration>标签中添加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 vi ~/module/hadoop-3.3.4/etc/hadoop/yarn-site.xml <!-- 按i进入编辑 --> <configuration> <!-- reducer获取数据的方式,默认是shuffle --> <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的地址--> <!-- 标识集群中的RM。如果设置该选项,需要确保所有的RMs在配置中都有自己的id。 --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster-yarn</value> </property> <!-- RMs的逻辑id列表。可以自定义,此处设置为“rm1,rm2”。后面的配置将引用该id。 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 指定RM对应的主机名 --> <!-- 可替换为192.168.2.246 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master1</value> </property> <!-- 可替换为192.168.2.247 --> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>master2</value> </property> <!--yarn的web访问URI--> <!-- 可替换为192.168.2.246 --> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>master1:8088</value> </property> <!-- 可替换为192.168.2.247 --> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>master2:8088</value> </property> <!--指定集成的ZooKeeper的服务地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>slave1:2181,slave2:2181,slave3: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> <!-- 启用yarn ui2 --> <property> <name>yarn.webapp.ui2.enable</name> <value>true</value> </property> <!--开启日志聚合。日志聚合会在应用程序完成后收集每个容器的日志,并将这些日志移动到文件系统中--> <!-- 可以配置“yarn.nodemanager.remote-app-log-dir”和“ yarn.nodemanager.remote-app-log-dir-suffix”属性来确定将这些日志移至何处 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- yarn收集的日志保留时间,以秒为单位.2592000为30天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>2592000</value> </property> <!-- 聚合日志后在hdfs的存放位置 --> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/yarn/logs</value> </property> <!-- 聚合日志在本地的路径 <property> <name>yarn.nodemanager.local-dirs</name> <value>/data/app-log/local</value> </property> --> <!-- 日志历史服务的web url --> <!-- 可替换为http://192.168.2.248:19888/jobhistory/logs --> <property> <name>yarn.log.server.url</name> <value>http://slave1:19888/jobhistory/logs</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>master1:8030</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>master2:8030</value> </property> <property> <name>yarn.resourcemanager.address.rm1</name> <value>master1:8032</value> </property> <property> <name>yarn.resourcemanager.address.rm2</name> <value>master2:8032</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> </property> <property> <name>yarn.scheduler.maximun-allocation-mb</name> <value>102400</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>32</value> </property> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <!-- 可配置Yarn的调度策略 <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> <description>设置Yarn的调度策略实现类</description> </property> <property> <name>yarn.scheduler.fair.allocation.file</name> <value>/home/rishinyan/program/hadoop-3.3.4/etc/hadoop/fair-scheduler.xml</value> <description>Fair调度策略的配置文件</description> </property> --> <property> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>master1:8031</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>master2:8031</value> </property> <property> <name>yarn.resourcemanager.am.max-attempts</name> <value>4</value> </property> </configuration>
先按下esc ,后输入:wq!保存并退出编辑
MapReduce的配置
修改~/module/hadoop-3.3.4/etc/hadoop/mapred-site.xml
在<configuration></configuration>标签中添加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 vi ~/module/hadoop-3.3.4/etc/hadoop/mapred-site.xml <!-- 按i进入编辑 --> <configuration> <!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 开启历史日志服务,指定slave1为历史服务器 --> <!-- 可替换为slave1:10020 或 192.168.2.248:10020 --> <property> <name>mapreduce.jobhistory.address</name> <value>master1:10020</value> </property> <!-- 历史日志服务的WEBUI --> <!-- 可替换为slave1:19888 或 192.168.2.248:19888 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master1:19888</value> </property> <!-- 为MR应用程序添加了环境变量 --> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> </configuration>
先按下esc ,后输入:wq!保存并退出编辑
将Hadoop分发到其他节点上
1 2 3 4 5 6 7 8 # master2可替换为/etc/hosts文件中对应的ip,192.168.2.247 scp -r ~/module/hadoop-3.3.4 master2:~/module # slave1可替换为/etc/hosts文件中对应的ip,192.168.2.248 scp -r ~/module/hadoop-3.3.4 slave1:~/module # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 scp -r ~/module/hadoop-3.3.4 slave2:~/module # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 scp -r ~/module/hadoop-3.3.4 slave3:~/module
在各个JournalNode节点上,启动journalnode服务
这里JournalNode节点为hdfs-site.xml中配置的master1,master2,slave1,slave2,slave3
1 ~/module/hadoop-3.3.4/sbin/hadoop-daemon.sh start journalnode
在命令行输入jps,当出现JournalNode说明启动成功
在nn1即master1上,对其进行格式化,并启动
1 2 ~/module/hadoop-3.3.4/bin/hdfs namenode -format ~/module/hadoop-3.3.4/sbin/hadoop-daemon.sh start namenode
在nn2即master2上,同步nn1的元数据信息
1 ~/module/hadoop-3.3.4/bin/hdfs namenode -bootstrapStandby
如果再次提示是否重新格式化namenode要选择n
初始化HA在Zookeeper中状态
保证zookeeper集群已经启动
1 2 # 在master1上初始化HA在Zookeeper中状态 ~/module/hadoop-3.3.4/bin/hdfs zkfc -formatZK
启动HDFS服务,并验证自动故障转移
1 2 3 4 5 6 # 在master1上启动HDFS ~/module/hadoop-3.3.4/sbin/start-dfs.sh # 查看hdfs当前状态 hdfs haadmin -getServiceState nn1 hdfs haadmin -getServiceState nn2
目前hdfs状态如图
1 2 3 4 5 6 7 8 9 #输入jps,查找NameNode前面的进程号,如20883 NameNode,则20883为进程id jps # 将Active NameNode进程kill , 可通过jps命名获取namenode的进程id # kill -9 namenode的进程id # 如kill -9 20883 # 再次查看hdfs当前状态 hdfs haadmin -getServiceState nn2
在各个NameNode节点上启动ZKFailoverController进程,先在哪台机器启动,哪个机器的NameNode就是Active NameNode
杀死Active NameNode后,查看另一个StandBy NameNode是否变为Active NameNode
可通过http://master1:50070 或http://master2:50070 访问HDFS的web页面查看
启动Yarn,并验证自动故障转移
1 2 3 4 5 6 # 启动yarn ~/module/hadoop-3.3.4/sbin/start-yarn.sh # 查看服务状态 ~/module/hadoop-3.3.4/bin/yarn rmadmin -getServiceState rm1 ~/module/hadoop-3.3.4/bin/yarn rmadmin -getServiceState rm2
1 2 3 4 5 6 7 8 #输入jps,查找ResourceManager前面的进程号,如24485 ResourceManager,则24485为进程id jps # kill -9 ResourceManager的进程id # 如kill -9 24485 # 查看服务状态,查看active是否变为standby ~/module/hadoop-3.3.4/bin/yarn rmadmin -getServiceState rm2
可通过http://master1:8088 访问Yarn的web页面
启动日志历史服务
在配置日志历史服务的节点启动,这里是slave1
1 ~/module/hadoop-3.3.4/sbin/mr-jobhistory-daemon.sh start historyserver
命令行输入jps,出现JobHistoryServer则成功
可通过http://slave1:19888/jobhistory/logs 可查看日志
HBase
准备
1.首先保证Zookeeper集群的正常部署并启动,参考Hadoop-HA安装部署文档的zookeeper部分
2.Hadoop集群的正常部署并启动,参考Hadoop-HA安装部署文档的Hadoop-ha部分
3.数据节点的~/installed目录中存在hbase-2.4.14-bin.tar.gz压缩包。这里选择master1节点
安装步骤
解压HBase到指定目录
master1上将HBase解压至指定目录~/module
1 tar -zxvf ~/installed/Hbase-2.4.14/hbase-2.4.14-bin.tar.gz -C ~/module/
配置hbase环境变量~/.bashrc
slave1,slave2,slave3均需配置./bash_profile文件
按i进入编辑,在.bashrc文件尾部添加如下内容
1 2 3 #HBASE_HOME为hbase的解压路径 export HBASE_HOME=~/module/hbase-2.4.14 export PATH=$PATH:$HBASE_HOME/bin
先按下esc ,后输入:wq!保存并退出编辑
1 2 3 # 查看配置是否成功 source ~/.bash_profile hbase version
当出现HBase 2.4.14,说明环境变量配置成功
修改hbase-env.sh内容
1 2 3 4 5 6 7 8 9 10 vi ~/module/hbase-2.4.14/conf/hbase-env.sh # 按i进入编辑 # jdk的解压路径,如果解压路径改变,这里也要修改,这里参考Hadoop-HA安装部署文档的jdk部分 export JAVA_HOME=/home/runyu/module/java # 因为hbase要启动hmaster、hregionServer,会产生pid,hbase要把pid记录在某个位置,默认是放在/tmp下。这里修改pid文件存放位置 export HBASE_PID_DIR=/home/runyu/pids/hbase # 告诉HBase不管理自带的zookeeper export HBASE_MANAGES_ZK=false # hbase中hmaster和hregionserver日志存放位置 export HBASE_LOG_DIR=/home/runyu/logs/hbase
先按下esc ,后输入:wq!保存并退出编辑
修改hbase-site.xml内容
清空<configuration></configuration>标签内的内容,复制以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 每个节点创建日志和pid目录 mkdir -p ~/pids/hbase mkdir -p ~/logs/hbase mkdir -p ~/data/hbase vi ~/module/hbase-2.4.14/conf/hbase-site.xml <configuration> <!-- 每个regionServer的共享目录,用来持久化Hbase,默认情况下在/tmp/hbase下面,mycluster为hdfs中namenode的集群,参考Hadoop-HA安装部署文档中core-site.xml的配置 --> <property> <name>hbase.rootdir</name> <value>hdfs://mycluster/hbase</value> </property> <!-- hbase集群模式,false表示hbase的单机,true表示是分布式模式 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- hbase依赖的zk地址 --> <property> <name>hbase.zookeeper.quorum</name> <value>slave1:2181,slave2:2181,slave3:2181</value> </property> <!-- ZooKeeper的zoo.conf中的配置。 快照的存储位置 --> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/runyu/data/zkData</value> </property> <!-- 不在本地文件系统中跑hbase,作为数据存储 --> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> </property> <!-- HBase在Zookeeper中的根znode,所有的HBase对应要操作Zookeeper的znode都会用这个目录作为相对路径(默认情况下,所有HBase的Zookeeper文件路径都是相对路径,所以都会去这个目录下进行操作) --> <property> <name>zookeeper.znode.parent</name> <value>/hbase</value> </property> <!-- 本地文件系统 的临时文件夹 --> <property> <name>hbase.tmp.dir</name> <value>/home/runyu/data/hbase/tmp</value> </property> <!-- HBase Master的Web UI端口 --> <property> <name>hbase.master.info.port</name> <value>60010</value> </property> <property> <name>hbase.wal.provider</name> <value>filesystem</value> </property> </configuration>
编辑regionservers文件和创建backup-masters
启动HRegionServer服务的节点
1 2 3 4 5 6 7 8 vi ~/module/hbase-2.4.14/conf/regionservers # 添加如下内容 # slave1可替换为/etc/hosts文件中对应的ip,192.168.2.248 # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 slave1 slave2 slave3
创建backup-masters
1 2 3 4 vi ~/module/hbase-2.4.14/conf/backup-masters # 添加如下内容 # master2可替换为/etc/hosts文件中对应的ip,192.168.2.247 master2
软链接Hadoop配置文件到HBase
HBase读取Hadoop的配置
1 2 3 ln -s ~/module/hadoop-3.3.4/etc/hadoop/core-site.xml ~/module/hbase-2.4.14/conf/core-site.xml ln -s ~/module/hadoop-3.3.4/etc/hadoop/hdfs-site.xml ~/module/hbase-2.4.14/conf/hdfs-site.xml
将HBase分发给其余的节点
这里选择了master1节点,将hbase分发到master2,slave1,slave2和slave3节点中
1 2 3 4 5 6 7 8 # master2可替换为/etc/hosts文件中对应的ip,192.168.2.247 scp -r ~/module/hbase-2.4.14/ master2:~/module/ # slave1可替换为/etc/hosts文件中对应的ip,192.168.2.248 scp -r ~/module/hbase-2.4.14/ slave1:~/module/ # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 scp -r ~/module/hbase-2.4.14/ slave2:~/module/ # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 scp -r ~/module/hbase-2.4.14/ slave3:~/module/
启动HBase
这里选择master1节点
1 ~/module/hbase-2.4.14/bin/start-hbase.sh
验证启动
1 2 #输入jps,查看是否出现HRegionServer则成功 jps
master1出现HMaster和HRegionServer
启动成功后,可以通过“host:port”的方式来访问HBase管理页面,例如:
http://slave1:60010
如果集群之间的节点时间不同步,会导致regionserver无法启动,抛出ClockOutOfSyncException异常。
修复提示:
a、同步时间服务
b、属性:hbase.master.maxclockskew设置更大的值
Hive
准备
1.Hadoop集群的正常部署并启动,参考Hadoop-HA安装部署文档的Hadoop-ha部分
2.正确安装mysql5.7,用来存放hive的元数据
3.数据节点的~/installed目录下有apache-hive-3.1.3-bin.tar.gz和mysql-connector-java-5.1.47.jar压缩包,这里选择master1节点
安装步骤
解压Hive到指定目录
master1上将Hive解压至指定目录~/module
1 2 3 4 tar -zxvf ~/installed/Hive-3.1.3/apache-hive-3.1.3-bin.tar.gz -C ~/module/ # 将apache-hive-3.1.3-bin重命名为hive mv ~/module/apache-hive-3.1.3-bin/ ~/module/hive
配置hive环境变量~/.bashrc
按i进入编辑,在.bashrc文件尾部添加如下内容
1 2 3 #HIVE_HOME为hbase的解压路径 export HIVE_HOME=/home/runyu/module/hive export PATH=$PATH:$HIVE_HOME/bin
先按下esc ,后输入:wq!保存并退出编辑
1 2 3 # 查看配置是否成功 source ~/.bash_profile hive --version
当出现Hive 3.1.2,说明环境变量配置成功
修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh
1 mv ~/module/hive/conf/hive-env.sh.template ~/module/hive/conf/hive-env.sh
配置hive-env.sh文件
1 2 3 4 5 6 7 8 vi ~/module/hive/conf/hive-env.sh # 按i进入编辑模式 # Hadoop的解压路径,如果解压路径改变,这里也要修改,这里参考Hadoop-HA安装部署文档的hadoop-ha部分 export HADOOP_HOME=/home/runyu/module/hadoop-3.3.4 # Hive配置文件的路径 export HIVE_CONF_DIR=/home/runyu/module/hive/conf export HIVE_AUX_JARS_PATH=/home/runyu/module/hive/lib
先按esc键,后输入:wq!保存并退出
新建hive-site.xml文件,并添加配置项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 # 新建hive-site.xml文件 touch ~/module/hive/conf/hive-site.xml # 添加配置项 vi ~/module/hive/conf/hive-site.xml # 按i进入编辑模式 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- JDBC连接字符串。master1为mysql数据库ip地址,可替换为192.168.2.246,参考Hadoop-HA部署文档映射文件部分;3306为mysql的端口号;hive为数据库名;createDatabaseIfNotExist为创建hive数据库;不使用SSL --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master1:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value> </property> <!-- JDBC驱动 --> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <!-- MYSQL数据库的用户名 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <!-- MYSQL数据库的用户名对应的密码 --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Lxy932986998.</value> </property> <!-- 数据仓库在HDFS上的位置 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/hive/warehouse</value> </property> <!-- 强制metastore的schema一致性,开启的话会校验在meatastore中存储信息的版本和hive的jar包中的版本的一致性,并且关闭自动schema迁移,用户必须手动的升级hive并且迁移schema,关闭的话只会在版本不一致时给出警告 --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <!-- schema在不存在时,是否自动创建 --> <property> <name>datanucleus.schema.autoCreateAll</name> <value>true</value> </property> <!-- 远程metastore的uri,用于metastore的客户端连接到远程metastore --> <property> <name>hive.metastore.uris</name> <value>thrift://master1:9083,thrift://master2:9083</value> </property> <!-- 绑定thrift服务的端口,主要用来建立与thrift服务连接 --> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <!-- 配置thrift服务绑定的ip,需要在master1启动hive服务,thrift服务才能与master1建立连接,master1可替换为192.168.2.246,参考Hadoop-HA部署文档映射文件部分。thrift主要用来实现hiveserver2瘦客户端 --> <property> <name>hive.server2.thrift.bind.host</name> <value>master1</value> </property> <!-- Hive元数据存储版本的验证 --> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> <property> <name>hive.repl.rootdir</name> <value>/hive/repl</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/home/runyu/data/hive/hiveuser</value> </property> <property> <name>hive.download.resources.dir</name> <value>/home/runyu/data/hive/tmp/${hive.session.id}_resources</value> </property> <property> <name>hive.querylog.location</name> <value>/home/runyu/logs/hive/qrylog</value> </property> <property> <name>hive.server2.logging.operation.log.location</name> <value>/home/runyu/logs/hive/operationlog</value> </property> <property> <name>hive.zookeeper.quorum</name> <value>slave1:2181,slave2:2181,slave3:2181</value> </property> <property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value> </property> <property> <name>hive.server2.zookeeper.namespace</name> <value>hiveserver2_zk</value> </property> <property> <name>hive.server2.webui.host</name> <value>master1</value> </property> <property> <name>hive.server2.webui.port</name> <value>10002</value> </property> </configuration>
先按下esc键,后输入:wq!保存并退出
配置日志地址,修改hive-log4j.properties
1 2 3 4 5 6 7 8 9 10 11 12 # 存放日志的目录 mkdir -p ~/logs/hive/ # 将hive-log4j2.properties.template改名为hive-log4j2.properties cp ~/module/hive/conf/hive-log4j2.properties.template ~/module/hive/conf/hive-log4j2.properties # 编辑hive-log4j2.properties vi ~/module/hive/conf/hive-log4j2.properties # 将hive.log日志的位置改为hive主目录下的logs目录 property.hive.log.dir = /home/runyu/logs/hive
拷贝jar包放入Hive主目录下的lib目录
1 2 3 4 5 6 # 拷贝JDBC的jar包放入Hive主目录下的lib目录 cp mysql-connector-java-5.1.47.jar ~/module/hive/lib # 拷贝guava最新的jar包放入Hive主目录下的lib目录 cp ~/module/hadoop-3.3.4/share/hadoop/hdfs/lib/guava-27.0-jre.jar ~/module/hive/lib/ # 删除hive自带的旧guava包 rm -f ~/module/hive/lib/guava-19.0.jar
分发hive
1 scp -r ~/module/hive master2:~/module
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #进入master2 ssh master2 # 编辑hive-site文件 vi ~/hive/conf/hive-site.xml <!-- 修改属性为下面内容 --> <property> <name>hive.server2.webui.host</name> <value>master2</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>master2</value> </property>
启动hive
初次启动hive要初始化
1 ~/module/hive/bin/schematool -dbType mysql -initSchema -verbose
如果提示Error: Table ‘CTLGS’ already exists。请进入mysql删除hive数据库
1 nohup ~/module/hive/bin/hive --service metastore > ~/logs/hive/metastore.log &
启动hiveserver2
1 nohup ~/module/hive/bin/hive --service hiveserver2 > ~/logs/hive/hiveserver2.log &
ElasticSearch
准备
1.数据节点的~/installed目录中存在elasticsearch-8.4.3-linux-x86_64.tar.gz压缩包。这里选择slave1节点
安装步骤
解压es到指定目录
slave1上将es解压至指定目录~/module
1 tar -zxvf ~/installed/ElasticSearch-8.4.3/elasticsearch-8.4.3-linux-x86_64.tar.gz -C ~/module/
修改配置文件
修改elasticsearch.yml
1 vi ~/module/elasticsearch-8.4.3/config/elasticsearch.yml
按i进入编辑,修改文件的内容,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # elasticsearch集群的名字 cluster.name: myelasticsearch # 本节点的映射名,对应/etc/hosts文件,这里是slave1 node.name: slave1 # 网络节点 network.host: slave1 # 通信端口 http.port: 9200 # es的集群 discovery.seed_hosts: ["slave1", "slave2","slave3"] cluster.initial_master_nodes: ["slave1", "slave2","slave3"] # 数据存放路径 path.data: /home/runyu/data/elasticsearch # 日志存放路径 path.logs: /home/runyu/logs/elasticsearch bootstrap.memory_lock: false http.cors.enabled: true http.cors.allow-origin: "*" xpack.security.enabled: false
先按下esc ,后输入:wq!保存并退出编辑
修改jvm.option配置文件
根据服务器的内存大小,调整jvm堆内存大小
1 vi ~/module/elasticsearch-8.4.3/config/jvm.options
按i进入编辑,修改文件的内容,如下
先按下esc ,后输入:wq!保存并退出编辑
将已经安装好的elasticsearch分发到其他节点
这里选择了slave1节点,将elasticsearch分发到slave2和slave3节点中
1 2 3 4 # slave2可替换为/etc/hosts文件中对应的ip,192.168.2.249 scp -r ~/module/elasticsearch-8.4.3/ slave2:~/module/ # slave3可替换为/etc/hosts文件中对应的ip,192.168.2.250 scp -r ~/module/elasticsearch-8.4.3/ slave3:~/module/
修改其余节点的配置文件
修改slave2和slave3节点的elasticsearch的elasticsearch.yml文件
这里用slave2举例,slave3进行相似操作
1 vi ~/module/elasticsearch-8.4.3/config/elasticsearch.yml
按i进入编辑,修改文件的内容,如下
1 2 3 4 # 本节点的映射名,对应/etc/hosts文件,这里是slave2 node.name: slave2 # 网络节点 network.host: slave2
先按下esc ,后输入:wq!保存并退出编辑
slave3也进行相似的操作,将slave1换为slave3
修改系统配置
es服务对服务器的资源要求较多,包括内存大小,线程数,需要给runyu用户解开资源的限制
普通用户打开文件的最大数限制
es需要大量的创建索引文件,需要大量的打开系统的文件。所以需要解除linux系统中打开文件最大数目的限制,不然会抛出错误,如下
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
es集群的所有节点都需要打开文件数据的限制
1 sudo vi /etc/security/limits.conf
会提示输入runyu用户的密码,输入密码后
按i进入编辑,在文件末尾追加内容,如下
1 2 3 4 * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
先按下esc ,后输入:wq!保存并退出编辑
普通用户启动线程数限制
修改普通用户可以创建的最大线程数,用户可创建线程数太小,会导致
max number of threads [1024] for user [es] likely too low, increase to at least [4096]
es集群的所有节点都需要修改
1 sudo vi /etc/security/limits.d/90-nproc.conf
按i进入编辑,在修改文件内容,如下
1 2 3 4 * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * soft nproc 4096
先按下esc ,后输入:wq!保存并退出编辑
普通用户调大虚拟内存
最大虚拟内存太小,导致抛出错误
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
es集群的所有节点都需要调大虚拟内存
1 sudo vi /etc/sysctl.conf
按i进入编辑,在文件末尾追加内容,如下
先按下esc ,后输入:wq!保存并退出编辑
执行以下命令,使配置生效
注:当节点修改完系统配置,需要重新连接secureCRT或xsehll才可生效
启动elasticsearch
对与elasticsearch上的节点使用启动命令,启动es服务
1 nohup ~/module/elasticsearch-8.4.3/bin/elasticsearch > ~/logs/elasticsearch/elasticsearch.log &
启动elasticsearch后,jsp可看到es服务进程,并且访问页面,看到es启动后的一些信息
http://slave1:9200/?pretty