一、 准备工作
1.准备四台已经网络配置好的虚拟机,然后配置主机名(主机名可自定义)
编辑vi /etc/sysconfig/network
HOSTNAME=node02(分别在每台上修node02,node03,node04)
- 配置hosts(每台都配)
vi /etc/hosts
添加以下内容
并且在c:/windows/system32/drivers/etc/hosts 下也要添加这四台的ip+主机名
- 关闭防火墙&Selinux
service iptables stop
chkconfig iptables off
4.编辑vi /etc/selinux/config
修改以下内容
SELINUX=disabled
5.检测:用ping命令分别ping www.baidu.com
和node02,03,04看是否能否相互ping通
6.温馨提示:(1)可以用虚拟机拍快照存下现在配好的版本,以防后面出错可恢复到现在的状态。(2)在做每一步的时候做完尽量验证一下是否正确,不然到后面出错很麻烦
二、 打开node02开始伪分布式安装
1.用传输软件将准备好的安装包给传到node02下
2.rpm -i jdk-7u67-linux-x64.rpm
3.vi + /etc/profile
添加以下内容
保存后source /etc/profile
用 Jps验证,出现一行数字加结果就正确了
4.免秘钥设置:
(1) 用ssh localhost
生成.ssh文件并用ll -a查看(ssh后别忘了exit)
(2)生成免秘钥ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
并追加
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
(3)检测:分别用ssh localhos
t和ssh node02
验证,不用输输密码就成功了(注意:每次ssh一次都要exit才能进行下一步操作)
5.准备好一个hadoop-2.6.5.tar.gz版本,安装到你想要安装的目录下
tar xf hadoop-2.6.5.tar.gz -C /opt/xxx
然后去查看以下这个目录有无解压好
vi /etc/profile
修改如下保存后记得source /etc/profile
检测:输入hd按Tab键可以联想出hdfs
输入start-d
按Tab键可以联想出start-dfs.
就表示配置成功了
7.切换到cd /opt/xxx/hadoop-2.6.5/etc/hadoop
目录,分别配置如下文件
给这三个文件里的export JAVA_HOME都改成绝对路径/usr/java/jdk1.7.0_67
(注意把JAVA_HOME前面的#给删除)
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
8.修改hadoop配置文件信息
(1) 配置 vi core-site.xm
(在两个之间加入下面内容)
fs.defaultFS
hdfs://node02:9000
hadoop.tmp.dir
/var/xxx/hadoop/pseudo
(2)修改hadoop配置文件信息
配置 vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node02:50090</value>
</property>
(3)配置slaves文件
vi slaves
node02
9.格式化hdfs
hdfs namenode -format
(只能格式化一次,再次启动集群不要执行,否则clusterID变了)
之前/var/xxx/hadoop/pseudo这个文件不存在,格式化后就存在了
10.启动集群
start-dfs.sh
,并用jps验证下都有哪些进程启动起来了。
11.在浏览器里打开node02:50070(别用360浏览器!)
12.运行wordcount
创建目录:hdfs dfs -mkdir -p /user/root
上传文件 :hdfs dfs -put a.txt /user/root
(将一个任意a文本文件上传)
在hdfs里建立输入目录和输出目录
hdfs dfs -mkdir -p /data/input
hdfs dfs -mkdir -p /data/output
将要统计数据的文件上传到输入目录并查看
hdfs dfs -put a.txt /data/input
hdfs dfs -ls /data/input
进入MapReduce目录
cd /opt/xxx/hadoop-2.6.5/share/hadoop/mapreduce/
运行wordcount
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/input /data/output/result
查看运行结果
hdfs dfs -ls /data/output/result
hdfs dfs -cat /data/output/result/part-r-00000
最后停止集群:stop-dfs.sh
三、
Hadoop高可用安装
1.将node02上的jdk分别发到node03、04、05并安装
scp jdk-7u67-linux-x64.rpm node03:`pwd`
scp jdk-7u67-linux-x64.rpm node04:`pwd`
scp jdk-7u67-linux-x64.rpm node05:`pwd`
安装命令:rpm -i jdk-7u67-linux-x64.rpm
并将配置文件cd /etc下的profile文件发到其他三台上去
scp profile node03:`pwd`
并刷新profile:source /etc/profile
用jps检查是否都安装好
2.将四台机子同(安装同步器并运行)
(1).yum进行时间同步器的安装
yum - install ntp
(2).执行同步命令
ntpdate time1.aliyun.com
和阿里云服务器时间同步
3.免秘钥设置:
(1)把node02的公钥发送给其他三台(node02在上面步骤的时候已经生成过免秘钥了)
scp id_dsa.pub node03:`pwd`/node02.pub
(公钥发送给node03,改名为node02)代码中的 ’ 这个符号不是单引号,是数字键1旁边的那个符号
并在其它三台机子上追加node02的公钥:
cat node02.pub >> authorized_keys
(在.ssh文件下追加)
(2)在node02下验证是否成功免秘钥ssh node03、04、05(每ssh一次都要exit才能进行下一次ssh)
(3)在其他三台上的家目录下用ssh
loalhost,生成.ssh文件,用ll -a查看
并生成免秘钥:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
且追加:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
用同样方法使node02和node02之间能够免秘钥
也要验证以下
4.修改一些namenode的一些配置信息
(1)vi hdfs-site.xml
(配置内容如下)
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<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>node02:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node03:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node02:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node03:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node02:8485;node03:8485;node04:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/xxx/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>
<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>
(2)vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/xxx/hadoop/pseudo</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node03:2181,node04:2181,node05:2181</value>
</property>
</configuration>
(3)vi slaves
node04
node05
node06
5.安装hadoop(首先cd /opt/xxx/Hadoop-2.6.5
下)
cd /opt ,将其下的xxx目录分发到node03、04、05
scp –r xxx/ node03:`pwd`
scp –r xxx/ node04:`pwd`
scp –r xxx/ node05:`pwd`
6.安装zookeeper(准备好zookeeper安装包在node03上安装)
(1)解压安装zookeeper
tar xf zookeeper-3.4.6.tar.gz -C /opt/ldy
(2)修改zookeeper的配置文件
cd /opt/xxx/zookeeper-3.4.6/conf
(3)给zoo_sample.cfg改名
cp zoo_sample.cfg zoo.cfg
(4)vi zoo.cfg
改dataDir=/var/xxx/zk
并在末尾追加
server.1=node03:2888:3888
server.2=node04:2888:3888
server.3=node05:2888:3888
(5)把zookeeper分发到其他节点(先cd /opt/xxx
下)
scp -r zookeeper-3.4.6/ node05:`pwd`
scp -r zookeeper-3.4.6/ node06:`pwd`
- 给每台机子创建刚配置文件里的路径(03、04、05台)
mkdir -p /var/xxx/zk
对node03来说:
echo 1 > /var/xxx/zk/myid
cat /var/xxx/zk/myid
对node04来说:
echo 2 > /var/xxx/zk/myid
cat /var/xxx/myid
对node05来说:
echo 3 > /var/xxx/zk/myid
cat /var/xxx/zk/myid
- 配置文件并启动zookeeper
(1)在node03上cd /etc/profile里面配置如下内容并分发给04、05(分发命令:scp /etc/profile node05:/etc
,注意别忘了source /etc/profie
)
(2)验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh
(3)启动zookeeper
全部会话(03、04、05):zkServer.sh start
接着用zkServer.sh status查看每个zookeeper节点的状态
10.启动其他节点
(1)在02、03、04三台机子上分别把journalnode启动起来
hadoop-daemon.sh start journalnode
用jps检查下进程启起来了没
(3)在node02和node03上启动namenode
①在node02上格式化namenode
hdfs namenode -format
②然后,启动node02上的namenode
hadoop-daemon.sh start namenode
③在node03上同步上一台数据
hdfs namenode -bootstrapStandby
再启动:hadoop-daemon.sh start namenode
11.在node03上格式化zkfc:
hadoop-daemon.sh start namenode
在node04上执行zkCli.sh打开zookeeper客户端看hadoop-ha是否打开
12. 在node02上启动hdfs集群:
start-dfs.sh
jps验证是否该启动的都启动起来了
node02的jps
node03的jps
node04的jps
node05的jps
13.如果有什么没启动启来的都可以去查看/opt/xxx/logs/里面对应节点的日志,根据它所报告的错误改正
- 关闭集群命令:
stop-dfs.sh
关闭zookeeper命令:zkServer.sh stop
15.为MapReduce做准备(在node02上操作)
(1)把mapred-site.xml.template留个备份,并且改下名字
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml里添加如下property
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)在yarn-site.xml里添加如下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>node04</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node05</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node03:2181,node04:2181,node05:2181</value>
</property>
(3)把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`
(4)node05上免密钥登录node05:(同上)
在node05的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost
验证看是否需要密码,别忘了exit
将node05 的公钥分发到node05
scp id_dsa.pub node04:`pwd`/node06.pub
在node04的.ssh在这里插入代码片目录下,追加node05.pub
cat node05.pub >> authorized_keys
在node03上ssh node04,看是否免密钥
(5).启动zookeeper,全部会话zkServer.sh start
在node02上启动hdfs,start-dfs.sh
在node02上启动yarn,start-yarn.sh
在node04、05上分别启动resourcemanager,
yarn-daemon.sh start resourcemanager
全部会话jps,看进程全不全
node02的jps
node03的jps
node04的jps
node05的jps
- 在浏览器访问node04:8088,查看resourcemanager管理的内容
17.到这里我们我hadoop也就基本搭建完了,接下来就是在Windows下搭建了下期再见
五、跑个高可用wordcount演示一下
1.按照前面node02跑法,先创建个输入输出文档这里分别取名为input和output(命令就不打了,在前面)
2.准备好的文档上传(我传的如下)
3.mapreduce目录下运行命令:
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /date/input t/result
运行结果如下:
4.这就算跑完了,和一台机子跑的好像没啥区别