Hadoop的高可用安装
本文主要讲hadoop的高可用安装过程以及一些本人在安装过程中遇到的错误和解决方法。
1.HA安装方案
2.分发jdk到node04,05,06
scp jdk-7u67-linux-x64.rpm node04:`pwd`
scp jdk-7u67-linux-x64.rpm node05:`pwd`
scp jdk-7u67-linux-x64.rpm node06:`pwd`
(注:pwd有``括起来)
检查是否已经分发到各个虚拟机上,在全部对话中输入cd ,再ll,得到
3.安装jdk
分别在node04,05,06三台机子上执行安装命令
rpm -i jdk-7u67-linux-x64.rpm
在node03上cd /etc,在此目录下把profile文件分发到node04,05,06
scp profile node04:`pwd`
scp profile node05:`pwd`
scp profile node06:`pwd`
(注:pwd有``括起来)
利用xshell全部对话栏,source /etc/profile
,再jps,查看04,05,06三台机子的jdk是否安装好
4.同步所有服务器的时间
输入date命令,查看时间
如果时间不同步,安装时间同步器ntpdate yum -y install ntp
执行同步命令ntpdate time1.aliyun.com
,和阿里云服务器时间同步
5.装机之前的配置文件检查
查看HOSTNAME是否正确 cat /etc/sysconfig/network
查看IP映射是否正确cat /etc/hosts,如果不正确,可以改文件,也可以把node03上的用scp分发过去
查看cat /etc/sysconfig/selinux
里是否
SELINUX=disabled
查看防火墙是否关闭service iptables status
6.免密钥设置
在家目录下ll -a查看有无.ssh文件(如果没有就ssh localhost一下,再exit),再cd .ssh再ll一下
把node03的公钥发给其他三台机子
在node04,05,06的.ssh目录下看是否有node03.pub
如果有,那就追加到authorized_keys
cat node03.pub>> authorized_keys
并且在node03上ssh node04,05,06看是否免密钥了,再exit
6.两个NN之间互相免密钥
node03与node04间互相免密钥: node03可免密钥登录node04,那现需ode04上能免密钥登node03,所以在node04上:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
再ssh localhost验证一下, 并分发到node03上:
scp id_dsa.pub node03:`pwd`/node04.pub
在node03的.ssh目录下,cat node04.pub>>authorized_keys
,
再在node04上ssh node03
验证一下能否免密钥登陆
7.修改namenode的一些配置信息
1.配置hdfs-site.xml
先去掉snn的配置
然后增加以下property
2.配置core-site.xml
3.配置slaves
删除node03,增加node04,05,06
4.安装hadoop
在node03上cd /opt,将其目录下的wjq分发给node04,05,06
scp –r wjq/ node04:`pwd`
scp –r wjq/ node05:`pwd`
scp –r wjq/ node06:`pwd`
然后在04,05,06上验证是否有wjq目录
并把hdfs-site.xml和core-site.xml分发到node04,05,06
scp hdfs-site.xml core-site.xml node04:`pwd`
scp hdfs-site.xml core-site.xml node05:`pwd`
scp hdfs-site.xml core-site.xml node06:`pwd`
8.安装zookeeper
1.先在node04,05,06创建一个software目录
将zookeeper安装包传输到node04的software上,
解压到/opt/wjq目录下,
2修改zookeeper的配置文件,将zoo_sample.cfg改为zoo.cfg
vi zoo.cfg改dataDir=/var/ldy/zk并在末尾追加
server.1=node04:2888:3888
server.2=node05:2888:3888
server.3=node06:2888:3888
3.然后将zookeeper分发到node05,06上,ll /opt/wjq检验下是否分发成功
4.给每台机子创建刚配置文件里的路径
mkdir -p /var/wjq/zk
cd /var/wjq/zk
对node04来说,,对node05来说,
对node06来说,
5.在/etc/profile里配置
6.然后再把/etc/profile分发到node05,node06上,在全部对话中source /etc/profile,然后输入zkCli.s,按tab可以自动补全zkCli.sh
7.启动zookeeper
在全部对话中输入zkServer.sh start
,然后用zkServer.sh status
查看每个zookeeper节点的状态(若启动不起来,就把/etc/profile里的JAVA_HOME改为绝对路径)
!
9.启动journalnode
在node03、04、05三台机子上分别把journalnode启动起来
hadoop-daemon.sh start journalnode
再用jps检查下进程启起来了没
我一开始没有journalnode,先去查看journalnode的日志文件发现hdfs-site.xml的第2行出错了,然后打开hdfs-site.xml文件,发现hdfs-site.xml文件下少了点,使单词不完整了,报错了。解决方案:重新复制别人的hdfs-site.xml文件,将原先自己的删至空白。
10.格式化namenode
在node03上执行hdfs namenode –format,然后启动格式化后
hadoop-daemon.sh start namenode
一开始我没有namenode,然后照样去查namenode的日志文件,发现是hadoop默认将namenode格式化在/tmp下,而这个目录在重启时会被清空,所以报错。
解决方案:在core-site.xml文件下添加一个property,然后再格式化一次
然后给node04同步下数据
hdfs namenode -bootstrapStandby
11.格式化zkfc
在node03上同步格式化zkfc,
hdfs zkfc -formatZK
在node04上执行zkCli.sh打开zookeeper客户端看hadoop-ha是否打开
12.启动hdfs集群
start-dfs.sh(如果节点没起来,去Hadoop目录下查看那个node的日志文件log)然后在全部会话窗口jps
用浏览器访问node03:50070和node04:50070
13.关闭集群
关闭集群命令:stop-dfs.sh
关闭zookeeper命令:zkServer.sh stop
14.为MapReduce做准备
把mapred-site.xml.template留个备份,并改为mapred-site.xml,在mapred-site.xml里添加以下property
把mapred-site.xml和yarn-site.xml 分发到node04、05、06
scp mapred-site.xml yarn-site.xml node04:`pwd`
scp mapred-site.xml yarn-site.xml node05:`pwd`
scp mapred-site.xml yarn-site.xml node06:`pwd`
由于node05和node06都是resourcemanager,所以它俩应该相互免密钥
node05上免密钥登录node06:
在node05的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost验证看是否需要密码,别忘了exit
将node05 的公钥分发到node06
scp id_dsa.pub node06:`pwd`/node05.pub
在node06的.ssh目录下,追加node05.pub
cat node05.pub >> authorized_keys
在node05上ssh node06,看是否免密钥
同理在node06上免密钥登陆node05.
启动进程的命令:
1.启动zookeeper,全部会话zkServer.sh start
2.在node03上启动hdfs,start-dfs.sh
3.在node03上启动yarn,start-yarn.sh
4.在node05、06上分别启动resourcemanager
yarn-daemon.shstart resourcemanager
5.全部会话jps,看进程全不全
在浏览器访问node05:8088,查看resourcemanager管理的内容
15.跑一个wordcount
1.cd /opt/ldy/hadoop-2.6.5/share/hadoop/mapreduce
2.在hdfs里建立输入目录和输出目录
hdfs dfs -mkdir -p /data/in
hdfs dfs -mkdir -p /data/out
3.将要统计数据的文件上传到输入目录并查看
hdfs dfs -put ~/500miles.txt /data/in
hdfs dfs -ls /data/in
- 运行wordcount(注意:此时的/data/out必须是空目录)
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
(如果出现的错误,尝试手打一遍)
5.查看运行结果
hdfs dfs -ls /data/out/result
hdfs dfs -cat /data/out/result/part-r-00000
16.关闭集群
node03:stop-dfs.sh
node03: stop-yarn.sh
(停止nodemanager)
node05,node06: yarn-daemon.sh stop resourcemanager
Node04、05、06:zkServer.sh stop
17.在Windows环境下配置Hadoop
把Hadoop压缩包解压后的这三个文件夹放到一个usr文件夹里,把usr放到一个你知道的地方。
然后在我的电脑图标上右击-属性-高级系统设置,更改环境变量,增加HADOOP_HOME并在path后追加HADOOP_HOME的bin目录
然后再建一个新的变量HADOOP_USER_NAME把hadoop.dll拷贝到c:\windows\system32中
安装eclipse-mars版本,如果界面下方没有小象图标,则先在eclipse里把hadoop相关信息填一下,
host里填哪个namenode是active的
然后在eclipse左侧列表的DFS location里新建一个目录
在eclipse里导入自己建的一个包库
把jar包导入刚建的包库
把刚建的包库引入到project里
把JUnit包库引入到project里
利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录