Hadoop高可用安装
按照接下来的说明一步步的进行安装
首先安装vmware,再设置虚拟机
•
设置IP:
– VM:编辑>虚拟网络编辑器
– vi /etc/sysconfig/network-scripts/ifcfg-eth0
•
删除UUID和MAC地址
•
ONBOOT=yes
•
BOOTPROTO=static
•
IPADDR=192.168.9.253
•
NETMASK=255.255.255.0
•
GATEWAY=192.168.9.2
•
DNS1=1921.68.9.2
– service network restart
出来全是OK才行。
删除70-persistent-net.rules
rm –fr
/etc/udev/rules.d/70-persistent-net.rules
•
关闭防火墙&Selinux
– service iptables stop
– chkconfig iptables off
– vi /etc/selinux/config
•
SELINUX=disabled
•
这样设置更安全,如时间错了就把相应文件变成只读文件
•
关机
•
拍摄快照
•
注意:日后,虚拟机一定要用快照克隆
•
克隆虚拟机
– 准备4台虚拟机
•
配置IP
•
配置主机名
– vi /etc/sysconfig/network
•
HOSTNAME=node002
•
配置hosts
– vi /etc/hosts LINUX
– c:/windows/system32/drivers/etc/hosts
•
关机
•
拍摄快照
•
给node01配置:
-vi /etc/sysconfig/network-scripts/ifcfg-eth0
– service network restart
出来全是OK才行。
给node01配置:
•
配置主机名
– vi /etc/sysconfig/network
•
HOSTNAME=node002
•
配置hosts
– vi /etc/hosts LINUX
– c:/windows/system32/drivers/etc/hosts
•
给node01配置:
-然后poweroff拍快照,存一个非常干净的Linux版本
node02配置同样
配置完node01和node02后互相ping一下看是否能ping通
•
node01 node02 node03node04都配好,且彼此间都能访问后,再配置一下让Windows和虚拟机之间也能访问
•
cat /etc/hosts
•
192.168.88.131 node01
•
192.168.88.132 node02
•
192.168.88.133 node03
•
保存了之后,点是,文件闪了一下,此时还需再保存一下,然后在Windows的cmd窗口里
•
-ping node01看能不能通
Hadoop的伪分布式安装
1.用rpm装jdk(why jdk7?)
-rpm -i
jdk-7u67-linux-x64.rpm
-whereis java
-vi + /etc/profile
export
JAVA_HOME=/usr/bin/java
export
PATH= P A T H : PATH: PATH:JAVA_HOME/bin
-source /etc/profile
如果出现 -bash: jps: command not found
改:export JAVA_HOME=/usr/bin/java
export
PATH=$PATH:/usr/java/jdk1.7.0_67/bin
2.免秘钥
在家目录下,ll –a ,看有无.ssh文件,
若无,则先ssh localhost一下(登录完别忘了exit)
-ssh-keygen -t dsa
-P ‘’ -f ~/.ssh/id_dsa
-cat ~/.ssh/id_dsa.pub
-ssh localhost 验证
(别忘了exit)
-ssh node01 验证(别忘了exit)
3.装hadoop2.6.5
-tar xf
hadoop-2.6.5.tar.gz -C /opt/ldy (注:-C的C 是大写)
然后到/opt/ldy目录下去看一下是否解压好了
cd /opt/ldy/hadoop-2.6.5
其中sbin这个文件夹很重要,放的是系统级别的一些可执行脚本
要想在任意目录下启动hadoop,
就要在配置文件里做些修改。
export
JAVA_HOME=/usr/bin/java
export
HADOOP_HOME=/opt/ldy/hadoop-2.6.5
export
PATH= P A T H : / u s r / j a v a / j d k 1.7. 0 6 7 / b i n : PATH:/usr/java/jdk1.7.0_67/bin: PATH:/usr/java/jdk1.7.067/bin:HADOOP_HOME/bin:$HADOOP_HOME/sbin
输入hd按Tab键可以联想出hdfs
输入start-d按Tab键可以联想出start-dfs.
就表示配置成功了
修改hadoop配置文件信息
cd /opt/ldy/hadoop-2.6.5/etc/hadoop
注:以上路径的etc可不是根目录下的etc
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
给这三个文件里的JAVA_HOME都改成绝对路径/usr/java/jdk1.7.0_67
配置 vi core-site.xml
fs.defaultFS
hdfs://node03:9000
hadoop.tmp.dir
/var/ldy/hadoop/pseudo
配置 vi hdfs-site.xml
dfs.replication
1
dfs.namenode.secondary.http-address
node03:50090
配置slaves文件
vi slaves
node03
格式化hdfs
hdfs namenode -format (只能格式化一次,再次启动集群不要执行,否则clusterID变了)
之前/var/ldy/hadoop/pseudo这个文件不存在,格式化后就存在了,检查一下看存在没
启动集群
start-dfs.sh
在浏览器里打开node03:50070
创建目录:hdfs dfs -mkdir -p
/user/root
上传文件: hdfs dfs -put a.txt
/user/root
停止集群:stop-dfs.sh
HA安装方案
分发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
并在Xshell的全部会话栏里一起ll,看jdk是否发送成功。
给node04、05、06分别安装jdk
分别在node04、05、06上执行rpm安装命令
-rpm -i
jdk-7u67-linux-x64.rpm
在node03上cd /etc,在此目录下把profile文件分发到node04、05、06上。
scp profile node04:`pwd`
利用Xshell全部会话栏,source /etc/profile
利用Xshell全部会话栏,jps,看04、05、06这三台机子的jdk是否装好。
同步所有服务器的时间
-date 查看机子当前的时间。
时间不能差太大,否则集群启动后某些进程跑不起来。
若时间不同步,怎么办?
1.yum进行时间同步器的安装
-yum -y install ntp
2.执行同步命令
-ntpdate
time1.aliyun.com 和阿里云服务器时间同步
装机之前的配置文件检查
-cat /etc/sysconfig/network
查看HOSTNAME是否正确
-cat /etc/hosts
查看IP映射是否正确
若不正确,可以改文件,也可以把node03上的用scp分发过去。
-cat
/etc/sysconfig/selinux里是否
SELINUX=disabled
service iptables
status查看防火墙是否关闭
NN与其他三台机子的免秘钥设置
2.-cd .ssh ,并ll查看一下
在node04的.ssh目录下看是否有node03.pub
如果有,那就追加到authorized_keys
cat node03.pub >>
authorized_keys
并且在node03上ssh node04看是否免密钥了
给node05、06都追加一下node03.pub,也就是在node05、06的.ssh目录下执行cat node03.pub >> authorized_keys
5.同理给其他节点发送公钥并在各个节点上把node03的公钥追加上
scp id_dsa.pub
node05:pwd
/node03.pub
scp id_dsa.pub
node06:pwd
/node03.pub
在node03上分别ssh node04,ssh node05,ssh node06,看是否能免密钥登录,每次ssh都别忘了exit
两个NN间互相免密钥
1.node03与node04间互相免密钥: node03可免密钥登录node04,那现需node04上能免密钥登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验证一下可否免密钥登录
修改namenode的一些配置信息
1.vi hdfs-site.xml
去掉snn的配置
dfs.namenode.secondary.http-address
node03:50090
‚增加以下property
dfs.nameservices
mycluster
dfs.replication
3
dfs.ha.namenodes.
mycluster nn1,nn2
dfs.namenode.rpc-address.
mycluster.nn1 node03:9000
dfs.namenode.http-address.
mycluster.nn1 node03:50070
dfs.namenode.rpc-address.
mycluster.nn2 node04:9000
dfs.namenode.http-address.
mycluster.nn2 node04:50070
dfs.namenode.shared.edits.dir qjournal://node03:8485;node04:8485;node05:8485/mycluster
dfs.journalnode.edits.dir /var/ldy/hadoop/ha/jn
dfs.ha.automatic-failover.enabled.cluster true
dfs.client.failover.proxy.provider.cluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods sshfence
dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa
2.vi core-site.xml
fs.defaultFS
hdfs://mycluster
ha.zookeeper.quorum
node07:2181,node08:2181,node09:2181
2.vi slaves
node04
node05
node06
3.安装hadoop
cd /opt ,将其下的ldy目录分发到node04、05、06
scp –r ldy/ node04:`pwd`
scp –r
ldy/ node05:pwd
scp –r
ldy/ node06:pwd
4.将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
安装zookeeper
1.解压安装zookeeper
tar xf
zookeeper-3.4.6.tar.gz -C /opt/ldy
2.修改zookeeper的配置文件
cd /opt/ldy/zookeeper-3.4.6/conf
给zoo_sample.cfg改名
cp 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
其中2888主从通信端口,3888是当主挂断后进行选举机制的端口
3.把zookeeper分发到其他节点
scp -r zookeeper-3.4.6/
node05:pwd
scp -r zookeeper-3.4.6/ node06:`pwd`
并用ll /opt/ldy检查下看分发成功没
4.给每台机子创建刚配置文件里的路径
mkdir -p /var/ldy/zk
对node04来说:
echo 1 >
/var/ldy/zk/myid
cat /var/ldy/zk/myid
对node05来说:
echo 2 >
/var/ldy/zk/myid
cat /var/ldy/zk/myid
对node06来说:
echo 3 >
/var/ldy/zk/myid
cat /var/ldy/zk/myid
5.在/etc/profile里面配置
export ZOOKEEPER_HOME=/opt/ldy/zookeeper-3.4.6
export
PATH= P A T H : / u s r / j a v a / j d k 1.7. 0 6 7 / b i n : PATH:/usr/java/jdk1.7.0_67/bin: PATH:/usr/java/jdk1.7.067/bin:HADOOP_HOME/bin: H A D O O P H O M E / s b i n : HADOOP_HOME/sbin: HADOOPHOME/sbin:ZOOKEEPER_HOME/bin
6.然后在把/etc/profile分发到其他node05、node06
scp /etc/profile node05:/etc
scp /etc/profile node06:/etc
在node04、05、06里source /etc/profie,这步千万别忘
验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh
7.启动zookeeper
全部会话:zkServer.sh start
接着用zkServer.sh status查看每个zookeeper节点的状态
注意:如果启动不起来,请把/etc/profile里的JAVA_HOME改
成绝对路径。
启动journalnode
Why启动journalnode?
为了使两台namenode间完成数据同步
在03、04、05三台机子上分别把journalnode启动起来
hadoop-daemon.sh start
journalnode
用jps检查下进程启起来了没
格式化任一namenode
随意挑一台namenode上执行hdfs namenode –format
另一台namenode不用执行,否则clusterID变了,找不到集群了。
然后,启动刚刚格式化的那太namenode
hadoop-daemon.sh start namenode
给另一namenode同步数据
我们要给另一台namenode同步一下数据,用以下命令
hdfs namenode -bootstrapStandby
格式化zkfc
Hdfs zkfc -formatZK
在node04上执行zkCli.sh打开zookeeper客户端看hadoop-ha是否打开
启动hdfs集群
在node03上启动hdfs集群:
start-dfs.sh
注意:如果那个节点没起来到hadoop目录下去看那个node的日志文件log
然后全部会话jps看一下都起来些什么进程
用浏览器访问node03:50070和node04:50070
关闭集群命令:stop-dfs.sh
关闭zookeeper命令:zkServer.sh stop
注意:下一次启动hdfs集群的时候不需要用hadoop-daemon.sh start
journalnode命令启动journalnode,只要start-dfs.sh就可以了。之前启动journalnode是为了同步两个namenode之间的信息。
为MapReduce做准备
把mapred-site.xml.template留个备份,并且改下名字
cp mapred-site.xml.template
mapred-site.xml
在mapred-site.xml里添加如下property
mapreduce.framework.name
yarn
在yarn-site.xml里添加如下property
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
cluster1
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
node05
yarn.resourcemanager.hostname.rm2
node06
yarn.resourcemanager.zk-address
node04:2181,node05:2181,node06:2181
把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:
在node06的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f
./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >>
authorized_keys
用ssh localhost验证看是否需要密码,别忘了exit
将node06 的公钥分发到node05
scp id_dsa.pub
node05:pwd
/node06.pub
在node05的.ssh目录下,追加node06.pub
cat node06.pub >>
authorized_keys
在node06上ssh node05,看是否免密钥
1.启动zookeeper,全部会话zkServer.sh
start
2.在node03上启动hdfs,start-dfs.sh
3.在node03上启动yarn,start-yarn.sh
4.在node05、06上分别启动resourcemanager,
yarn-daemon.sh start
resourcemanager
5.全部会话jps,看进程全不全
在浏览器访问node05:8088,查看resourcemanager管理的内容
跑一个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/input
hdfs dfs -ls /data/input
运行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
关闭集群:
node03: stop-dfs.sh
node03: stop-yarn.sh (停止nodemanager)
node05,node06: yarn-daemon.sh stop resourcemanager
Node04、05、06:zkServer.sh stop
在Windows下配置hadoop的环境
把压缩包解压后的三个文件夹放到一个usr文件夹里,把usr放到一个你知道的地方。
“此电脑”右键-属性-高级系统设置
更改环境变量,增加HADOOP_HOME
并且给path后追加HADOOP_HOME的bin目录,注意:Windows里path的路径分隔符是分号;,而不是冒号:
然后再新建一个变量HADOOP_USER_NAME
把hadoop.dll拷贝到以下路径
安装ecipse-mars,此版本的eclipse带插件,可以可视化的看到hadoop的一些东西,比较方便
如果eclipse界面下方没有小象图标,则做后续三步调出
在eclipse里把hadoop相关信息填一下
新建一个hadoop localtion
这样在eclipse左侧列表的DFS location里新建一个目录,对应hdfs里也就建好了,可以用浏览器查看一下,自己试试。
在eclipse里导入自己建一个包库
把jar包导入刚建的包库
把刚建的包库引入到project里
把JUnit包库引入到project里
利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录。
利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录。