Chinaunix首页 | 论坛 | 博客
  • 博客访问: 620054
  • 博文数量: 74
  • 博客积分: 1845
  • 博客等级: 上尉
  • 技术积分: 731
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-14 20:49
文章分类

全部博文(74)

文章存档

2017年(3)

2016年(7)

2015年(4)

2014年(6)

2013年(7)

2012年(10)

2011年(10)

2010年(4)

2009年(5)

2008年(4)

2007年(7)

2006年(6)

2005年(1)

分类: 服务器与存储

2013-08-09 14:44:38

                 hadoop集群搭建

 

 

 

1)安装jdk并检查是否正常。

2)每台几点上实现无密码认证及检查是否正常。

3)安装hadoop并配置,检查是否正常。

本次环境一共用了四台服务器,操作系统均使用RedHat4.8版本、JAVA使用的是版本是jdk1.6.0_14,当然你可以找适合自己的版本,但是务必是1.6以上。

主机名          IP地址            用途

hadoop1       192.168.10.14        namenode

hadoop2        192.168.10.16        datanode

hadoop3        192.168.10.52        datanode

hosts文件分别如下,(注意把127.0.0.1那一行直接删除掉,避免一些客观因素的影响),写完后四台机器分别使用PING每个节点的主机名测试一下连通性即可!

# more /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

#127.0.0.1              localhost.localdomain localhost

#::1            localhost6.localdomain6 localhost6

192.168.10.14   namenode

192.168.10.16   datanode

192.168.10.52   datanode2

配置java的环境变量

[root@hadoop1 ~] # vi /etc/profile

添加如下内容:

export JAVA_HOME=/usr/java/jdk1.6.0_14

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export PATH=$JAVA_HOME/bin:$PATH

让添加的环境变量生效执行如下命令:

[root@hadoop1 ~] # source /etc/profile

验证安装是否成功?如果出来以下信息则说明安装没有任何问题。

[root@hadoop1 ~]#  java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)

下载文件后上传到/root目录下并将其解压:(所有的操作均在hadoop1上操作,除去在数据节点上操作的我会特殊说明,为了实验方便就放root用户下,如果是真实环境建议放别的目录下面)

[root@hadoop1 ~] # tar -zxvf  hadoop-1.0.2.tar.gz

将解压完后的目录备份一份并且重命名为hadoop即可!(方便以后有问题好恢复)

[root@hadoop1 ~] # cp -r hadoop-1.0.2 hadoop

这样一来,所有的配置文件都在/root/hadoop/conf/目录中,所有执行程序都在/root/hadoop/bin目录中。

Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。

首先要保证每台机器上都装了SSH服务器,且都正常启动。实际中我们用的都是,这是SSH协议的一个免费开源实现。

以本文中的4台机器为例,现在hadoop1是主节点,它需要主动发起SSH连接到hadoop2,对于SSH服务来说,hadoop1就是SSH客户端,而hadoop2, hadoop3,则是SSH服务端,因此在hadoop2hadoop3,上需要确定sshd服务已经启动。简单的说,在hadoop1上需要生成一个密钥对,即一个私钥,一个公钥。将公钥拷贝到hadoop2上,这样,比如当hadoop1hadoop2发起ssh连接的时候,hadoop2上就会生成一个随机数并用hadoop1的公钥对这个随机数进行加密,并发送给hadoop1hadoop1收到这个加密的数以后用私钥进行解密,并将解密后的数发送回hadoop2hadoop2确认解密的数无误后就允许hadoop1进行连接了。这就完成了一次公钥认证过程。

首先在hadoop1上生成密钥对:

[root@hadoop1 ~]# ssh-keygen -t rsa(直接一路回车键即可)

这个命令将为hadoop1上的用户root生成其密钥对。生成的密钥对id_rsaid_rsa.pub,在/root/.ssh目录下。

然后将id_rsa.pub文件传到其它两台数据节点的/root/.ssh目录下。先在其它两台数据节点上建立隐藏目录.ssh

[root@hadoop2 ~]# mkdir /root/.ssh(在hadoop2上操作)

[root@hadoop3 ~]# mkdir /root/.ssh(在hadoop3上操作)

[root@hadoop1 ~]# scp /root/.ssh/id_rsa.pub 192.168.10.16:/root/.ssh

[root@hadoop1 ~]# scp /root/.ssh/id_rsa.pub 192.168.10.52:/root/.ssh

验证这2台数据节点上分别查看是否拷贝过去了?并且重新命名为authorized_keys文件

[root@hadoop2 ~]# mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys(在hadoop2上操作)

[root@hadoop3 ~]# mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys(在hadoop3上操作)

现在可以验证从hadoop1登录hadoop2hadoop3上是否还需要输入密码了?如果不需要那么说明则可以了。(如下图)

[root@hadoop1 ~]# ssh datanode
Last login: Mon Jun 25 09:38:22 2012 from zengzhunzhun.ninetowns.cn
[root@hadoop1 ~]# ssh datanode2
Last login: Mon Jun 25 13:52:12 2012 from zengzhunzhun.ninetowns.cn

拷贝hadoop1上的root用户的公钥id_rsa.pub重命名为authorized_keys文件

[root@hadoop1 ~]# cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

验证本机登录是否需要密码?

[root@hadoop1 ~]# ssh namenode
Last login: Tue Jun 26 13:38:28 2012 from zengzhunzhun.ninetowns.cn
上述条件我们只测试了hadoop1登录hadoop2hadoop3和它自己不需要密码,但是hadoop2登录hadoop3hadoop1还是需要密码的,我们的目的就是让其中任意两台机器都能登录另外不需要输入密码。

hadoop1上的私钥id_rsa分别上传到hadoop2hadoop3hadoop4机器的/root/.ssh/下,不需要重命名。

[root@hadoop1:~]# scp /root/.ssh/id_rsa 192.168.10.16:/root/.ssh

[root@hadoop1:~]# scp /root/.ssh/id_rsa 192.168.10.52:/root/.ssh

验证文件是否传过去,如果过去就可以测试了。随便找一台机器登录其它两台,如果可以,那么我们接着往下一步(这里不做任何阐述)

3、在/root/hadoop/conf目录下的hadoop-env.sh中设置Hadoop需要的环境变量,其中JAVA_HOME是必须设定的变量。如下图所示:

export JAVA_HOME=/usr/java/jdk1.6.0_14

修改slaves文件

如前所述,在hadoop1(NameNode)hadoop/conf目录下,打开slaves文件,该文件用来指定所有的DataNode,一行指定一个主机名。即本文中的hadoop2hadoop3。因此slaves文件看起来应该是这样的:

datanode

datanode2

修改masters文件

打开masters文件,该文件用来指定备份节点Secondarynamenode,生产上环境部署不会将namenodeSecondarynamenode同时部署在一台服务器上,内容如下:

datanode

修改core-site.xml文件
core-site.xml是hadoop核心的配置文件,这里配置的是hdfs的地址和端口

core-site.xml的添加如下内容:


   
          fs.default.name
          hdfs://namenode:9000
   

修改hdfs-site.xml文件

将默认的/root/hadoop/src/hdfs/hdfs-default.xml文件拷贝一份到/root/hadoop/conf目录下并且重命名为hdfs-site.xml,执行如下命令拷贝:

[root@hadoop1:~]# cp /root/hadoop/src/hdfs/hdfs-default.xml  /root/hadoop/conf/hdfs-site.xml

修改dfs.name.dir的目录,因为默认是在/tmp目录下,linux系统重启时可能会造成临时目录的文件丢失。

 

改为

http://blog.chinaunix.net/attachment/201206/26/23916356_1340694666k2AX.png

修改dfs.data.dir的目录,原理同上:

http://blog.chinaunix.net/attachment/201206/26/23916356_1340694752N4NN.png

改为

http://blog.chinaunix.net/attachment/201206/26/23916356_1340694756bH8o.png

还有一处需要注意的是dfs.replication的值,hadoop默认设置为3(文件块备份份数)

修改mapred-site.xml文件

mapred-site.xml是mapreduce的配置文件,配置的是jobtracker的地址和端口


     
            mapred.job.tracker
            namenode:9001
     

文件基本修改完成了。下面开始部署hadoop了。

现在需要将hadoop部署到其他的机器上,保证目录结构一致。

[root@hadoop1 ~]# scp -r /root/hadoop datanode:/root

[root@hadoop1 ~]# scp -r /root/hadoop datanode2:/root

至此,可以说,Hadoop已经在各个机器上部署完毕了,下面就让我们开始启动Hadoop吧。

启动之前,我们先要格式化namenode,先进入~/hadoop/目录,执行下面的命令:

[root@hadoop1 hadoop]# bin/hadoop namenode -format

不出意外,应该会提示格式化成功。如果不成功,就去hadoop/logs/目录下去查看日志文件。如果之前你格式化过了,再想格式化一次,必须删除/tmp/data目录下的文件才可以。

下面就该正式启动hadoop啦,在bin/下面有很多启动脚本,可以根据自己的需要来启动。

* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop

* start-mapred.sh 启动Map/Reduce守护。包括JobtrackerTasktrack

* stop-mapred.sh 停止Map/Reduce守护

* start-dfs.sh 启动Hadoop DFS守护.NamenodeDatanode

* stop-dfs.sh 停止DFS守护

在这里,简单启动所有守护:

[root@hadoop1 hadoop]# bin/start-all.sh

启动的时候hadoop1上会有2java进程,用jps命令查看进程,分别是NameNodeJobTracker

hadoop2和hadoop3上面应该是datanodetasktracker进程。

查看集群的状态

[root@hadoop1 ~]# hadoop/bin/hadoop dfsadmin -report
Configured Capacity: 316292222976 (294.57 GB)

Present Capacity: 237944385536 (221.6 GB)

DFS Remaining: 237944303616 (221.6 GB)

DFS Used: 81920 (80 KB)

DFS Used%: 0%

Under replicated blocks: 0

Blocks with corrupt replicas: 0

Missing blocks: 0

 

-------------------------------------------------

Datanodes available: 2 (2 total, 0 dead)

 

Name: 192.168.10.52:50010

Decommission Status : Normal

Configured Capacity: 278881587200 (259.73 GB)

DFS Used: 40960 (40 KB)

Non DFS Used: 71617335296 (66.7 GB)

DFS Remaining: 207264210944(193.03 GB)

DFS Used%: 0%

DFS Remaining%: 74.32%

Last contact: Fri Aug 09 10:34:32 CST 2013

 

 

Name: 192.168.10.16:50010

Decommission Status : Normal

Configured Capacity: 37410635776 (34.84 GB)

DFS Used: 40960 (40 KB)

Non DFS Used: 6730502144 (6.27 GB)

DFS Remaining: 30680092672(28.57 GB)

DFS Used%: 0%

DFS Remaining%: 82.01%

Last contact: Fri Aug 09 10:34:34 CST 2013

还可以查看或者通过网页查看集群的状态。
同样,如果要停止hadoop,则执行如下命令:

[root@hadoop1 hadoop]# bin/stop-all.sh

 

 

安装

3.1解压HBase tar包

$tar –xvf hbase-0.94.1.tar.gz

3.2设置Hbase的环境变量

$vi /etc/profile

增加以下环境变量

export HBASE_HOME=/root/hbase-0.94.10
        export PATH=$PATH:$HBASE_HOME/bin


生效修改

$source /etc/profile

3.3修改HBase的配置文件

3.3.1配置conf/hbase-site.xml文件

    hbase.rootdir

    hdfs://namenode:9000/hbase

    hbase.cluster.distributed

    true

    hbase.zookeeper.quorum

    namenode

    zookeeper.session.timeout

    60000

    hbase.zookeeper.property.clientPort

    21818



hbase.rootdir是Hbase的根目录位置url地址需要跟Hadoop设置的一致。该项不识别机器IP,只能使用hostname

hbase.cluster.distributed是是否采用分布式模式。
hbase.zookeeper.quorum是运行Zookeeper节点的主机名,个数必须为奇数。

3.3.2配置hbase-env.sh文件
export JAVA_HOME=/usr/java/jdk1.6.0_26/  

export HBASE_MANAGES_ZK=true 
HBASE_MANAGES_ZK是设置是否让Hbase管理Zookeeper
3.3.3配置regionservers文件
datanode

datanode2

3.4启动Hbase

$./bin/stat-hbase.sh

3.5查看WEB页面

HBase Master - 

 参考

http://blog.chinaunix.net/uid-23916356-id-3254578.html



################################################################################################

搭好之后测试HDFS

[root@namenode hadoop]# mkdir 123
[root@namenode hadoop]# cd 123/
[root@namenode 123]# ll
总计 0
[root@namenode 123]# echo "hello word" >test.txt
[root@namenode 123]# echo "hello wordddddd" >test1.txt
[root@namenode 123]# ll
总计 8
-rw-r--r-- 1 root root 16 09-10 17:28 test1.txt
-rw-r--r-- 1 root root 11 09-10 17:27 test.txt
[root@namenode 123]# cd ..
[root@namenode hadoop]# ll
[root@namenode hadoop]# cd bin/
[root@namenode bin]# ./hadoop dfs -put ../123 in
[root@namenode bin]# ./hadoop dfs -ls
Found 1 items
drwxr-xr-x   - root supergroup          0 2013-09-10 17:29 /user/root/in
[root@namenode bin]# ./hadoop dfs -ls ./in/*
-rw-r--r--   2 root supergroup         11 2013-09-10 17:29 /user/root/in/test.txt
-rw-r--r--   2 root supergroup         16 2013-09-10 17:29 /user/root/in/test1.txt

测试map-reduce
[root@namenode hadoop]# bin/hadoop jar hadoop-examples-1.0.2.jar wordcount in out
****hdfs://namenode:9000/user/root/in
13/09/10 17:32:08 INFO input.FileInputFormat: Total input paths to process : 2
13/09/10 17:32:08 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/09/10 17:32:08 WARN snappy.LoadSnappy: Snappy native library not loaded
13/09/10 17:32:08 INFO mapred.JobClient: Running job: job_201308131038_0003
13/09/10 17:32:09 INFO mapred.JobClient:  map 0% reduce 0%
13/09/10 17:32:51 INFO mapred.JobClient:  map 50% reduce 0%
13/09/10 17:32:54 INFO mapred.JobClient:  map 100% reduce 0%
13/09/10 17:33:06 INFO mapred.JobClient:  map 100% reduce 100%
13/09/10 17:33:11 INFO mapred.JobClient: Job complete: job_201308131038_0003
13/09/10 17:33:11 INFO mapred.JobClient: Counters: 29
13/09/10 17:33:11 INFO mapred.JobClient:   Job Counters 
13/09/10 17:33:11 INFO mapred.JobClient:     Launched reduce tasks=1
13/09/10 17:33:11 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=61013
13/09/10 17:33:11 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/09/10 17:33:11 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/09/10 17:33:11 INFO mapred.JobClient:     Launched map tasks=2
13/09/10 17:33:11 INFO mapred.JobClient:     Data-local map tasks=2
13/09/10 17:33:11 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=13604
13/09/10 17:33:11 INFO mapred.JobClient:   File Output Format Counters 
13/09/10 17:33:11 INFO mapred.JobClient:     Bytes Written=27
13/09/10 17:33:11 INFO mapred.JobClient:   FileSystemCounters
13/09/10 17:33:11 INFO mapred.JobClient:     FILE_BYTES_READ=57
13/09/10 17:33:11 INFO mapred.JobClient:     HDFS_BYTES_READ=242
13/09/10 17:33:11 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=64706
13/09/10 17:33:11 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=27
13/09/10 17:33:11 INFO mapred.JobClient:   File Input Format Counters 
13/09/10 17:33:11 INFO mapred.JobClient:     Bytes Read=27
13/09/10 17:33:11 INFO mapred.JobClient:   Map-Reduce Framework
13/09/10 17:33:11 INFO mapred.JobClient:     Map output materialized bytes=63
13/09/10 17:33:11 INFO mapred.JobClient:     Map input records=2
13/09/10 17:33:11 INFO mapred.JobClient:     Reduce shuffle bytes=29
13/09/10 17:33:11 INFO mapred.JobClient:     Spilled Records=8
13/09/10 17:33:11 INFO mapred.JobClient:     Map output bytes=43
13/09/10 17:33:11 INFO mapred.JobClient:     CPU time spent (ms)=10210
13/09/10 17:33:11 INFO mapred.JobClient:     Total committed heap usage (bytes)=367722496
13/09/10 17:33:11 INFO mapred.JobClient:     Combine input records=4
13/09/10 17:33:11 INFO mapred.JobClient:     SPLIT_RAW_BYTES=215
13/09/10 17:33:11 INFO mapred.JobClient:     Reduce input records=4
13/09/10 17:33:11 INFO mapred.JobClient:     Reduce input groups=3
13/09/10 17:33:11 INFO mapred.JobClient:     Combine output records=4
13/09/10 17:33:11 INFO mapred.JobClient:     Physical memory (bytes) snapshot=585920512
13/09/10 17:33:11 INFO mapred.JobClient:     Reduce output records=3
13/09/10 17:33:11 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=1357971456
13/09/10 17:33:11 INFO mapred.JobClient:     Map output records=4

查看hdfs文件内容

[root@namenode hadoop]# bin/hadoop dfs -ls
Found 2 items
drwxr-xr-x   - root supergroup          0 2013-09-10 17:29 /user/root/in
drwxr-xr-x   - root supergroup          0 2013-09-10 17:33 /user/root/out
[root@namenode hadoop]# bin/hadoop dfs -ls ./out
Found 3 items
-rw-r--r--   2 root supergroup          0 2013-09-10 17:33 /user/root/out/_SUCCESS
drwxr-xr-x   - root supergroup          0 2013-09-10 17:32 /user/root/out/_logs
-rw-r--r--   2 root supergroup         27 2013-09-10 17:33 /user/root/out/part-r-00000
[root@namenode hadoop]# bin/hadoop dfs -cat ./out/*
hello   2
word    1
wordddddd       1
cat: File does not exist: /user/root/out/_logs

























阅读(1669) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~