1.Haoop简介
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop(HDFS hadoop分布式文件系统)和Map Reduce(谷歌Reduce)为核心的Hadoop为用户提供系统底层细节透明的分布式基础架构。
Hadoop集群,可以分为两大角色。Master And Slve。一个HDFS集群由一个Namenode And Many Datenodes 组成。Namenode作为主服务器。管理文件系统的命名空间和客户端对文件系统的访问。datanode负责管理存储的数据。
Map Reduce框架由一个单独运行在主节点上的Job Tracker和运行在每一个从节点上Task Tracker 共同组成。主节点负责任务调度。负责一个作业的所有任务,这些任务分布给每个从节点。并且主节点监控从节点的任务执行状况。并且重新执行之前的失败任务。从节点主要负责完成主节点指派的任务。当一个Job被提交时,Job Tracker 接收到提交作业和配置信息后,就会将配置信息分布给从节点,同时调度任务并监控Task Tracker的执行。
从上可以看出,HDFS和Map Reduce共同构成了Hadoop分布式文件系统。HDFS在集群上提供了分布式文件系统。Map Reduce在集群上提供了分布式计算和任务处理。HDFS在Map Reduce任务处理中提供了文件操作和数据存储。Map Reduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作。二者结合在一起,完成了主要的分布式集群工作。
2.环境规划:
操作系统:CentOS6.4
主机规划:
主机名 IP
Mater.Hadoop 192.168.115.2 Slave1.Hadoop 192.168.115.3 Slave2.Hadoop 192.168.115.4 Slave3.Hadoop 192.168.115.5
软件包规划:
jdk6.tar.gz hadoop-1.2.1.tar.gz
3.网络配置
3.1 主机名配置
vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=Mater.Hadoop GATEWAY=192.168.115.1
3.2 IP地址修改
vi /etc/sysconfig/network-scripts/ifcfg-eth0 IPADDR=192.168.115.2 NETMASK=255.255.255.0 GATEWAY=192.168.115.1 DNS1=202.106.46.151
3.3 配置hosts文件【必须配置项,所有机器都需要必须配置】
192.168.115.2 Mater.Hadoop 192.168.115.3 Slave1.Hadoop 192.168.115.4 Slave2.Hadoop 192.168.115.5 Slave3.Hadoop
4 配置Mater到所有slave无密码登陆
4.1 SSH无密码登陆原理:
首先在客户端 使用ssh-keygen -t rsa 命令在本地生成一个密钥对,id_rsa(秘钥)、id_rsa.pub(公钥),然后将公钥复制给服务器端,当客户端用ssh连接服务器端的时候,会在服务器端生成一个随机数,然后用此公钥对这个随机数进行加密,最后发送给客户端,客户端使用本地私钥对这个随机数进行解密,解密之后,将得到的结果回传给服务器端进行比对,如果服务器端确认是和自己生成的随机数相同,ssh开始进行无密码连接。
4.2 修改sshd_config配置文件,以root用户操作
(1) su - root && vi /etc/ssh/sshd_config RSAAuthentication yes # 启用 RSA 认证 PubkeyAuthentication yes # 启用公钥私钥配对认证方式 AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径 重启SSH服务: service sshd restart
4.3 Master上生成秘钥对,以Hadoop用户操作
本地端:
(1)ssh-keygen -t rsa (2)ls -a /home/hadoop/.ssh/ (3)cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys (4)chmod 600 /home/hadoop/.ssh/authorized_keys (5)ll /home/hadoop/.ssh/authorized_keys (6)ssh localhost (7)scp /home/hadoop/.ssh/id_rsa.pub hadoop@Slave[1,2,3].Hadoop:~/
远程端:Hadoop用户操作
(8) cd && ll (9)mkdir /home/hadoop/.ssh (10)chmod 700 /home/hadoop/.ssh (11)ll /home/hadoop/.ssh (12)cat /home/hadoop/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys (13)chmod 600 /home/hadoop/.ssh/authorized_keys (14) rm -r /home/hadoop/id_rsa.pub
本地端验证:
(14) ssh Slave[1,2,3].Hadoop
5.配置所有Slave多Master的无密码登陆
su - root vi /etc/ssh/sshd_config su - hadoop ssh-keygen -t rsa cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys chmod 600 /home/hadoop/.ssh/authorized_keys ll /home/hadoop/.ssh/authorized_keys ssh localhost scp /home/hadoop/.ssh/id_rsa.pub [email protected]:~/ 去Master端: su - hadoop cat /home/hadoop/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys chmod 600 /home/hadoop/.ssh/authorized_keys 去Slave端: ssh Master.Hadoop 去Master端: rm -r /home/hadoop/id_rsa.pub
6.安装JDK和Hadoop
jdk6.tar.gz hadoop-1.2.1.tar.gz
6.1安装JAVA环境(root用户操作)
yum install glibc.i686 tar zxvf jdk6.tar.gz -C /usr/local/ chown -R root.root /usr/local/jdk6 vi /etc/profile.d/jdk.sh export JAVA_HOME=/usr/local/jdk6 export CALASS_PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_BIN=$JAVA_HOME/bin export PATH=$PATH:$JAVA_HOME/bin
6.2 安装Hadoop
(1)tar zxvf hadoop-1.2.1.tar.gz -C /usr/local/ mv hadoop-1.2.1 hadoop chown -R hadoop.hadoop /usr/local/hadoop (2)vi /etc/profile.d/hadoop.sh export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin (3)mkdir /usr/local/hadoop/tmp (4)配置hadoop vi /usr/local/hadoop/conf/hadoop-env.sh【在末尾添加】 #set java environment export JAVA_HOME=/usr/local/jdk6
(5)配置conf下的三个配置文件。Master修改5个文件,Slave修改3个文件。
cd /usr/local/hadoop/conf
Master: <sore-site.xml / hdfs-site.xml/ mapred-site.xml /masters /slaves >
Slave: <sore-site.xml / hdfs-site.xml/ mapred-site.xml >
cp sore-site.xml core-site.xml.bak
vi core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> <descriptions> A base for other temporary directories.</descriptions> </property> <!--file system properties--> <property> <name>fs.default.name</name> <value>hdfs://192.168.115.2:9000</value> </property> </configuration>
cp hdfs-site.xml hdfs-site.xml.bak
vi hdfs-site.xml
<configuration> <property> <name>dfs.replication</value> <value>1</value> </property> </configuration>
cp mapred-site.xml mapred-site.xml.bak
vi mapred-site.xml
<configuration> <property> <name>mapred.job.tracker</value> <value>http://192.168.115.2:9001</value> </property> </configuration>
vi masters 将localhost改为master的IP地址 192.168.115.2 vi slaves 将localhost改为slave的IP地址。有几个slave主机,就写几个IP地址。 192.168.115.3 192.168.115.4 192.168.115.5
6.3 启动并验证Hadoop
(1)在master上用hadoop用户操作,格式化系统,只需要格式化一次,下次启动就不需要了。 su - hadoop && hadoop namenode -format (2)启动hadoop,启动前先关闭集群中的iptables。 service iptables stop start-all.sh
终于成功了。期间三个配置文件一值报错。TMP文件的属主和属组是hadoop的。否则会报错。
export HADOOP_HOME_WARN_SUPPRESS=1
这个参数是防止Warning: $HADOOP_HOME is deprecated.这个警告出现的。
到最后JPS查看java进程,结果没有namenode进程,原因是第二次改了配置文件,没有进行系统格式化,所以一直报错。