赞
踩
systemctl stop firewalld #关闭防火墙
systemctl start firewalld #开启防火墙
systemctl disable firewalld #设置开机禁用防火墙
systemctl enable firewalld #设置开机启用防火墙
systemctl status firewalld #查看防火墙状态
hostnamectl set-hostname master && bash #设置主机名为master,立即生效.
hostnamectl set-hostname worker1 && bash #设置主机名为worker1,立即生效.
hostnamectl set-hostname worker2 && bash #设置主机名为worker2,立即生效.
vim /etc/hosts #进入hosts文件
192.168.10.100 master #IP地址 主机名
192.168.10.101 worker1 #IP地址 主机名
192.168.10.102 worker2 #IP地址 主机名
vim /etc/sysconfig/network-scripts/ifcfg-ens33 #进入配置IP文件 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" #改为static DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="29eb0e94-b7d2-445a-93d9-d6755d24f55a" DEVICE="ens33" ONBOOT="no" #改为yes IPADDR=192.168.10.100 #设置静态IP GATEWAY=192.168.10.2 #配置网关 DNS1=192.168.10.2 #配置DNS systemctl restart network #重启网络服务
vim /etc/profile #进入环境变量配置文件
#添加以下内容--------------------
export JAVA_HOME=/opt/jdk1.8.0
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
#---------------------------------
source /etc/profile #使用source命令你个使配置文件生效
ssh-keygen -t rsa #在主节点使用命令,一直按回车
ssh-copy-id worker1 #将公共密钥填充到另一个节点worker1上
ssh-copy-id worker2 #将公共密钥填充到另一个节点wokrer2上
ssh worker1 #验证是否免密成功
ssh worker2 #验证是否免密成功
vim /etc/profile #进入环境变量配置文件
#添加以下内容--------------------
export HADOOP_HOME=/opt/hadoop3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#---------------------------------
source /etc/profile #使用source使配置文件生效
配置文件路径在hadoop中etc文件夹
修改hadoop-env.sh
export JAVA_HOME=/usr/local/program/jdk8 #jdk文件路径
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
修改core-site.xml文件
<configuration> <!-- 在configuration标签内添加以下内容 --> <!-- fs.default.name已经过时了,现在一般都用fs.defaultFS--> <!-- NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <!-- 临时文件存放位置 --> <property> <name>hadoop.tmp.dir</name> <value>file:/opt/app/hadoop/tmp</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> </configuration>
修改hdfs-site.xml
<configuration> <!-- namenode存放的位置,老版本是用dfs.name.dir --> <property> <name>dfs.namenode.name.dir</name> <value>/usr/hadoop3/hdfs/name</value> </property> <!-- datanode存放的位置,老版本是dfs.data.dir --> <property> <name>dfs.datanode.data.dir</name> <value>/usr/hadoop3/hdfs/data</value> </property> <!-- 设置副本数量 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- namenode运行在哪儿节点,默认是0.0.0.0:9870,在hadoop3.x中端口从原先的50070改为了9870 --> <property> <name>dfs.namenode.http-address</name> <value>master:9870</value> </property> <!-- secondarynamenode(备用节点)运行在哪个节点,默认0.0.0.0:9868 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9868</value> </property> </configuration> <!--------------------------------- 其它配置权限 --------------------------------------> <!-- 关闭文件上传权限检查 --> <property> <name>dfs.permissions.enalbed</name> <value>false</value> </property>
修改yarn-site.xml
<configuration> <!-- resourcemanager运行在哪个节点 --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <!-- nodemanager获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 关闭虚拟内存检查 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
修改mapred-site.xml
<configuration>
<!-- 设置mapreduce在yarn平台上运行 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配了上面这个下面这个也得配, 不然跑mapreduce会找不到主类。MR应用程序的CLASSPATH-->
<property>
<name>mapreduce.application.classpath</name>
<value>/opt/hadoop3.3.6/share/hadoop/mapreduce/*:/opt/hadoop-3.3.6/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
修改workers
vim workers
# 删掉里面的localhost,添加以下内容,你的两个从节点的ip映射
worker1
worker2
# 分发jdk,$PWD:获取当前所在目录的绝对路径 scp -r jdk1.8.0_162 root@worker1:$PWD scp -r jdk1.8.0_162 root@worker2:$PWD # 分发hadoop scp -r hadoop-3.3.3 root@worker1:$PWD scp -r hadoop-3.3.3 root@worker2:$PWD # 分发/etc/hosts scp /etc/hosts root@worker1:/etc/ scp /etc/hosts root@worker2:/etc/ # 分发/etc/profile scp /etc/profile root@worker1:/etc/ scp /etc/profile root@worker2:/etc/ # 然后在两个从节点上执行 source /etc/profile
hdfs namenode -format
# 启动hadoop
start-all.sh
# 查看进程
jps
主节点进程
ResourceManager
NodeManager
Jps
DataNode
SecondaryNameNode
NameNode
从节点
DataNode
NodeManager
从节点
DataNode
NodeManager
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
export ZK_HOME=/opt/zookeeper
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin
cd conf #进入zookeep的conf文件夹
mv zoo-sample.cfg zoo.cfg #将zoo-sample.cfg改名为zoo.cfg
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=D:\\zookeeper\\data # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 ## Metrics Providers # # https://prometheus.io Metrics Exporter #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider #metricsProvider.httpPort=7000 #metricsProvider.exportJvmInfo=true #server.1 = 主机ip(主机映射名):A:B #server.2 = 主机ip(主机映射名):A:B #server.3 = 主机ip(主机映射名):A:B server.1 = 主机ip(主机映射名):2888:3888 server.2 = 主机ip(主机映射名):2888:3888 server.3 = 主机ip(主机映射名):2888:3888
配置文件相关说明
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
initLimit:LF初始通信时限,集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
syncLimit:LF同步通信时限,集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort:客户端连接端口,这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
autopurge.snapRetainCount:保留数量。
autopurge.purgeInterval:清理时间间隔,单位:小时。
server.N = YYY:A:B,其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能时A端口和B端口不一样。
5、创建myid文件
#在dataDir=D:\\zookeeper\\data文件下创建myid
vim myid
#在myid中填写数字序号,序号和zoo.cfg中server序号相同
scp -r /opt/zookeeper/ root@worker1:/opt/
scp -r /opt/zookeeper/ root@worker2:/opt/
zkServe.sh start #开启zookeeper服务
zkServer.sh status #关闭zookeeper服务
修改core-site.xml
<configuration> <!-- 在ha模式中指定hdfs集群的逻辑名称:把多个NameNode的地址组装成一个集群 --> <property> <name>fs.defaultFS</name> <value>hdfs://my-hdfs</value> </property> <!-- 声明hadoop工作目录:hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>file:/opt/app/hadoop/tmp</value> </property> <!-- 配置HDFS网页登录使用的静态用户:Root--> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> <!-- 指定zookeeper集群的地址:zkfc要连接的zkServer地址,用于管理hdfs集群 --> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,worker1:2181,worker2:2181</value> </property> </configuration>
修改hdfs-site.xml
<configuration> <!-- 指定逻辑名称,自动寻找NameNode节点 --> <property> <name>dfs.nameservices</name> <value>my-hdfs</value> </property> <!-- 把定义的逻辑名称指向各个namenode的别名,即集群中NameNode节点 --> <property> <name>dfs.ha.namenodes.my-hdfs</name> <value>nn1,nn2</value> </property> <!-- NameNode RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.my-hdfs.nn1</name> <value>master:8020</value> </property> <property> <name>dfs.namenode.rpc-address.my-hdfs.nn2</name> <value>worker1:8020</value> </property> <!-- 指定namenode别名对应的IP地址即NameNode连接地址:NameNode的http通信地址--> <property> <name>dfs.namenode.http-address.my-hdfs.nn1</name> <value>master:9870</value> </property> <property> <name>dfs.namenode.http-address.my-hdfs.nn2</name> <value>worker1:9870</value> </property> <!-- 配置JournalNode集群的地址,指定编辑日志的共享目录 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;worker1:8485;worker2:8485/my-hdfs</value> </property> <!-- 指定JouralNode节点存放编辑日志的存储路径 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/program/hadoop/datas/qjm</value> </property> <!-- namenode存放的位置,老版本是用dfs.name.dir --> <property> <name>dfs.namenode.name.dir</name> <value>/usr/hadoop3/hdfs/name</value> </property> <!-- datanode存放的位置,老版本是dfs.data.dir --> <property> <name>dfs.datanode.data.dir</name> <value>/usr/hadoop3/hdfs/data</value> </property> <!-- 开启自动故障转移功能: client用于确定哪个NameNode为Active --> <property> <name>dfs.client.failover.proxy.provider.my-hdfs</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 指定ha出现故障时的隔离方法 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <value>shell(true)</value> </property> <!-- 指定隔离主机的私钥路径(主备节点间相互免密钥,指定私匙地址)--> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- 开启自动故障转移功能 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--副本数量,默认3个--> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- secondarynamenode(备用节点)运行在哪个节点,默认0.0.0.0:9868 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9868</value> </property> </configuration>
修改mapred-stie.xml
<configuration> <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 配了上面这个下面这个也得配, 不然跑mapreduce会找不到主类。MR应用程序的CLASSPATH--> <property> <name>mapreduce.application.classpath</name> <value>/opt/hadoop3.3.6/share/hadoop/mapreduce/*:/opt/hadoop-3.3.6/share/hadoop/mapreduce/lib/*</value> </property> <!-- 指定mapreduce jobhistory地址:历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <!-- 任务历史服务器的web地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <!-- 配置运行过的日志存放在hdfs上的存放路径 --> <property> <name>mapreduce.jobhistory.done-dir</name> <value>/history/done</value> </property> <!-- 配置正在运行中的日志在hdfs上的存放路径 --> <property> <name>mapreudce.jobhistory.intermediate.done-dir</name> <value>/history/done/done_intermediate</value> </property> <!--以下必须配置,否则运行MapReduce会提示检查是否配置--> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/program/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/program/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/program/hadoop</value> </property> </configuration>
修改yarn-site.xml文件
<configuration> <!-- 开启resourcemanager(RM)高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>my-hdfs</value> </property> <!-- 指定RM的名字、逻辑列表 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>worker1</value> </property> <!-- YARN资源管理器(ResourceManager)的Web用户界面的地址 --> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>master:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>worker1:8088</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,worker1:2181,worker2:2181</value> </property> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 开启日志聚合 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://master:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</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.vmem-check-enabled</name> <value>false</value> </property> </configuration>
# 分发hadoop配置好的文件
scp -r /opt/hadoop/ root@worker1:/opt/
scp -r /opt/hadoop/ root@worker2:/opt/
启动zookeeper
zkServer.sh start #三个节点都要启动
zkServer.sh status #查看状态受否正常
4、启动JournalNode
hdfs --daemon start journalnode #三个节点都要启动
5、格式化namenode
hdfs namenode -format #格式化namenode,主节点格式化
#格式化前清除目录数据,data文件,name文件
6、格式化ZKFC,启动ZKFC
hdfs zkfc -formatZK #格式化ZKFC,主节点格式化
hdfs --daemon start zkfc #启动ZKFC,主节点启动
7、启动namenode
hdfs --daemon start namenode #主节点启动
8、启动副节点namenode
hdfs namenode -bootstrapStandby #副节点启动namenode,同步namenode
9、启动其他节点
start-all.sh
hdfs --daemon start zkfc #主节点启动
zkServer.sh start #三个节点都要启动
start-all.sh start #主节点启动
主节点
[root@node001 hadoop]# jps
18946 QuorumPeerMain
25123 NameNode
26628 DFSZKFailoverController
26182 DataNode
27368 ResourceManager
27561 NodeManager
24666 JournalNode
27965 Jps
副节点
[root@node002 hadoop]# jps
26515 Jps
25939 NameNode
21860 QuorumPeerMain
26055 DataNode
26217 DFSZKFailoverController
26398 NodeManager
25247 JournalNode
其它节点
[root@node003 hadoop]# jps
28421 NodeManager
27783 DataNode
28727 Jps
24650 QuorumPeerMain
27583 JournalNode
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。