hadoop

hadoop-1.2.1

Hadoop是一个由apache基金会所开发的分布系统基础架构。

Hadoop实现一个分布式文件系统Hadoop Distributed file System 简称HDFS

核心设计HDFS(提供文件操作和数据存储)和MapReduce(实现任务的分发、跟踪、执行、收集结果)

对于hadoop的集群来讲,可分成2类:master和salve,是由一个NameNode和若干个DataNode组成。

NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataDode管理存储的数据。

MapReduce框架是由一个单独运行在主节点的JobTracker和运行在每个集群从节点的TaskTracker共同组成。主节点负责调度构成一个作业的所有任务,这些任务分布在不通的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个job被提交时,JobTracker接到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行

 

先决条件

确保在你集群中的每个节点上都安装了所有必须软件:sun-JDK ssh  Hadoop

JavaTM1.5.X,必须安装,建议选择sun公司发行的java版本

ssh必须安装并且保证sshd一直运行,以便用hadoop脚本管理远端hadoop守护进程

 

实验环境

操作平台:hyper-v

操作系统:2.6.32-220.el6.x86_64 (centos6.2)

软件版本:hadoop-1.2.1 jdk-6u45

集群架构:包括4个节点:1个master,3个salve,节点之间局域网连接,可以互相ping通

主机名   IP                 系统版本      Hadoop node       hadoop进程名

Master   172.20.38.100      centos6.2    Master             namenode,jobtracker

Slave1   172.20.38.101      centos 6.2    Slave              datanode,tasktracker

Slave2   172.20.38.102      centos 6.2    Slave              datanode,tasktracker

Slave3   172.20.38.103      centos 6.2    Slave              datanode,tasktracker

 

安装步骤

下载:jdk-6u45-linux  hadoop-1.2.1.tar.gz

配置网络和主机名及用户

 

Jdk安装

[root@master soft]# /bin/bash  jdk-6u45-linux-x64.bin

[root@master soft]# mv jdk1.6.0_45/ /usr/local/jdk -R

 

添加java环境变量

[root@master soft]# vim /etc/profile

在文件最后面加上如下内容

exportPATH=/usr/local/jdk/bin:/usr/local/jdk/jre/lib:/usr/local/jdk/jdk/lib:$PATH

使环境变量生效:

[root@localhost soft]# source /etc/profile

 

在所有服务器上建立相同的用户hadoop,将主目录做为安装目录:/home/hadoop/hadoop-1.1.2

在master上配置hosts解析,slave上相同配置

172.20.38.100 master

172.20.38.101 slave1

172.20.38.102 slave2

172.20.38.103 slave3

配置主机名,以master为例,slave1 slave2slave3,改完后重启生效

[hadoop@master hadoop-1.1.2]$ cat/etc/sysconfig/network

NETWORKING=yes

HOSTNAME=master

 

Ssh配置

在hadoop启动以后,namenode是通过ssh来启动和停止各个datanode上的各种守护进程,这就必须要在节点之间执行指令的时候是不需要输入密码的形式,故需要配置ssh运用无密码弓腰认证的形式。

本例中,master是主节点,须要连接slave1、slave2、slave3.

 

在master主机生成密钥对(全部默认,回车)

[root@localhost hadoop]# su hadoop

[hadoop@localhost ~]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key(/home/hadoop/.ssh/id_rsa):

Created directory '/home/hadoop/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in/home/hadoop/.ssh/id_rsa.

Your public key has been saved in/home/hadoop/.ssh/id_rsa.pub.

The key fingerprint is:

66:af:37:80:3a:ba:28:8b:5a:ff:33:ab:39:77:c4:afhadoop@localhost

The key's randomart image is:

+--[ RSA 2048]----+

|                |

|                |

|                |

|                |

|       oS        |

|      .o+.       |

|  .  . . o.     |

|oo .+.+ ..+     |

|B.oo+*o=Eo .    |

+-----------------+

[hadoop@localhost ~]$ cat ~/.ssh/id_rsa.pub

ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEAu4mpWdP8ylXdM9KuWtzf0avxXt+2xnegHlCZaZdV+DNgtGSvpCU5pFKzjR9qvRH8epAf1usc2+KfMo6w5LpDK9wQ+dRhGoHTW0x1KN66KI6VniVV/kZqsy12K0nmBW1SMnNhBXudH9e4adkhLwkSFKpFsxYtrO7TvsuxbgeuwGk7hTXEQfPk0Zs6ZmlQILlL1BYP2sHl9BM/MD5KN2ERCq2YcyRVCCOxeQcP/HIqFWZOF4vLLts5TOJlGWdmPFRHwCRcFsOSCdXajJRHfYura1M9tWd3up/xI68710RouUoGuYikWHB3+Znw2hcYK2RI3SxdNaC4t/lt9JJ/0InJEw==hadoop@localhost

 

将master公钥添加到远程slave主机上

[hadoop@localhost ~]$ cp .ssh/id_rsa.pub .ssh/^C

[hadoop@localhost ~]$ cp ~/.ssh/id_rsa.pub~/.ssh/authorized_keys

[hadoop@localhost ~]$ chmod 600 ~/.ssh/authorized_keys

[hadoop@localhost ~]$ scp -r ~/.ssh hadoop@172.20.38.101:/home/hadoop/

注:authorized_keys权限设置为600,否则会出问题

 

测试登陆

[hadoop@localhost ~]$ ssh slave3

The authenticity of host 'slave3 (172.20.38.103)'can't be established.

RSA key fingerprint is9a:31:73:88:08:85:ae:26:56:5f:4c:9f:16:36:b4:a6.

Are you sure you want to continue connecting (yes/no)?yes

Warning: Permanently added 'slave3,172.20.38.103'(RSA) to the list of known hosts.

 

安装hadoop

下载安装包到hadoop用户下,解压,/home/hadoop/hadoop-1.1.2

添加环境变量,root用户添加

[root@localhost hadoop]# echo 'exportPATH=/home/hadoop/hadoop-1.2.1/bin:$PATH' >> /etc/profile

[root@localhost hadoop]# source /etc/profile

配置conf/hadoop-env.sh文件

echo 'export JAVA_HOME=/usr/local/jdk/' >>conf/hadoop-env.sh

测试hadoop安装

[hadoop@localhost hadoop-1.1.2]$/home/hadoop/hadoop-1.1.2/bin/hadoop jar hadoop-examples-1.1.2.jar wordcountconf/ /tmp/out

 

集群配置,在所有节点上配置相同

配置文件:/home/hadoop/hadoop-1.1.2/conf/core-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>

 

<!-- Put site-specific property overrides in thisfile. -->

 

<configuration>

     <property>

         <name>fs.default.name</name>

         <value>hdfs://172.20.38.100:49000</value>

     </property>

     <property>

         <name>hadoop.tmp.dir</name>

              <value>/home/hadoop/tmp</value>

     </property>

     <property>

         <name>fs.checkpoint.period</name>

         <value>60</value>

     </property>

</configuration>

注释:fs.default.name是NameNode的URI。 hdfs://主机名:端口

       hadoop.tmp.dir是hadoop的默认临时路径,最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。需要重新执行NameNode格式化命令

       fs.checkpoint.period:snn 检查nn日期的时间周期,文档为66秒,生产环境建议12小时

 

配置文件:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>

 

<!-- Put site-specific property overrides in thisfile. -->

 

<configuration>

       <property>

               <name>mapred.job.tracker</name>

               <value>172.20.38.100:49001</value>

       </property>

</configuration>

注释:mapredjob.tracker是jobtracker的主机(或ip)和端口。主机:端口

 

配置文件:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>

 

<!-- Put site-specific property overrides in thisfile. -->

 

<configuration>

       <property>

               <name>dfs.name.dir</name>

               <value>/home/hadoop/name1, /home/hadoop/name2</value>

                <description></description>

       </property>

       <property>

               <name>dfs.data.dir</name>

               <value>/home/hadoop/data1, /home/hadoop/data2</value>

               <description> </description>

       </property>

       <property>

                 <name>dfs.replication</name>

                 <value>2</value>

       </property>

</configuration>

 

注释:dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分隔的目录列表时,nametable数据将会被复制到所有目录中做冗余备份

       dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分隔的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不通设备上

      dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建会有问题

 

配置文件masters和slaves主从节点,注意最好使用主机名,并且保证机器之间通过主机名可以访问

[hadoop@localhost conf]$ cat masters

master

[hadoop@localhost conf]$ cat slaves

slave1

slave2

slave3

配置结束,把配置好的hadoop文件拷贝到其他集群的机器中,并且保证上面的配置对于其他机器正确,如果其他机器的java安装路径不一样,需要修改conf/hadoop-env.sh

scp -r /home/hadoop/hadoop-1.1.2 slave1:/home/hadoop/

scp -r /home/hadoop/hadoop-1.1.2 slave2:/home/hadoop/

scp -r /home/hadoop/hadoop-1.1.2 slave3:/home/hadoop/

 

hadoop启动

[hadoop@master ~]$ cd /home/hadoop/hadoop-1.1.2/bin/

[hadoop@master bin]$ ./start-all.sh

starting namenode, logging to /home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-namenode-master.out

slave2: starting datanode, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-datanode-slave2.out

slave3: starting datanode, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-datanode-slave3.out

slave1: starting datanode, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-datanode-slave1.out

slave2: [Fatal Error] hdfs-site.xml:20:15: The elementtype "value" must be terminated by the matching end-tag"</value>".

slave1: [Fatal Error] hdfs-site.xml:20:15: The elementtype "value" must be terminated by the matching end-tag"</value>".

master: starting secondarynamenode, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-secondarynamenode-master.out

starting jobtracker, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-jobtracker-master.out

slave1: starting tasktracker, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-tasktracker-slave1.out

slave2: starting tasktracker, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-tasktracker-slave2.out

slave3: starting tasktracker, logging to/home/hadoop/hadoop-1.1.2/libexec/../logs/hadoop-hadoop-tasktracker-slave3.out

 

测试

[hadoop@slave3 hadoop-1.1.2]$ netstat -ano|grep 49000

tcp       0      0::ffff:172.20.38.103:50380 ::ffff:172.20.38.100:49000 ESTABLISHED off (0.00/0/0)

[hadoop@slave3 hadoop-1.1.2]$ netstat -ano|grep 49001

tcp       0      0 ::ffff:172.20.38.103:56142  ::ffff:172.20.38.100:49001  ESTABLISHED off (0.00/0/0)

 

访问master是否正常http://172.20.38.100:50070

Jps查看守护进程是否运行

Master                                        Slave

      

查看集群状态统计信息 hadoop dfsadmin -report

 

常用命令

hadoop dfs -ls #列出HDFS下文件

hadoop dfs -ls in #列出HDFS下某个文档中的文件

hadoop dfs -put test.txt test #上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功

hadoop dfs -get in getin #从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录

hadoop dfs -rmr out #删除HDFS上的out目录

hadoop dfs -cat in/* #查看HDFS上in目录的内容

hadoop dfsadmin -safemode leave #退出安全模式

hadoop dfsadmin -safemode enter #进入安全模式

 

 

添加一个新的节点

在新加的节点上安装hadoop

修改hadoop/conf/master文件,加入NmaeNode主机名

在NameNode节点上修改Hadoop/conf/slaves文件,加入新加节点主机名

建立到新加节点无密码的ssh连接

运行启动命令 start-all.sh

访问http://master:50070  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯飙的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值