分类: 服务器与存储
2013-08-09 14:44:38
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服务端,因此在hadoop2,hadoop3,上需要确定sshd服务已经启动。简单的说,在hadoop1上需要生成一个密钥对,即一个私钥,一个公钥。将公钥拷贝到hadoop2上,这样,比如当hadoop1向hadoop2发起ssh连接的时候,hadoop2上就会生成一个随机数并用hadoop1的公钥对这个随机数进行加密,并发送给hadoop1,hadoop1收到这个加密的数以后用私钥进行解密,并将解密后的数发送回hadoop2,hadoop2确认解密的数无误后就允许hadoop1进行连接了。这就完成了一次公钥认证过程。
首先在hadoop1上生成密钥对:
[root@hadoop1 ~]# ssh-keygen -t rsa(直接一路回车键即可)
这个命令将为hadoop1上的用户root生成其密钥对。生成的密钥对id_rsa,id_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登录hadoop2、hadoop3上是否还需要输入密码了?如果不需要那么说明则可以了。(如下图)
[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登录hadoop2、hadoop3和它自己不需要密码,但是hadoop2登录hadoop3、hadoop1还是需要密码的,我们的目的就是让其中任意两台机器都能登录另外不需要输入密码。
把hadoop1上的私钥id_rsa分别上传到hadoop2、hadoop3、hadoop4机器的/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,一行指定一个主机名。即本文中的hadoop2、hadoop3。因此slaves文件看起来应该是这样的:
datanode
datanode2
修改masters文件
打开masters文件,该文件用来指定备份节点Secondarynamenode,生产上环境部署不会将namenode和Secondarynamenode同时部署在一台服务器上,内容如下:
datanode
修改core-site.xml文件
core-site.xml是hadoop核心的配置文件,这里配置的是hdfs的地址和端口
core-site.xml的添加如下内容:
修改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系统重启时可能会造成临时目录的文件丢失。
修改dfs.data.dir的目录,原理同上:
改为
还有一处需要注意的是dfs.replication的值,hadoop默认设置为3(文件块备份份数)
修改mapred-site.xml文件
mapred-site.xml是mapreduce的配置文件,配置的是jobtracker的地址和端口
文件基本修改完成了。下面开始部署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守护。包括Jobtracker和Tasktrack
* stop-mapred.sh 停止Map/Reduce守护
* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode
* stop-dfs.sh 停止DFS守护
在这里,简单启动所有守护:
[root@hadoop1 hadoop]# bin/start-all.sh
启动的时候hadoop1上会有2个java进程,用jps命令查看进程,分别是NameNode,JobTracker。
hadoop2和hadoop3上面应该是datanode、tasktracker进程。
查看集群的状态
[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
$tar –xvf hbase-0.94.1.tar.gz
$vi /etc/profile
增加以下环境变量
export HBASE_HOME=/root/hbase-0.94.10
export PATH=$PATH:$HBASE_HOME/bin
生效修改
$source /etc/profile
hbase.rootdir是Hbase的根目录位置url地址需要跟Hadoop设置的一致。该项不识别机器IP,只能使用hostname
hbase.cluster.distributed是是否采用分布式模式。
hbase.zookeeper.quorum是运行Zookeeper节点的主机名,个数必须为奇数。
export HBASE_MANAGES_ZK=true
HBASE_MANAGES_ZK是设置是否让Hbase管理Zookeeper
3.3.3配置regionservers文件
datanode
datanode2
3.4启动Hbase
$./bin/stat-hbase.sh
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