PS:1.没有特殊说明的情况下,请和截图中的选择保持一致,以免引起不必要的麻烦
此时虽然创建好了虚拟机,但还没有安装Cent OS,接下来我们来安装Cent OS
单击VMware Workstation的编辑——虚拟网络编辑器,查看自己的子网IP
在Cent OS中,输入以下命令:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
在打开的文件中,删除UUID和MAC地址(HWADDR)
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.61.30(注意:61是每台机器不一样的,根据之前在VMware Workstation中查到的子网IP来进行设置)
NETMASK=255.255.255.0
GATEWAY=192.168.61.2
DNS=192.168.61.2
设置完成后的截图:
保存上述文件后,执行:
service network restart
出来的都是OK才行
然后执行以下命令ping一下百度,看看能不能通:
(在Linux命令运行时,按Ctrl+C组合键可以打断命令运行)
ping www.baidu.com
在任意目录下执行:
rm -rf /etc/udev/rules.d/70-persistent-net.rules
删除70-persistent-net.rules
扩展阅读:
那么为什么要删除上述文件呢?
接下来我们要以parents为原版,克隆4台虚拟机,如果保留以上文件,在通过该虚拟机克隆的时候:
1.文件被带到了新的虚拟机中
2.VM Warestation变更了新的虚拟机的MAC地址
导致:新的虚拟机不能使用eth0接口,导致后续配置的/etc/sysconfig/network-scripts/ifcfg-eth0无法应用
输入以下命令关闭防火墙:
service iptables stop
chkconfig iptables off
使用以下命令打开config,设置SELINUX=disabled:
vi /etc/selinux/config
输入以下命令关机:
poweroff
注意:虚拟机克隆一定要用刚刚拍摄的快照来克隆
将克隆的虚拟机命名为node01:
按照上述方法,克隆node02,node03和node04。
克隆完成:
(以node01为例)
使用下列命令打开network文件配置主机名:
vi /etc/sysconfig/network
(另外3台配置方式参考node01,
node02的HOSTNAME=node02,
node03的HOSTNAME=node03,
node04的HOSTNAME=node04)
使用下列命令打开ifcfg-eth0文件配置IP:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
确保输入的都是OK,确保可以ping通百度:
(另外3台配置方式参考node01,
node02的IPADDR=192.168.X.32,
node03的IPADDR=192.168.X.33,
node04的IPADDR=192.168.X.33,
X的值和电脑有关,如果忘记了X的值,在VMware Workstation的编辑——虚拟网络编辑器查看,如下图所示(我的电脑的X=61):
)
使用以下命令打开hosts文件进行配置:
vi /etc/hosts
建议:
配好4台机子的3个文件后,建议检查是否可以互相ping通,以免造成不必要的麻烦。
文件路径为:
C:\Windows\System32\drivers\etc
然后打开命令行,看是否可以用ping通这些结点:
如何新建Xshell连接?
以node01为例,单击文件——新建,按下图设置好连接
可以保存密码以简化后续连接
第一次打开连接或修改密码后打开连接会有如下提示,选择接受并保存即可
如何使用Xftp传输文件?
如果Xshell和Xftp版本可用协作,只要在Xshell中单击如下图标,即可建立文件传输连接:
下图所示的就是已经建立好的Xftp连接
先把事先准备好的jdk-7u67-linux-x64.rpm放到node01的/root路径下
执行下列命令安装jdk:
rpm -i jdk-7u67-linux-x64.rpm
执行以下命令确定java的路径:
whereis java
根据查询到的java的路径,修改profile文件下的环境变量:
执行下列命令打开profile文件
vi + /etc/profile
在打开的的文件,添加:
export JAVA_HOME=/usr/bin/java
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin
执行下列命令:
source /etc/profile
执行:
jps
知识链接:如何回到家目录?
执行下列命令即可:
cd
在家目录下,执行:
ll -a
看看有无.ssh文件夹,如果没有,执行:
ssh localhost
每次执行ssh登录以后,都不要忘了执行下列命令退出登录:
exit
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
知识链接:刚刚两条命令的作用是什么?
确认免秘钥是否成功(注意每次ssh以后都别忘了exit):
ssh localhost
ssh node01
先进入/opt建好自己的个人目录:
cd /opt
mkdir ztl
把事先准备好的hadoop-2.6.5.tar.gz文件传入node01,执行下列命令,把Hadoop安装到自己的个人目录:
tar xf hadoop-2.6.5.tar.gz -C /opt/ztl
如果想要在任意目录启动Hadoop,需要修改配置文件:
vi /etc/profile
在打开的配置文件里,添加或修改:
export JAVA_HOME=/usr/bin/java
export HADOOP_HOME=/opt/ztl/hadoop-2.6.5
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
不要忘了执行:
source /etc/profile
在输入命令时
如果输入hd后,按下Tab键,可以联想出hdfs
按下start-d按Tab键可以联想出start-dfs.
就表示配置成功了
执行下列命令,进入hadoop目录:
cd /opt/ztl/hadoop-2.6.5/etc/hadoop
打开下列文件,把JAVA_HOME都改成绝对路径:
/usr/java/jdk1.7.0_67
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
修改core-site.xml,下面是已经修改好的一个例子,供大家参考:
fs.defaultFS</name>
hdfs://node01:9000</value>
</property>
hadoop.tmp.dir</name>
/var/ztl/hadoop/pseudo</value>
</property>
</configuration>
修改hfds-site.xml,下面是已经修改好的一个例子,供大家参考:
dfs.replication</name>
1</value>
</property>
dfs.namenode.secondary.http-address</name>
node01:50090</value>
</property>
</configuration>
由于目前还是伪分布式安装,所以副本数只有1台。
配置slaves
slaves文件的路径是/opt/ztl/hadoop-2.6.5/etc/hadoop
把localhost删掉,加上node01
执行下列命令,格式化hdfs:
hdfs namenode -format
格式化后请检查/var/ztl/hadoop/pseudo这个目录是否存在。
注意事项:
不要多次格式化namenode,否则会导致namenode的clusterID和datanode的clusterID不一样,从而导致datanode无法启动。
如果不小心多次格式化导致以上问题,
分别进入
/var/ztl/hadoop/pseudo/dfs/name/current
/var/ztl/hadoop/pseudo/dfs/data/current
/var/ztl/hadoop/pseudo/dfs/namesecondary/current
修改3个路径下的VERSION文件中的clusterID,使其一致
start-dfs.sh
创建目录
hdfs dfs -mkdir -p /user/root
在浏览器中查看目录是否建好:
在家目录下新建test.txt,然后上传文件:
hdfs dfs -put test.txt /user/root
stop-dfs.sh
使用如下命令分发:
scp jdk-7u67-linux-x64.rpm node02:`pwd`
scp jdk-7u67-linux-x64.rpm node03:`pwd`
scp jdk-7u67-linux-x64.rpm node04:`pwd`
并在Xshell的全部会话栏里一起ll,看jdk是否发送成功
分别在node04、05、06上执行rpm安装命令:
rpm -i jdk-7u67-linux-x64.rpm
在node03上
cd /etc
在此目录下把profile文件分发到node02、03、04上:
scp profile node02:`pwd`
scp profile node03:`pwd`
scp profile node04:`pwd`
利用Xshell全部会话栏:
source /etc/profile
利用Xshell全部会话栏:
jps
看node02、node03、node04这三台机子的jdk是否装好
使用以下命令查看时间:
date
时间不能差太大,否则集群启动后某些进程跑不起来
若时间不同步,怎么办?
1.yum进行时间同步器的安装
yum -y install ntp
2.执行同步命令(和阿里云服务器时间同步)
ntpdate time1.aliyun.com
1.查看HOSTNAME是否正确
cat /etc/sysconfig/network
2.查看IP映射是否正确
cat /etc/hosts
3.查看SELINUX是否关闭(disabled)
cat /etc/sysconfig/selinux
4.查看防火墙是否关闭
service iptables status
1.node02、node03、node04在家目录下 ll –a看下有无.ssh目录,如果没有就执行
ssh localhost
一下(ssh localhost后别忘了exit)。
2.
cd ssh
并
ll
查看一下
3.把node01的公钥发给其他三台机子
scp id_dsa.pub node02:`pwd`/node01.pub
scp id_dsa.pub node03:`pwd`/node01.pub
scp id_dsa.pub node04:`pwd`/node01.pub
4.分别在node02、node03、node04的.ssh目录下查看是否有node01.pub,如果有,就追加到authorized_keys
cat node01.pub >> authorized_keys
并且在node01上ssh另外3台机子是否免秘钥了,每次ssh都别忘了exit
ssh node02
exit
ssh node03
exit
ssh node04
exit
在node02上生成自己的秘钥:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh验证免秘钥是否成功,然后exit
把node02的秘钥分发到node01上:
scp id_dsa.pub node01:`pwd`/node02.pub
在node01的.ssh目录下执行:
cat node02.pub >> authorized_keys
在node02上ssh node03看看是否可以免秘钥登录node01,然后exit
hdfs-site.xml,core-site.xml,slaves文件均位于/opt/ztl/hadoop-2.6.5/etc/hadoop
1.修改node01的hdfs-site.xml,下面是一个修改好的实例:
dfs.replication</name>
3</value>
</property>
dfs.nameservices</name>
mycluster</value>
</property>
dfs.ha.namenodes.mycluster</name>
nn1,nn2</value>
</property>
dfs.namenode.rpc-address.mycluster.nn1</name>
node01:8020</value>
</property>
dfs.namenode.rpc-address.mycluster.nn2</name>
node02:8020</value>
</property>
dfs.namenode.http-address.mycluster.nn1</name>
node01:50070</value>
</property>
dfs.namenode.http-address.mycluster.nn2</name>
node02:50070</value>
</property>
dfs.namenode.shared.edits.dir</name>
qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
dfs.journalnode.edits.dir</name>
/var/ztl/hadoop/ha/jn</value>
</property>
dfs.client.failover.proxy.provider.mycluster</name>
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
dfs.ha.fencing.methods</name>
sshfence</value>
</property>
dfs.ha.fencing.ssh.private-key-files</name>
/root/.ssh/id_dsa</value>
</property>
dfs.ha.automatic-failover.enabled</name>
true</value>
</property>
</configuration>
2.修改node01的core-site.xml,下面是一个修改好的实例:
fs.defaultFS</name>
hdfs://mycluster</value>
</property>
ha.zookeeper.quorum</name>
node02:2181,node03:2181,node04:2181</value>
</property>
</configuration>
3.修改node01的/opt/ztl/hadoop-2.6.5/etc/hadoop目录下的slaves,下面是修改好的一个实例:
node02
node03
node04
在node01下cd /opt,把ztl目录分发到node02、node03、node04:
scp -r ztl/ node02:`pwd`
scp -r ztl/ node03:`pwd`
scp -r ztl/ node04:`pwd`
1.把zookeeper-3.4.6.tar.gz放在node02的家目录,然后解压安装zookeeper:
tar xf zookeeper-3.4.6.tar.gz -C /opt/ztl
2.修改zookeeper的配置文件:
cd /opt/ztl/zookeeper-3.4.6/conf
3.把zoo_sample.cfg复制一个副本,命名为zoo.cfg:
cp zoo_sample.cfg zoo.cfg
4.打开zoo.cfg,改dataDir=/var/ztl/zk,并在末尾追加
server.1=node04:2888:3888
server.2=node05:2888:3888
server.3=node06:2888:3888
其中2888主从通信端口,3888是当主挂断后进行选举机制的端口
5.把/opt/ztl目录下的zookeeper分发到node03、node04
scp -r zookeeper-3.4.6/ node03:`pwd`
scp -r zookeeper-3.4.6/ node04:`pwd`
使用以下命令查看是否分发成功:
ll /opt/ztl
6.给每台机子创建刚配置文件里的路径
在node02、node03、node04下执行:
mkdir -p /var/ztl/zk
给每台机子配置其编号(必须是阿拉伯数字)
对node02来说:
echo 1 > /var/ztl/zk/myid
cat /var/ztl/zk/myid
对node03来说:
echo 2 > /var/ztl/zk/myid
cat /var/ztl/zk/myid
对node04来说:
echo 3 > /var/ztl/zk/myid
cat /var/ztl/zk/myid
7.在node02的/etc/profile里面配置
export ZOOKEEPER_HOME=/opt/ztl/zookeeper-3.4.6
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
8.把node02的/etc/profile分发到node03、node04
scp /etc/profile node03:/etc
scp /etc/profile node04:/etc
9.在node04、node05、node06里
source /etc/profile
验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh
在node02、node03、node04使用以下命令启动zookeeper(由于node01并没有安装zookeeper,所以也可以用全部会话发送下列命令):
zkServer.sh start
然后用以下命令查看zookeeper结点状态:
zkServer.sh status
注意:如果启动不起来,请把/etc/profile里的JAVA_HOME改成绝对路径。
为什么要启动JournalNode?
为了使两台NameNode间完成数据同步
在node01、node02、node03三台机子上分别把journalnode启动起来
hadoop-daemon.sh start journalnode
用jps检查下进程启起来了没
随意挑一台NameNode上执行
hdfs namenode –format
另一台namenode不用执行,否则clusterID变了,找不到集群了
启动刚刚格式化的那台NameNode
hadoop-daemon.sh start namenode
hdfs namenode -bootstrapStandby
hdfs zkfc -formatZK
在node02上执行zkCli.sh打开zookeeper客户端看hadoop-ha是否打开
在node01上启动hdfs集群
start-dfs.sh
然后全部回话jps看一下启动了什么进程
用浏览器访问node01:50070和node02:50070
确认可以打开后,使用下面命令关闭集群:
stop-dfs.sh
使用下面命令关闭ZooKeeper:
zkServer.sh stop
注意事项:
下一次启动hdfs集群的时候还需要用hadoop-daemon.sh start journalnode命令启动journalnode吗?
不需要
只要start-dfs.sh就可以了。我们之前启动journalnode是为了同步两个namenode之间的信息。
把mapred-site.xml.template留个备份,并且改名复制:
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml里添加如下property
mapreduce.framework.name</name>
yarn</value>
</property>
在yarn-site.xml添加如下property
yarn.nodemanager.aux-services</name>
mapreduce_shuffle</value>
</property>
yarn.resourcemanager.ha.enabled</name>
true</value>
</property>
yarn.resourcemanager.cluster-id</name>
cluster1</value>
</property>
yarn.resourcemanager.ha.rm-ids</name>
rm1,rm2</value>
</property>
yarn.resourcemanager.hostname.rm1</name>
node03</value>
</property>
yarn.resourcemanager.hostname.rm2</name>
node04</value>
</property>
yarn.resourcemanager.zk-address</name>
node02:2181,node03:2181,node04:2181</value>
</property>
把mapred-site.xml和yarn-site.xml 分发到node02、03、04
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`
由于node03和node04都是resourcemanager,所以它俩应该相互免密钥
node03上免密钥登录node04:
在node03的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost验证看是否需要密码,别忘了exit
将node03 的公钥分发到node04
scp id_dsa.pub node04:`pwd`/node03.pub
在node04的.ssh目录下,追加node03.pub
cat node03.pub >> authorized_keys
在node03上ssh node04,看是否免密钥
node04上免密钥登录node03:
在node04的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost验证看是否需要密码,别忘了exit
将node04 的公钥分发到node03
scp id_dsa.pub node03:`pwd`/node04.pub
在node03的.ssh目录下,追加node04.pub
cat node04.pub >> authorized_keys
在node04上ssh node03,看是否免密钥
1.启动zookeeper,全部会话
zkServer.sh start
2.在node01上启动
hdfs,start-dfs.sh
3.在node01上启动yarn
start-yarn.sh
4.在node03、04上分别启动resourcemanager
yarn-daemon.sh start resourcemanager
5.全部会话jps,看进程全不全
在浏览器访问node03:8088,查看resourcemanager管理的内容
1.打开mapreduce文件夹
cd /opt/ztl/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
4.运行wordcount(注意:此时的/data/out必须是空目录
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
hdfs dfs -ls /data/out/result
hdfs dfs -cat /data/out/result/part-r-00000
在node01
stop-dfs.sh
在node01
stop-yarn.sh
在node03、node04
yarn-daemon.sh stop resourcemanager
在node04、node05、node06
zkServer.sh stop
把压缩包解压后的这三个文件夹放到一个usr文件夹里,把usr放到一个你知道的地方。
配置环境变量
“此电脑”右键——属性——高级系统设置
单击“高级”选项卡下的“环境变量”按钮
新建系统变量HADOOP_HOME
给系统变量下的PATH追加HADOOP_HOME的bin目录
新建系统变量HADOOP_USER_NAME
把hadoop.dll拷贝到C:\Windows\System32
安装Ecipse-Mars,此版本的Eclipse带插件,可以可视化的看到Hadoop的一些东西,比较方便
如果Eclipse界面下方没有小象图标,则做后续三步调出
在Eclipse里把Hadoop相关信息填一下
新建一个Hadoop location
名字自己随便起一个,DFS Master的参数和处于Active状态的NameNode一致
这样在Eclipse左侧列表的DFS location里新建一个目录,对应hdfs里也就建好了,可以用浏览器查看一下,自己试试。
在eclipse里导入自己建一个包库
把jar包导入刚建的包库
把刚建的包库引入到project里
把JUnit包库引入到project里
利用xftp把hdfs-site.xml,core-site.xml,mapred-site.xml,yarn-site.xml等几个xml放到project的src目录