前言
本次实行在Hadoop伪分布式的基础上完成,需要准备四台假造机(这里作者的主机名依次为w202235532,w202235533,w202235534,w202235535),选择其中一台搭建好伪分布即可。
任务1:hadoop完全分布式搭建
hadoop高可用搭建及mapreduce高可用设置都是在hadoop完全分布式的基础上完成的,所以这里先进行完全分布搭建。推荐使用拍摄快照的方式,阶段性地完成任务。
图1 快照
(1)环境准备。
起首需要安装Java。为了方便后面的文件分配,我们先从免密钥开始。确保全部主机互通,这里可以使用ping下令测试,选择“ping+主机名”的方式。如果发现测试失败,便是映射没有设置好,可以参考后面图12解决。
图2 主机互通性检查
然后设置w202235532到其他节点的SSH免密登录。先生成密钥,将公钥分发到其他节点即可。测试免密登录,下令行输入ssh "hostname",以此类推。
- #生成密钥
- ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
- #分发密钥
- for node in w202235533 w202235534 w202235535; do
- ssh-copy-id -i ~/.ssh/id_rsa.pub $node
- done
- #测试免密登录
- ssh w202235533
- ssh w202235534
- ssh w202235535
复制代码
图3 生成密钥
图4 分发公钥
安装Java,如果其他节点未安装Java,可以将搭建主机w202235532伪分布式时的Java压缩包分发。这里输入下令行将 jdk-7u67-linux-x64.rpm 分发到集群全部节点的 /root 目录。
- for node in w202235533 w202235534 w202235535; do
- scp /root/jdk-7u67-linux-x64.rpm root@$node:/root/;
- done
复制代码
图5 分发压缩包
然后在全部节点安装 JDK。下令行输入:
- for node in w202235533 w202235534 w202235535; do
- ssh root@$node "rpm -ivh /root/jdk-7u67-linux-x64.rpm";
- done
复制代码
图6 解压压缩包
解压完成后进行验证。下令行输入:
- for node in w202235533 w202235534 w202235535; do
- ssh root@$node "java -version";
- done
复制代码
图7 验证
如图所示,全部节点成功安装Java,接下来需要设置环境。在/etc/profile文件中添加代码后使文件生效。下令行输入:
- for node in w202235533 w202235534 w202235535; do
- ssh root@$node 'echo "export JAVA_HOME=/usr/java/jdk1.7.0_67" >> /etc/profile';
- ssh root@$node 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile';
- ssh root@$node 'source /etc/profile';
- done
复制代码
图8 设置环境
Java环境已经设置好,接下来同步全部服务器时间(这里一般都已经同步,可以自行查看时间,再决定要不要进行同步操纵)。下令行输入:
- for node in w202235532 w202235533 w202235534 w202235535; do
- ssh root@$node 'date -s "2020-02-01 15:11:00"';
- done
复制代码图9 同步时间
同步之后,查看全部节点机器IP映射。下令行输入:
- for node in w202235532 w202235533 w202235534 w202235535;do
- ssh root@$node "cat /etc/sysconfig/network";
- done
复制代码
图10 机器IP映射
编辑hosts文件,全部节点相同设置。这里我选择直接将文件分配。
- for node in w202235533 w202235534 w202235535;do
- scp /etc/hosts $node:/etc
- ssh root@$node "cat /etc/hosts"
- done
复制代码
图11 别名
图12 分配文件
关闭SELinux。下令行输入:
- for node in w202235532 w202235533 w202235534 w202235535;do
- ssh root@$node "cat /etc/sysconfig/selinux";
- ssh root@$node "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux";
- done
复制代码
图13 修改selinux设置文件
关闭防火墙。下令行输入:
- for node in w202235532 w202235533 w202235534 w202235535; do
- ssh root@$node "service firewalld stop"
- ssh root@$node "chkconfig firewalld off"
- done
复制代码
图14 关闭防火墙
因为在安装linux的时间已经将上面基本操纵完成,所以这里找不到很正常。
(2)修改设置文件(覆盖伪分布)。
设置core-site.xml。
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://w202235532:9000</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/var/jxxy/hadoop/full</value>
- </property>
- </configuration>
复制代码 设置hdfs-site.xml。
- <property>
- <name>dfs.replication</name>
- <value>2</value>
- </property>
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>w202235533:50090</value>
- </property>
复制代码 设置slaves文件。
- w202235533
- w202235534
- w202235535
复制代码 (3)分发Hadoop和环境变量
分发Hadoop到其他节点。下令行输入:
- for node in w202235533 w202235534 w202235535; do
- scp -r /opt/jxxy/hadoop-2.6.5 $node:/opt/jxxy/
- done
复制代码
图15 分发Hadoop
这里分发完成后留意检查目录,否则后续的启动服务很容易产生路径问题。
分发环境变量。
- for node in w202235533 w202235534 w202235535; do
- scp /etc/profile $node:/etc/
- done
复制代码
图16 分发环境变量
这里分发成功后,在每个节点运行如下下令,使得设置文件生效。
(4)格式化NameNode。
执行下令hdfs namenode -format。
图17 格式化
(5)启动HDFS集群。
执行下令start-dfs.sh
,同时使用jps下令查看历程。
图18 启动Hadoop服务
图19 w202235532查看历程
图20 w202235534查看历程
(6)验证
浏览器查看信息。
图20 浏览器查看信息
如图所示,Live Nodes 表现3个内容,说明HDFS集群已经成功启动并正常运行。这里选择拍摄快照,然后进入下一个任务。
任务2:hadoop高可用搭建
(1)w202235532与w202235533相互免密登录(这一步是zookeeper实现主机接任也就是由standby转为active的关键)。下令行输入:
- ssh-keygen
- ssh-copy-id w202235532
- ssh-copy-id w202235533
复制代码
图21 主机2和主机3相互免密
(2)修改设置文件,并分发节点。
修改设置hdfs-site.xml文件(在全分布的基础上添加)。
- <!-- 高可用核心配置 -->
- <property>
- <name>dfs.nameservices</name>
- <value>mycluster</value>
- </property>
- <property>
- <name>dfs.ha.namenodes.mycluster</name>
- <value>nn1,nn2</value>
- </property>
- <property>
- <name>dfs.namenode.rpc-address.mycluster.nn1</name>
- <value>w202235532:8020</value>
- </property>
- <property>
- <name>dfs.namenode.rpc-address.mycluster.nn2</name>
- <value>w202235533:8020</value>
- </property>
- <property>
- <name>dfs.namenode.http-address.mycluster.nn1</name>
- <value>w202235532:50070</value>
- </property>
- <property>
- <name>dfs.namenode.http-address.mycluster.nn2</name>
- <value>w202235533:50070</value>
- </property>
- <!-- JournalNode配置 -->
- <property>
- <name>dfs.namenode.shared.edits.dir</name>
- <value>qjournal://w202235532:8485;w202235533:8485;w202235534:8485/mycluster</value>
- </property>
- <property>
- <name>dfs.journalnode.edits.dir</name>
- <value>/var/jxxy/hadoop/ha/journalnode</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>
- <property>
- <name>dfs.ha.fencing.ssh.private-key-files</name>
- <value>/root/.ssh/id_dsa</value>
- </property>
- <property>
- <name>dfs.ha.automatic-failover.enabled</name>
- <value>true</value>
- </property>
- <property>
- <name>dfs.journalnode.edits.dir</name>
- <value>/var/jxxy/hadoop/ha/journalnode</value>
- </property>
复制代码 修改core-site.xml文件(在全分布的基础上添加)。
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://mycluster</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/var/jxxy/hadoop/ha</value>
- </property>
- <property>
- <name>ha.zookeeper.quorum</name>
- <value>w202235533:2181,w202235534:2181,w202235535:2181</value>
- </property>
复制代码 分发修改后的设置文件到全部节点。
- scp core-site.xml hdfs-site.xml w202235533:'pwd'
- scp core-site.xml hdfs-site.xml w202235534:'pwd'
- scp core-site.xml hdfs-site.xml w202235535:'pwd'
复制代码
图22 分发节点
(3)Zookeeper集群搭建(在主机w202235533上进行)
安装与设置。起首xftp上传Zookeeper文件到w202235533节点主机,然后解压缩到/opt/jxxy目录。
- tar -xzvf zookeeper-3.4.6.tar.gz -C /opt/jxxy/
复制代码
图23 传输文件
图24 解压缩
进入设置目录,复制模板文件并编辑。进入zookeeper目录的conf目录,mv zoo_sample.cfg zoo.cfg,修改zoo.cfg文件设置,这里需要找到dataDir行,修改路径dataDir=/var/jxxy/zk (创建该目录),在下面添加如图所示的代码:
- #合并文件
- mv zoo_sample.cfg zoo.cfg
- #1是ID,2888是主从节点通信端口,3888是选举机制端口,zookeeper也是主从架构,也有选举机制
- server.1=w202235533:2888:3888
- server.2=w202235534:2888:3888
- server.3=w202235535:2888:3888
复制代码
图25 修改zoo.cfg文件
分发zookeeper文件。下令行输入:
- scp -r /opt/jxxy/zookeeper-3.4.6 w202235534:/opt/jxxy/
- scp -r /opt/jxxy/zookeeper-3.4.6 w202235535:/opt/jxxy/
复制代码
图26 分发zookeeper文件
三个主机分别创建数据目录和myid文件。下令行输入:
- mkdir -p /var/jxxy/zk
- echo 1 > /var/jxxy/zk/myid //w202235533
- echo 2 > /var/jxxy/zk/myid //w202235534
- echo 3 > /var/jxxy/zk/myid //w202235535
复制代码
图27 创建数据目录和myid文件
图28 创建数据目录和myid文件
图29 创建数据目录和myid文件
(4)设置环境,添加环境变量后运行设置文件,并分发。
- #环境添加代码
- export ZOOKEEPER_HOME=/opt/jxxy/zookeeper-3.4.6/bin
- PATH=$PATH:$ZOOKEEPER_HOME
- #分发文件
- scp /etc/profile w202235534:/etc/
- scp /etc/profile w202235535:/etc/
- #生效
- . /etc/profile
复制代码
图30 添加环境变量
图31 分发文件
图32 运行
(5)启动zookeeper,下令行输入zkServer.sh start,使用jps查看历程。
图33 启动zookeeper
图34 启动zookeeper
图35 启动zookeeper
(6)启动journalnode(w202235532,w202235533,w202235534)。下令行输入:
- hadoop-daemon.sh start journalnode
复制代码
图36 启动journalnode
图37 启动journalnode
图38 启动journalnode
(7)格式化w202235532,下令行输入:
图39 格式化
启动w202235532,下令行输入:hadoop-daemon.sh start namenode。复制w202235532元数据信息给w202235533,下令行输入hdfs namenode -bootstrapStandby。
- #w202235532主机运行
- hadoop-daemon.sh start namenode
- #w202235533主机运行
- hdfs namenode -bootstrapStandby
复制代码
图40 启动namenode
图41 复制元数据信息
(8)两个namenode在zookeeper上注册,下令行输入hdfs zkfc -formatZK,表现"Successfully created /hadoop-ha/mycluster in ZK"再查看: [hadoop-ha,zookeeper]。在w202235533毗连ZooKeeper客户端,下令行输入ls /。
- hdfs zkfc -formatZK
- zkServer.sh -server w202235533:2181
- ls/
复制代码
图42 初始化ZooKeeper的HA状态
图43 客户端查看
(9)在w202235532上启动,下令行输入start-dfs.sh
。
图44 启动Hadoop
浏览器访问
W202235532:50070 //active
图45 浏览器查看w202235532
W202235533:50070 //standby
图46 浏览器查看w202235533
(10)实行:关闭w202235532(active namenode),下令行输入:hadoop-daemon.sh stop namenode。
- hadoop-daemon.sh stop namenode
复制代码
图47 浏览器查看
至此,Hadoop高可用搭建基本完成,选择拍摄快照生存。
任务3:mapreduce高可用设置
此设置可以在Hadoop环境下进行。
(1)修改设置文件,分发到全部节点。
修改mapred-site.xml文件,下令行输入:mv mapred-site.xml.template mapred-site.xml重命名模板文件,编辑文件。
- mv mapred-site.xml.template mapred-site.xml
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
复制代码 设置YARN高可用。
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.resourcemanager.ha.enabled</name>
- <value>true</value>
- </property>
- <property>
- <name>yarn.resourcemanager.cluster-id</name>
- <value>cluster1></value>
- </property>
-
- <property>
- <name>yarn.resourcemanager.ha.rm-ids</name>
- <value>rm1,rm2</value>
- </property>
- <property>
- <name>yarn.resourcemanager.hostname.rm1</name>
- <value>w202235534</value>
- </property>
- <property>
- <name>yarn.resourcemanager.hostname.rm2</name>
- <value>w202235535</value>
- </property>
- <property>
- <name>yarn.resourcemanager.zk-address</name>
- <value>w202235533:2181,w202235534:2181,w202235535:2181</value>
- </property>
复制代码 分发文件到全部节点。
- scp mapred-site.xml yarn-site.xml w202235533:.
- scp mapred-site.xml yarn-site.xml w202235534:.
- scp mapred-site.xml yarn-site.xml w202235535:.
复制代码
图48 分发文件
(2)设置免密登录
在ResourceManager节点w202235534和w202235535之间设置SSH免密登录。
图49 设置免密登录
(3)启动服务。
启动zookeeper,在主机w202235533,w202235534,w202235535下令行输入:zkServer.sh start。
启动hdfs,在主机w202235532下令行输入:start-dfs.sh
启动yarn,在主机w202235532下令行输入:start-yarn.sh
启动resourcemanager,在主机w202235534,w202235535下令行输入:yarn-daemon.sh start resourcemanager。
- zkServer.sh startstart-dfs.sh
- start-yarn.shyarn-daemon.sh start resourcemanager
复制代码(4)浏览器查看(ss -nal 查看通讯端口,w202235536:8088)
图50 浏览器查看
(5)运行wordcount ,运行成功后,查看运行效果。(这里留意自行创建测试文件,然后使用hdfs上传到/根目录下)下令行输入:
- #运行wordcount
- hadoop jar /opt/jxxy/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /test.txt /output
- #查看结果
- hdfs dfs -cat /output/part-r-00000
复制代码
图51 运行wordcount
图52 查看运行效果
图53 浏览器查看
如图所示,一般运行一次便能生成一条记录,选择在"hostname":8088端口查看,表现SUCCEEDED即表现成功运行。
至此全部搭建以及设置成功完成。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |