Hadoop平台搭建方案
Hadoop平台搭建方案
一、Hadoop简介
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop 分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。
对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS 集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。
二、系统安装及日常维护须知
服务器型号:IBM X3850 X5
1.平时操作注意事项:
机器上安装的有CentOS_6.4_64位操作系统和Windows server 2000操作系统。
当重新启动时,想进入CentOS系统,需要先插上CentOS的U盘启动盘,然后F12选择从USB设备启动,系统就会自动进入CentOS系统。
若不插U盘启动盘,系统将会自动进入机器上原来的windows server 2000系统。不会像普通个人计算机那样出现操作系统选择的界面。
2.U盘启动盘制作方式:
由于此服务器不支持CentOS的系统引导,安装的时候不识别CentOS6.4_64位系统光盘。于是采用将系统镜像写入U盘,做成U盘启动盘,制作U盘时选择写入新的主硬盘引导记录(MBR)。这样,安装的时候插入U盘,选择从U盘启动,便可通过U盘引导进入CentOS系统的安装界面,之后也可以选择从U盘安装也可选择从光驱安装系统。
制作步骤:
用软碟通,先选定CentOS系统镜像,然后点菜单栏启动选项,点写入硬盘
映像,写入方式USB-HDD+,便捷启动选择写入新的主硬盘引导记录(MBR),USB-HDD+。写盘结束后进入U盘启动盘,进入EFI文件夹,删除 BOOTX64.efi 文件(重要,见注.)。至此,U盘启动盘制作OK。
注:之所以要删除 BOOTX64.efi文件,是因为CentOS_6.4操作系统对磁盘的管理采用GPT(GUID Partition Table,全局唯一标识分区表,缩写:GPT),它是一个实体硬盘的分区结构。它是EFI(可扩展固件接口标准)的一部分,用来替代BIOS中的主引导记录分区表。因为MBR分区表不支持容量大于2.2TB的分区,所以也有一些BIOS系统为了支持大容量硬盘而用GPT分区表取代MBR分区表。(MBR和GPT的详细区分参看链接https://www.360docs.net/doc/cd16034852.html,/446195/647702/ )
此系统便采用了GPT分区表,但我们服务器的磁盘还没有超过2.2TB,并且考虑到这台服务器上原先安装windows系统时已经采用MBR,并且不想删除该系统,所以仍要使用MBR,所以在制作U盘启动盘的时候把BOOTX64.efi文件删除,来拒绝使用GPT分区表。若不删除,安装过程中分区的时候会提示你采用GPT分区,这将会丢失磁盘上的原有内容。所以采取此措施。
三、平台支持及环境说明
1.平台环境
CentOS 6.4 Linux操作系统;
(平台硬件详细要求待考究...)
JAVA环境:JDK1.7.0_25;
SSH;
Hadoop-1.2.1;
2.集群说明
示例集群中包括3个节点:1个Master,3个Salve(默认是3个),节点之间局域网连接,可以相互ping通。
机器名称和对应的IP地址:
Master 192.168.1.212
Slave1 192.168.1.230
Slave2 192.168.1.233
Slave3 192.168.1.250
两个节点上均是CentOS系统,并且有一个相同的用户hadoop。Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。
四、配置过程
下面的例子我们将以Master机器为例,即主机名为"Master",IP为
"192.168.1.212"进行一些主机名配置的相关操作。其他的Slave机器以此为依据进行修改。
1.机器上都要装好CentOS系统。
没有特别说明都是在根用户权限下
2.修改主机名称:
vi /etc/sysconfig/network
更改HOSTNAME如下:HOSTNAME=Master
3.更改机器的IP:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
将IP_ADDR改为192.168.1.212
改完后用ifconfig查看(最好采用静态IP)
4.配置hosts文件:
"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN 内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。
vi /etc/hosts
填上机器的IP和对应的主机名称,填好后结果如下:
192.168.1.230 Slave1
192.168.1.233 Slave2
192.168.1.250 Slave3
5.添加用户和组,并修改权限:
addgroup hadoop
adduser -ingroup hadoop hadoop
打开权限配置文件,修改hadoop用户权限
vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
Hadoop ALL=(ALL:ALL) ALL
6.SSH无密码验证配置:
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。
用刚建立的Hadoop用户操作
1)Master机器上生成密码对
ssh-keygen -t rsa -P “”
生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
2)在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3)修改authorized_keys的权限
chmod 600 ~/.ssh/authorized_keys
4)设置SSH配置文件
用root用户
vi /etc/ssh/sshd_config
作如下修改:
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
5)重启SSH服务
service sshd restart
6)退出root登录,使用hadoop普通用户验证是否成功
ssh localhost
7)将Master的公钥拷贝到从节点
scp ~/.ssh/id_rsa.pub hadoop@192.168.1.230:~/
8)从节点Slave1按照前面步骤生产密钥对,并将公钥加到授权Key里面
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改authorized_keys的权限
chmod 600 ~/.ssh/authorized_keys
再把Master的公钥追加到授权Key里面
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
9)将Slave1的公钥复制到Master并将公钥加到授权Key里
scp ~/.ssh/id_rsa.pub hadoop@192.168.1.212:~/
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
10)用root权限修改从节点SSH配置文件/etc/ssh/sshd_config
删除id_rsa.pub。至此服务器和从节点间可以互相无密码访问了。
7.安装JDK:
所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以"root"的身份进行。
JDK下载地址:
https://www.360docs.net/doc/cd16034852.html,/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 1)在/usr下创建java文件夹:
mkdir /usr/java
2)将下载的JDK安装文件jdk-7u25-linux-i586.tar.gz拷贝到/usr/java下
3)安装jdk-7u25-linux-i586.tar.gz
tar -zxvf jdk-7u25-linux-i586.tar.gz -C /usr/java
4)删除jdk-7u25-linux-i586.tar.gz
5)修改环境变量
vi /etc/profile
添加:
# set java environment
export JAVA_HOME=/usr/java/jdk1.7.0_25
export JRE_HOME=/usr/java/jdk1.7.0_25/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
6)使配置生效
source /etc/profile
7)输入java -version 验证安装是否成功.
其他机器上JDK安装与此相同。
8.Hadoop集群安装
①给Master安装Hadoop
构成集群的所有机器上都要安装hadoop,现在先从Master服务器上安装。安装和配置hadoop需要以root权限进行。
1).首先用root身份登录,将下好的”hadoop-1.2.1.tar.gz”放在/usr目录下,然
后进行下列操作:
2).到“/usr/hadoop”下面创建tmp文件夹
mkdir /usr/hadoop/tmp
3).配置/etc/profile中的环境变量
vi /etc/profile
#set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
4).配置完后重启/etc/profile
source /etc/profile
5).对/usr目录下的文件夹tmp进行操作:
chown -R hadoop:hadoop tmp
否则会在使用hadoop命令时提示输入密码。
Hadoop配置文件在conf目录下,配置文件也被分为了三个core-site.xml;hdfs-site.xml;mapred-site.xml。
6).配置hadoop-env.sh
该文件位于/usr/hadoop/conf目录下
进入该目录后vi hadoop-env.sh
在该文件的末尾添加下面内容:
#set java environment
export JAVA_HOME=/usr/java/jdk1.7.0_25
7).配置core-site.xml文件
这里是配置HDFS的地址和端口号
vi core-site.xml
添加如下内容
若没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为/tmp/hadoop。而这个目录在每次重启时会被干掉,必须重新执行format才行,否则出错。
8).配置hdfs-site.xml文件
此时配置备份的分数,默认为3,salve少于3台就会报错
vi hdfs-site.xml
配置如下:
9).配置mapred-site.xml文件
此时配置的事JobTracker的地址和端口
vi mapred-site.xml
10).配置masters文件
vi masters
去掉localhost,加入Master机器的IP:192.168.1.212或者填Master
11).配置slaves文件(Master主机特有)
vi slaves
去掉localhost,加入集群中所有Slave机器的IP,每行一个。
192.168.1.230
192.168.1.233
192.168.1.250
或者填机器名
Slave1
Slave2
Slave3
②配置Slaves机器上的Hadoop
一种方式是按上面方式重复操作。
另外一种方式是将Master上配置好的hadoop所在的文件夹/usr/hadoop复制到所有的Slaves文件的/usr目录下。
scp -r /usr/hadoop root@192.168.1.230:/usr
登陆Slave1机器执行下面命令
为slave1.hadoop上的用户hadoop添加对/usr/hadoop的读权限chown -R hadoop:hadoop hadoop
接着在Slave1上修改/etc/profile文件(vi /etc/profile)并使其有效(source /etc/profile)
#set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
对/usr目录下的文件夹 tmp进行操作:
chown -R hadoop:hadoop tmp
否则会在使用hadoop命令时提示输入密码。
③启动及验证
1).格式化HDFS文件系统
只需一次,下次启动不再需要格式化
hadoop namenode -format
2).启动hadoop
再启动前关闭集群中所有的机器的防火墙
service iptables stop
使用下面的命令启动
start-all.sh
④验证hadoop
在Master上用java自带的小工具jps查看进程
在Slave1上用jps查看进程
网页查看集群,访问http://192.168.1.212:50030
(注.截图中应该为hadoop用户,而非root,下图中节点数是3,由于截的是另一个集群上的图,截图有所偏差,但不影响实际结果)
访问http://192.168.1.212:50070
五、W indows远程访问CentOS步骤
方法一:
使用PuTTy实现远程访问CentOS以及实现文件的上传下载
1.远程访问
下载PuTTy,地址:
https://www.360docs.net/doc/cd16034852.html,/~sgtatham/putty/download.html
打开后即可以使用不需要安装。
在此处输入服务器IP(192.168.1.212)地址点击Open打开,
输入用户名和密码即可登录CentOS实现各种操作。
2.本机与服务器上传与下载文件
下载PSFTP,地址:
https://www.360docs.net/doc/cd16034852.html,/~sgtatham/putty/download.html
同样打开后即可使用。
常用命令如下:
(1)open serviceIP 用于连接远程linux服务器,其中serviceIP替换为自己的服务器地址。
(2)cd /../ 用于切换远程Linux服务器上的目录,其中/../替换为您自己实际的路径。
(3)lcd D:/../ 用于切换本地的路径,其中D:/downloads/就是切换本地路
径的目的是为了上传这个目录里的文件或者将服务器上的文件下载到这个文件夹里,如果你要上传位于C盘Windows文件夹里的notepad.exe到服务器上,就得 lcd C:/windows/。
(4)put notepad.exe 上传notepad.exe到服务器上。
(5)get notepad.exe 下载notepad.exe到自己电脑商。
方法二:
使用secureCRT实现远程访问CentOS以及实现文件的上传下载。secureCRT需要收费,虽然界面和功能要比putty强大。但是还是推荐使用putty。
不足:
1.平台硬件需求还待调查;
2.Hadoop文件夹下的三个配置文件
(core-site.xml;hdfs-site.xml;mapred-site.xml)的设置还比较简单,待进一步学习完善配置。