@Hadoop高可用搭建 前期搭建可以通过以下链接学习: 你好! 本篇文章主要对完全分布式Hadoop集群环境的安装与配置步骤进行介绍。 下面是需要的一些安装文件,需要者自取 我们首先需要下载虚拟机,同时在虚拟机里面安装四台Linux。方便起见,可以选择先添加一台Linux,配置完成后进行克隆。还需要用到xshell方便操作(这里只简要概述,不具体介绍,具体见前面目录一) (1) (1)存放安装软件 配置文件 更新一下文件 红色框内为打错的,大家可不要出现输入错误哦 <1>、查看是否输入正确,source必须执行,否则修改无效 (1)传文件(在node01上): (2)安装文件 在node03、node04、node05上执行rpm安装命令: 分发文件node01中的profile文件分发node02、node03、node04 注意pwd左右两边的符号,是tab键上面那个 (3) 检查是否安装完成 时间相差太大,集群启动后某些进程跑不起来,所以要同步时间 在家目录下 免秘钥操作: 一定要exit哦 补充说明:(借用老师上课时用的图片说明一下) 在node01上给其他三个发送公钥( 路径为: 查看一下发送成功没有(到node02、node03、node04的.ssh文件下去看) 在另外三台机子上追加(node02、node03、node04都要哦) 首先做5、1 使每台机子自己可以免秘钥登录 到Hadoop目录下更改:cd /opt/gy/hadoop-2.6.5/etc/hadoop/ (2)增加以下property 改动处写有文字注释、注意修改哦 先在node01中安装,后面传输一下即可,传文件方法前面已介绍 利用tar 命令直接解压安装包(此处的gy是自己创建的,具体在文章开头已介绍) 到/opt/gy目录下看是否解压好 想要实现任意目录下均可启动hadoop 在hadoop路径下(前面完整路径,黄色加粗字体),修改profile文件 在etc目录中修改: 给这三个文件夹的JAVA_HOME改成绝对路径:/usr/java/jdk1.7.0_67 如下图所示修改 到opt目录下,将其下的目录分发到node02、node03、node04 pwd左右的符号是tab键上方的键 将hdfs-site.xml和core-site.xml分发到node02、03、04 pwd上的符号注意注意 zookeeper是在node02、node03、node04上安装的 解压安装zookeeper 修改zookeeper的配置文件 vi zoo.cfg 修改信息 (1)查看是否有zoo.cfg文件 (3)并在末尾追加 把zookeeper分发到其他节点 并用ll /opt/gy检查下看分发成功没 给每台机子创建刚配置文件里的路径 (2)图片示意(node04): 分发profile文件 (1)先确定zookeeper-3.4.6的路径(按照下载的一般是/opt/gy/zookeeper-3.4.6其中gy是自己建立的文件名) 第一行是添加、第二行是修改 (3)在node02、03、04里 全部会话: 接着用 注意:如果启动不起来,请把/etc/profile里的 JAVA_HOME改 启动namenode的原因:为了使两台namenode间完成数据同步 在01、02、03三台机子上分别把journalnode启动起来 node01: 随意挑一台namenode上执行 然后,启动刚刚格式化的那台namenode jps命令出现namenode,没有的话查日志(hdfs配置) 我们要给另一台namenode同步一下数据,用以下命令 在node01上执行 在node02上双击开启另一个,执行zkCli.sh打开zookeeper客户端看hadoop-ha是否打开, 双击node02: 在node01上启动hdfs集群: 全部会话jps查看都有些什么进程,如果和下图一样,恭喜小可爱成功一半啦 如果那个节点没起来到hadoop目录下去看那个node的日志文件log 接下来去浏览器访问node01:50070和node02:50070 关闭集群: 关闭zookeeper命令: 注意:你下一次启动hdfs集群的时候不需要用 node03和node04之间相互免秘钥(参考5) 完整的启动步骤 node01: 在浏览器访问node03:8088,查看resourcemanager 完整的退出步骤 关闭集群: 到如下目录 在hdfs里建立输入目录和输出目录 将要统计数据的文件上传到输入目录并查看 运行wordcount(注意:此时的/data/out必须是空目录) 你成功了吗? 首先观察一下,是否出现如下进程map变化 问题小结–个人比较粗心遇到的问题比较多,不过解决后收获较多 jps后namenode总不出来 node01与node02同步了 实现wordout总出现错误 2、etc/hosts 文件是否配对 出现命令找不到 输入易错点 浏览器打不开 以上就是整个过程,如果还有什么问题欢迎评论
一、如何安装虚拟机与通过克隆在虚拟机里安装四台Linux系统及配置安装
二、伪分布式安装
本文章的特点是,操作详细,在实践过程中出现的错误进行分析,对常见问题进行了解决,希望可以帮到大家。
[ 提取码:657t ] jdk安装包、Hadoop、xshell、xftp
hostname
idadderess
node01
NameNode、Jps、JournalNode、DFSZKFailoverController
node02
NameNode、Jps、JournalNode、DFSZKFailoverController、DataNode、QuorumPeerMain、NodeManager
node03
Jps、JournalNode、DataNode、QuorumPeerMain、NodeManager、ResourceManager
node04
Jps、DataNode、QuorumPeerMain、NodeManager、ResourceManager
1、前期准备
1.1 设置IP :VM:编辑>虚拟网络编辑器
vi etc/sysconfig/network-scripts/ifcfg-eth0
1.2 配置主机名:
vi /etc/sysconfig/network
1.3 配置hosts:
vi /etc/hosts
1.4 关闭防火墙&Selinux:
service iptables stop
(2) chkconfig iptables off
(3) vi /etc/selinux/config
SELINUX=disabled
这样设置更安全,如时间错了就把相应文件变成只读文件1.5 建立需要的文件夹存放安装文档
mkdir software
(2)在opt目录中建立gy 文件夹cd /opt
mkdir gy
2、jdk安装
2.1用xshell传文件
2.2. 用rpm装jdk,首先在node01上安装
rpm -i jdk-7u67-linux-x64.rpm
whereis java
目录: vi + /etc/profile
export JAVA_HOME=/usr/bin/java
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
输入jps,结果出现 xxxx jps,说明安装成功
注意:出现 command not find
<2>、更改绝对路径
export JAVA_HOME=/usr/bin/java
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin
2.3 将jdk 分发到node02、node03、node04,并安装(方法同node01安装相同)
注意pwd左右两边的符号,是tab键上面那个scp jdk-7u67-linux-x64.rpm node02:`pwd` scp jdk-7u67-linux-x64.rpm node03:`pwd` scp jdk-7u67-linux-x64.rpm node04:`pwd`
-rpm -i jdk-7u67-linux-x64.rpm
scp profile node02:`pwd` scp profile node03:`pwd` scp profile node04:`pwd`
利用Xshell全部会话栏,source /etc/profile
利用Xshell全部会话栏,jps,看02、03、04这三台机子的jdk是否装好。
输入jps,结果出现 xxxx jps,说明安装成功3、同步所有服务器时间
3.1为什么要同步时间
3.2如何同步时间
yum -yinstall nt
ntpdate time1.aliyun.com 和阿里云服务器时间同步
4、检查配置文件
cat /etc/sysconfig/network
cat /etc/hosts
cat /etc/sysconfig/selinux
SELINUX=disabled
service iptables status
5、免秘钥设置
5.1如何给每台虚拟机免秘钥
ll -a
:查看有无.ssh文件,如果没有就ssh localhost
ssh localhost 之后一定要exit退出,不然出大问题哦cd .ssh
,并ll
查看当前文件-ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
-cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_key
验证:
ssh localhost 看看需不需要输入密码
5.2 如何让node01与其他三台机子免密
cd .ssh
)scp id_dsa.pub node02:`pwd`/node01.pub scp id_dsa.pub node03:`pwd`/node01.pub scp id_dsa.pub node04:`pwd`/node01.pub
首先到目录:cd .ssh
接下来去查看一下 node02:
node03:
node04:
cat node01.pub >> authorized_keys
验证:
在node01上分别ssh node02
,ssh node03
,ssh node04
,看看能否免秘钥登录
记得ssh 登录以后以后一定要exit
5.3 让两个Namenode之间免秘钥
现在实现让node02也可以直接登录node01
scp id_dsa.pub node01:'pwd'/node02.pub
在node01的.ssh目录下:
cat node02.pub >> authorized_keys
ssh node01
验证可否免秘钥登录
6、namenode信息的配置信息修改
6.1 vi hdfs-site.xml修改
(1)去掉snn的配置<property> <name>dfs.namenode.secondary.http-address</name> <value>node03:50090</value> </property>
<!-- 为namenode集群定义一个services name --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!--指定HDFS副本的数量,不能超过机器节点数--> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- nameservice 包含哪些namenode,为各个namenode起名 --> <property> <name>dfs.ha.namenodes. mycluster</name> <value>nn1,nn2</value> </property> <!-- 名为nn1的namenode的rpc地址和端口号,rpc用来和datanode通讯 --> <property> <name>dfs.namenode.rpc-address. mycluster.nn1</name> <value>node01:9000</value> </property> <!--名为nn1的namenode的http地址和端口号,用来和web客户端通讯 --> <property> <name>dfs.namenode.http-address. mycluster.nn1</name> <value>node01:50070</value> </property> <!-- 名为nn2的namenode的rpc地址和端口号,rpc用来和datanode通讯 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node02:9000</value> </property> <!--名为nn2的namenode的http地址和端口号,用来和web客户端通讯 --> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node02:50070</value> </property> <!-- namenode间用于共享编辑日志的journal节点列表 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node02:8485;node03:8485;node04:8485/mycluster</value> </property> <!-- journalnode 上用于存放edits日志的目录 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/var/gy/hadoop/ha/jn</value> //这里的gy改成你建立的名字 </property> <!-- 指定该集群出现故障时,是否自动切换到另一台namenode --> <property> <name>dfs.ha.automatic-failover.enabled.cluster</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.cluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 一旦需要NameNode切换,使用ssh方式进行操作 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property>
6.2 vi core-site.xml 配置
<!– 集群名称mycluster--> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!– zookeeper布署的位置--> <property> <name>ha.zookeeper.quorum</name> <value>node02:2181,node03:2181,node04:2181</value> </property>
vi slaves
删除node01 添加如下
node02
node03
node04
这段文字改动很小,创建文件名改一下,主机名改一下,但是,一定要注意检查多遍,以防错误,后面查日志文件多半是这里出错7、安装hadoop2.6.5
7.1如何安装Hadoop
-tar xf hadoop-2.6.5.tar.gz -C /opt/gy (注:-C的C 是大写)
cd /opt/gy/hadoop-2.6.5
在目录:cd /opt/gy/hadoop-2.6.5/etc/hadoop/
vi + /etc/profile
export JAVA_HOME=/usr/bin/java export HADOOP_HOME=/opt/ldy/hadoop-2.6.5 export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
进入文件内修改(修改完 !wq 保存退出)
修改完成一定要source
验证:输入hd按Tab键可以联想出hdfs
输入start-d按Tab键可以联想出start-dfs.
就表示配置成功了
不要忘记source,更改会不生效哦7.2修改Hadoop配置文件
cd /opt/ldy/hadoop-2.6.5/etc/hadoop
以上路径的etc不是根目录的etcvi hadoop-env.sh vi mapred-env.sh vi yarn-env.sh
修改的那句如果有#须要去除
PS:详细的过程可以参考目录下二、伪分布式安装,进行对比学习7.2.3如何实现四台机子方便的配置
在目录:cd /opt
scp –r gy/ node02:`pwd` scp –r gy/ node03:`pwd` scp –r gy/ node04:`pwd`
scp hdfs-site.xml core-site.xml node02:`pwd` scp hdfs-site.xml core-site.xml node03:`pwd` scp hdfs-site.xml core-site.xml node04:`pwd`
8、安装zookeeper
8.1解压安装配置文件
(1)在目录:cd /sotfware
(四台都在sotfware里安装,如果无根目录下mkdir softer
)
tar xf zookeeper-3.4.6.tar.gz -C /opt/gy
(2)下载传输完成后可以看到在software里看到文件
(3)在sotfware目录下解压安装 tar xf zookeeper-3.4.6.tar.gz -C /opt/gy
(gy是你新建的文件夹,在前期准备中有 介绍)
(4)安装完成在gy文件夹下查看
(1) cd /opt/gy/zookeeper-3.4.6/conf
(2) 给zoo_sample.cfg改名(以防改错,我们这里用复制命令)
cp zoo_sample.cfg zoo.cfg
dataDir=/var/gy/zk
(2)进行修改(数据路径)
server.1=node04:2888:3888 server.2=node05:2888:3888 server.3=node06:2888:3888
其中2888主从通信端口,3888是当主挂断后进行选举机制的端口8.2如何方便的实现其他几台zookeeper搭建
当gy目录下:cd /opt/gy
scp -r zookeeper-3.4.6/ node03:`pwd` scp -r zookeeper-3.4.6/ node04:`pwd`
修改pwd上方符号
(1)绝对路径,任意目录下均可:mkdir -p /var/gy/zk
cd /var/gy/zk/
对node02来说: echo 1 > /var/gy/zk/myid cat /var/gy/zk/myid 对node03来说: echo 2 > /var/gy/zk/myid cat /var/gy/zk/myid 对node04来说: echo 3 > /var/gy/zk/myid cat /var/gy/zk/myid
编号必须是数字
(2)在node02中的 /etc/profile里面配置
vi + /etc/profile
export ZOOKEEPER_HOME=/opt/gy/zookeeper-3.4.6 export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
(2)在node02中,然后在把/etc/profile分发到其他node03、node04(绝对路径,所以在哪个路径下皆可以)scp /etc/profile node05:/etc scp /etc/profile node06:/etc
source /etc/profie
输入zkCli.s,按Tab可以把名字补全zkCli.sh
8.3启动zookeeper
zkServer.sh start
zkServer.sh status
查看每个zookeeper节点的状态
成绝对路径。然后记得source刷新一下
export JAVA_HOME=/usr/bin/java
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin
source /etc/profie
如下图所示:就是启动失败
修改绝对路径(四台都要改)
由于我们是在node02、node03、node04上装的,所以全部会话,在node01上找不到命令,是正常的9、启动journalnode
hadoop-daemon.sh start journalnode
用jps检查下进程启起来了没
node02:
node03:
没启动起来
检查日志:cd /opt/gy/hadoop-2.6.5/logs/
tail -100 hadoop-root-journalnode-node01.log
(相应的日志里去找一下)
常见问题:配置文件括号对应、出现空格等10、格式化任一namenode
hdfs namenode –format
另一台namenode不用执行,否则clusterID变了,找不到集群了。
hadoop-daemon.sh start namenode
下面这个错误就是括号不对应,参考一下
(1)hdfs namenode -bootstrapStandby
(2)格式化zkfc
hdfs zkfc -formatZK
ls /
看是否成功打开Hadoop-ha
在双击后形成的3 node02上执行zkCli.sh、ls查看
PS:因为执行完zkcli.sh命令以后会导致无法返回,所以先多开一个,方便操作11、启动集群
start-dfs.sh
node01:
node02:
node03:
node04:
静下心来慢慢找错,日志会提示错误哦 hadoop-daemon.sh start journalnode cd /opt/ldy/hadoop-2.6.5/logs/ tail -100 hadoop-root-journalnode-node03.log
stop-dfs.sh
zkServer.sh stop
hadoop-daemon.sh start journalnode
命令启动journalnode
只要start-dfs.sh就可以了。我们之前启动journalnode是为了同步两个namenode之间的信息。12、为MapReduce做准备
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml里添加如下property <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
<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>node03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node04</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>node02:2181,node03:2181,node04:2181</value> </property>
scp mapred-site.xml yarn-site.xml node02:`pwd` scp mapred-site.xml yarn-site.xml node03:`pwd` scp mapred-site.xml yarn-site.xml node04:`pwd`
用localhost以后一定要exit
PS:node 03与node04都是resourcemanager,所以他们相互免秘钥
启动zookeeper,全部会话zkServer.sh start
在node01上启动hdfs,start-dfs.sh
在node01上启动yarn,start-yarn.sh
在node02、03上分别启动resourcemanager,
yarn-daemon.sh start resourcemanager
全部会话jps,看进程全不全
node02:
node03:
node04:
node01: stop-dfs.sh
node01: stop-yarn.sh
(停止nodemanager)
node03,node04:yarn-daemon.sh stop resourcemanager
Node02、03、04:zkServer.sh stop
如何看是否完全退出
jps之后只有jps xxx13、完成一个wordcount
cd /opt/ldy/hadoop-2.6.5/share/hadoop/mapreduce
hdfs dfs -mkdir -p /data/in hdfs dfs -mkdir -p /data/out
hdfs dfs -put ~/500miles.txt /data/input hdfs dfs -ls /data/input
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
其次去网页观察一下,有sucess嘛
最后我们再去看一下运行完的程序结果
记住此时的/data/out必须是空目录
补充:1、运行失败查看日志文件,多半是配置错误,回到6检查一遍哦
2、运行较慢可能出现map百分之75,最后100%,这样问题不大, 可以成功等等就好
3、data/out 运行第二次不为空了,创建另一个文件
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result_1
或者删除
在dfs中删除目录:hadoop fs -rm -r /data/out/result
14、错误小结
1、根据日志报错(前面有如何看日志介绍见12、3)
2、日志居然找不到错误,检查一下配置(见6 namenode配置,没有空格的地方不要多空格)
3、修改了node01的配置文件,一定记得传输给其他之前同样配置机子。
1、localhost忘记退出了导致混乱,千万不要犯这种低级错误
1、根据mycluster,找到有关他的配置文件,如果无误
1、查找自己是否打错,要细心哦
2、查看目录,看一下是否存在
1、免秘钥处 -f前面有空格 -ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
2、pwd上面的符号,在tab上方,不要打成分号
3、输入目录名可以利用tab键自动生成剩余完整的目录名
1、hosts里面配置检查一遍
cat /etc/sysconfig/network
cat /etc/hosts
3、浏览器不要用360、QQ浏览器,最好用火狐
找到编辑->首选项
选择允许交换大部分虚拟机内存
这个问题很容易解决,可以关机重启,删除对应虚拟机存储文件多出的前四个文件
(这个方法最有效,虚拟机多次出现这个问题已解决)
删除的文件可以参考这个链接: https://blog.csdn.net/s546889/article/details/105045714.
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算