配置hadoop-1.2.1,含三个节点的集群

创建含有3个节点的Hadoop集群

1 配置虚拟集群

首先使用VMWare创建3台CentOS的虚拟机,创建的默认账号名是hadoop,密码是1111,并为各虚拟机配置IP地址及指定主机名。你可以使用如下命令创建hadoop账号和组群。

groupadd hadoop
useradd hadoop -d /home/hadoop/ -g hadoop
passwd hadoop

我们的配置计划

主机名 分配的IP地址 分配的工作
ISCASTest01 192.168.145.100 Namenode, NTP server
ISCASTest02 192.168.145.101 DataNode, zookeeper
ISCASTest03 192.168.145.102 DataNode, zookeeper

2 修改hostname

为了模拟使用SSH远程登录,因此需要给每个主机指定一个主机名,使用vim修改/etc/sysconfig/network这个文件,将如下内容:

NETWORKING=yes
HOSTNAME=localhost.localdomain

替换成

WORKING=yes
HOSTNAME=HostNewName.localdomain

往ISCASTest01,ISCASTest02,ISCASTest03的/etc/hosts文件里分别增加如下内容:

ISCASTest01$ echo  '127.0.0.1  ISCASTest01.localdomain'  >> /etc/hosts
ISCASTest02$ echo  '127.0.0.1  ISCASTest02.localdomain'  >> /etc/hosts
ISCASTest03$ echo  '127.0.0.1  ISCASTest03.localdomain'  >> /etc/hosts

依次修改每个节点的/etc/sysconfig/network. 然后使用service network restart命令使配置生效。修改好主机名之后,接着往/etc/hosts中添加如下内容,将各节点的IP地址与主机名关联起来。使用vim修改/etc/hosts,依次向ISCASTest01,ISCASTest02,及ISCASTest03节点中添加如下内容:

192.168.145.100   ISCASTest01
192.168.145.101   ISCASTest02
192.168.145.102   ISCASTest03

此外,节点ISCASTest01需要SSH免密码登录ISCASTest02,ISCASTest03。因此需要为ISCASTest01生成RSA_PUB键。

3 生成SSH PUB Key

登录ISCASTest01,使用如下命令生成SSH PUB Key,一路Enter,不要设置任何密码或修改文件生成路径:

ssh-keygen -t rsa

将生成的SSH PUB Key发送至ISCASTest02,及ISCASTest03两个节点,以及本节点

ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@ISCASTest01
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@ISCASTest02
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@ISCASTest03

测试免登录

ssh hadoop@ISCASTest01
ssh hadoop@ISCASTest02
ssh hadoop@ISCASTest03

安装NTP服务器

首先,将NTP压缩包解压:

tar -zxvf ntp-4.2.6p5.tar.gz

cd进入压缩包所在目录

./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
make; make install

修改/etc/ntp.conf。将 restrict default kod nomodify notrap nopeer noquery 修改为:

restrict default nomodify

并增加:

server  127.127.1.0     # local clock
fudge   127.127.1.0    stratum 10
server 192.168.145.100

假设我们所要配置的服务器不与外网连接,因此为了方便我们可以关闭所有节点的防火墙:

service iptables stop

返回ISCASTest01,使用如下命令启动NTP服务:

service ntpd start 

测试监听:

在ISCASTest01,使用命令:watch ntpq -p
在ISCASTest02,使用命令:ntpdate ISCASTest01

如果提示没有获得权限,使用su命令切换为root用户,再次执行这个命令

为客户机设置自动同步命令,使用命令:

crontab -e

添加如下内容:

0,30 * * * * /usr/sbin/ntpdate ISCASTest01; /usr/sbin/hwclock -w

表示 每小时0分和30分同步一次时间

查看定时任务

crontab -l

如果不想禁用防火墙,那么可以打开123端口,使NTP能正常使用。使用vim编辑

vim /etc/sysconfig/iptables

并增加:

-I OUTPUT -p udp -m udp -m multiport --dports 123 -m state --state NEW -j ACCEPT
-I INPUT  -p udp -m udp -m multiport --dports 123 -m state --state NEW -j ACCEPT

由于Hadoop是由Java编写的因此需要在系统中安装JAVA JDK以及配置JAVA Home和Java classpath

安装及配置JAVA

将JAVA JDK安装包上传至各节点后,使用如下命令进行安装,假设使用的安装包是RPM格式

rpm -i  ./jdk-8u5-linux-x64.rpm

待安装完毕后,使用vim /home/hadoop/.bashrc增加如下内容

JAVA_HOME=/usr/java/jdk1.8.0_05/
JAVA_BIN=$JAVA_HOME/bin/
JRE_HOME=$JAVA_HOME/jre/
JRE_BIN=$JRE_HOME/bin/
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_BIN:$JRE_BIN

之后使用source /home/hadoop/.bashrc使配置生效。

测试

java -version # 显示JAVA版本
jps           # 显示正在运行的JAVA进程

如果有正确输出,则证明配置完毕。

配置 Hadoop-1.2.1

配置$HADOOP_HOME/conf/hadoop-env.sh文件,需要为hadoop配置JAVA环境,增加或修改JAVA_HOME这一项

export JAVA_HOME=/usr/java/jdk1.8.0_05/

测试配置是否正确,运行Hadoop目录下/bin/hadoop,使用如下命令进行测试

./bin/hadoop version

若配置正确,则有结果输出,否则将报错。

为了方便,我们在$HADOOP_HOME/目录下创建distributed, standard, pseudo三个文件夹,并将 $HADOOP_HOME/conf 目录下的文件拷贝至这三个文件夹中,并使用 rm -rf 命令删除掉conf 文件夹。

我们将要配置的是分布式集群模式,所以使用 ln -s 将配置信息链接至 distributed 文件夹。

ln -s distributed conf

分别修改 conf/core-site.xml, conf/mapred-site.xml, conf/hdfs-site.xml

conf/core-site

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://ISCASTest01:8020</value>
        <description>The name of the default file system, using 8020 port.</description>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoopdata/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
</configuration>

conf/hdfs-site.xml

<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/hadoop/hadoopdata/mainname,/home/hadoop/hadoopdata/backname</value>
        </property>
        <property>
        <name>dfs.data.dir</name>
        <value>/home/hadoop/hadoopdata/maindata,/home/hadoop/hadoopdata/backdata</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>Default block replication. The actual number of replications can be
        specified when the file is created. The default is used if replication is not 
        specified in create time. 
        Set to 1 for pseudo-distributed mode.
        Set to 3 for distributed mode.
        </description>
    </property>
</configuration>

conf/mapred-site.xml

<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>hdfs://ISCASTest01:8021</value>
    </property>
    <property>
        <name>mapred.local.dir</name>
        <value>/home/hadoop/hadoop-1.2.1/var</value>
    </property>
</configuration> 

配置 conf/masters 及 conf/slaves

conf/masters

ISCASTest01

conf/slaves

ISCASTest02
ISCASTest03

将配置好的 hadoop 发送至各个节点

scp -r hadoop ISCASTest01:/home/hadoop/

在 namenode 上启动格式化

bin/hadoop namenode -format

在 namenode 上启动 hadoop 集群

bin/start-all.sh

测试.如果正常启动了hadoop集群后,应该分别在 ISCASTest01, ISCASTest02, ISCASTest03运行jps,应该分别看见如下输出:

ISCASTest01

40629 JobTracker
40549 SecondaryNameNode
40807 Jps
40395 NameNode

ISCASTest02

25316 TaskTracker
25447 Jps
25229 DataNode

ISCASTest03

24116 DataNode
24204 TaskTracker
24334 Jps

监听。 hadoop 提供了 Web 端的监听窗口,可以通过

• http://localhost:50030 监听集群的状态
• http://localhost:50070 监听HDFS系统的状态

外部访问,需要通过Namenode,也就是这里的ISCASTest01的IP地址进行访问。之后,需要在 ISCASTest02, 及 ISCASTest03 中配置 zookeeper。

配置 ZooKeeper-3.4.6

配置 ZooKeeper。使用 SSH 登录 ISCASTest02,下载并解压 zookeeper-3.4.6.tar.gz 安装包,修改 $ZOOKEEPER_HOME/conf/zoo_sample.cfg

mv conf/zoo_sample.cfg conf/zoo.cfg

修改配置文件

vim ./conf/zoo.cfg

将 dataDir=/tmp/zookeeper 修改为

dataDir=/home/hadoop/zookeeper-3.4.6/data

增加

logDir=/home/hadoop/zookeeper-3.4.6/log

以及

server.1=ISCASTest02:2888:3888
server.2=ISCASTest03:2888:3888

返回 $ZOOKEEPER_HOME/ 并创建 data, log 这两个目录,并在 data 目录下创建 myid 文件。

ISCASTest02$ echo 1 > ./data/myid

将配置好的 zookeeper 发送至其他节点(ISCASTest03)

scp -r /home/hadoop/zookeeper-3.4.6/ ISCASTest03:/home/hadoop/

登录其他节点,修改zookeeper-3.4.6/data/myid 的值

ISCASTest03$ echo 2 > ./data/myid

分别在各节点上,启动zookeeper,使用如下命令

./bin/zkServer.sh start

检测当前节点的状态,可以使用 jps 命令查看当前的进程

26056 QuorumPeerMain

或者使用 zkServer.sh status 查看当前节点的状态。到这一步,hadoop集群已经基本配置完毕了。访问ISCASTest02或ISCASTest03节点,将工作目录切换至/home/hadoop/zookeeper-3.4.6/bin/目录下,使用命令:

./zkCli.sh

会发现标识变成了类似这样:

[zk: localhost:2181(CONNECTED) 0]

使用 ls / 命令可以查看当前的HDFS系统上有什么文件。

最后一步,测试 word count 程序。

测试

在 ISCASTest01 节点上创建一个文件 words.txt

words.txt

Mary had a little lamb
its fleece very white as snow
and everywhere that Mary went
the lamb was sure to go

将该文件上传至HDFS中,并保存为文件words

./bin/hadoop fs -put words.txt /words

使用hadoop命令查看HDFS中的文件

./bin/hadoop fs -ls /

使用 map reduce 示例统计文件中出现的单词数量

./bin/hadoop jar hadoop-examples-1.2.1.jar wordcount /words /out

jar:        表示使用jar包
wordcount:  hadoop-examples-1.2.1.jar 中的一个示例程序
/words:     输入words文件
/out:       将结果保存到out文件夹中

等待计算完毕后,可以使用 hadoop fs -ls / 查看是否生成了out文件夹。查看HDFS下out文件目录中包含的文件

./bin/hadoop fs -ls /out

查看统计结果: /out/part-r-00000

./bin/hadoop fs -cat /out/part-r-00000

最终我们获得结果如下

a            1
as           1
and          1
everywhere   1
fleece       1
go           1
had          1
its          1
lamb         2
little       1
Marry        2
snow         1
sure         1
that         1
the          1
to           1
was          2
went         1
white        1

你可能感兴趣的:(hadoop,wordcount,ntp,远程登录,HADOOP集群)