-
安装虚拟机
-
VMware 创建虚拟机,一路 next 就好,可以在安装时配置好 ip,不用修改 ifcfg-end33 文件
-
先创建一个模板虚拟机出来,后面的其他机器可以在这基础上克隆,模板机需要修改的:
-
配置好 ip(ping locahost/网关/外网都能 ping 通即可)
-
关闭防火墙
systemctl stop firewalld systemctl disable firewalld
-
-
关闭模板机,克隆三个机子出来,启动,修改 ip 后重启网卡(之后的操作就可以在 XShell 做了)
vi /etc/sysconfig/network-script/ifcfg-ens33 # 将ip修改,BOOTPROTO修改成static # 重启网卡 systemctl restart network
-
修改三台机子的 hostname 和 hosts 映射文件
hostnamectl set-hostname XXX(要取的主机名) # 修改主机名 vi /etc/hosts
-
设置 ssh 免密登录
# 先创建dsa码 ssh-keygen -t dsa -P '' -f /root/.ssh/id_dsa # 将各自的id_dsa.pub发送给要免密登录的机器,添加到.ssh文件夹中的authorized_keys文件中 # shmily01机器发送 scp id_dsa.pub shmily02:`pwd`/shmily01_id_dsa.pub # shmily02机器添加 cat shmily01_id_dsa.pub > authorized_keys 01即可免密登录到02
-
到此,基本配置完成啦
2.安装 jdk
-
将需要的压缩包通过 XFtp 上传到虚拟机中
-
将 jdk 解压,配置环境变量
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /opt/module vi /etc/profile export JAVA_HOME=/opt/module/jdk export PATH=$PATH:$JAVA_HOME/bin . /etc/profile
3. 安装 zookeeper
-
解压 zookeeper 压缩包,配置环境变量
-
复制 conf 中的 zoo_sample.cfg 为 zoo.cfg 并修改
dataDir=/var/hadoop/zk # 在最后添加 server.1=192.168.47.11:2888:3888 server.2=192.168.47.12:2888:3888 server.3=192.168.47.13:2888:3888
-
在/var/hadoop/zk 中创建 myid, 192.168.47.11 写 1 192.168.47.12 写 2 192.168.47.13 写 3,和 server 后的数字一致
zkServer.sh start # 启动 zkServer.sh status # 查看状态
4.安装 hadoop
-
解压压缩包,配置环境变量
-
修改配置文件中的 JAVA_HOME(hadoop-env.sh,yarn-env.sh,mapred-env.sh)
-
直接来搭建完全分布式吧!
-
修改 core-site.xml
<configuration> <!--用来指定hdfs的路径,mycluster为固定属性名和hdfs-site中mycluster--> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!--用来指定hadoop运行时产生文件的存放目录--> <property> <name>hadoop.tmp.dir</name> <value>/var/hadoop/ha</value> </property> <!-- 配置zookeeper队列 --> <property> <name>ha.zookeeper.quorum</name> <value>shmily01:2181,shmily02:2181,shmily03:2181</value> </property> </configuration>
-
修改 hdfs-site.xml
<configuration> <!--配置block副本数量--> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!--nn1的RPC通信地址--> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>shmily01:8020</value> </property> <!--nn2的RPC通信地址--> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>shmily02:8020</value> </property> <!--nn1的http通信地址--> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>shmily01:50070</value> </property> <!--nn2的http通信地址--> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>shmily02:50070</value> </property> <!--指定namenode的元数据在JournalNode上的存放位置, 这样,namenode2可以从jn集群里获取最新的namenode的信息,达到热备的效果--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://shmily01:8485;shmily02:8485;shmily03:8485/mycluster</value> </property> <!--指定JournalNode存放数据的位置--> <property> <name>dfs.journalnode.edits.dir</name> <value>/var/hadoop/ha/jn</value> </property> <!--配置切换的实现方式--> <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>/root/.ssh/id_dsa</value> </property> <!--开启namenode故障时自动切换--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件,生产环境不配置此项,默认为true--> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
-
修改 slaves,添加 datanode
shmily01 shmily02 shmily03
-
添加 yarn 了,修改 mapred-site.xml,让 mp 支持 yarn
<!--指定mapreduce运行在yarn上--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
修改 yarn-site.xml
<!--NodeManager获取数据的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 开启YARN HA --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster1</value> </property> <!-- 指定两个resourcemanager的名称 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>shmily02</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>shmily03</value> </property> <property><name>yarn.resourcemanager.webapp.address.rm1</name> <value>shmily02:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>shmily03:8088</value> </property> <!-- 配置zookeeper的地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>shmily01:2181,shmily02:2181,shmily03:2181</value> </property> <!-- 是否启动一个线程检查每个任务正在使用的物理内存量,如果任务超出分配制,则直接将其杀掉,默认是true --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
-
记得把这个 hadoop 分发给其他俩台机器嗷
-
分别启动三台机器的 journalnode
hadoop-daemon.sh start journalnode
-
在一台 namenode 中格式化第一台 namenode
hadoop namenode -format
启动第一台 namenode
hadoop-daemon.sh start namenode
-
在第二台 namenode 中同步第二台 namenode
hdfs namenode -bootstrapStandby
-
在第一台 shmily01 中的格式化 zookeeper
hdfs zkfc -formatZK
-
好了好了,可以启动了
start-all.sh # 开启 stop-all.sh # 关闭所有
-
然后使用 jps 查看一下进程,resourcemanager 应该是没起来,需要去 shmily02,shmily03 中手动启动
yarn-daemon.sh start resourcemanager
-
jps 是这样就 ok 了
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于