代码改变世界

Hadoop学习(3)-- 安装1.x版本

2014-10-10 18:08  hduhans  阅读(585)  评论(0编辑  收藏  举报

  Hadoop有三种安装模式,分别为单机模式、伪分布式模式和完全分布式模式(集群模式)。本文安装版本是hadoop-1.1.2,hadoop-2.x版本安装请参考:http://www.cnblogs.com/hanganglin/articles/4254931.html

一、单机模式

   单机模式是Hadoop的默认模式,单机模式只有一个节点,不使用HDFS,也不加载任何Hadoop的守护进程,该模式主要用户开发调试MapReduce应用程序逻辑。

二、伪分布式模式

   伪分布式hadoop是一个只有一个节点的集群,这个节点既是mater,也是slave;既是NameNode,也是DataNode;既是JobTracker,也是TaskTracker。

   本实例配置环境:① 宿主机win7;② vmware虚拟机:CentOS;③ vmware网络连接方式:host-only;④hadoop版本:1.1.2。

1、 设置静态IP地址

   1) 设置宿主机本地网络共享:宿主机->本地连接->右键->属性->共享,将“允许其他网络用户通过此计算机的 Internet 连接来连接”前的复选框打钩,并选择家庭网络连接为“VMware Network Adapter VMnet1”(host-only连接方式使用此网卡),点击确定,VMware Network Adapter VMnet1网络IP地址会自动修改为192.168.xx.1(本实例192.168.137.1),子网掩码为255.255.255.0。

   2) 修改虚拟机linux的IP地址配置:执行命令vi /etc/sysconfig/network-scripts/ifcfg-eth0,修改网卡ip地址获得方式BOOTPROTO、IP地址IPADDR、网卡对应网络地址NETWORK,本实例修改如下所示:

DEVICE=eth0  #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static  #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
IPADDR=192.168.137.100  #如果设置网卡获得ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
NETMASK=255.255.255.0  #网卡对应的网络掩码
NETWORK=192.168.137.1  #网卡对应的网络地址
GATEWAY=192.168.137.1  #网关地址
ONBOOT=yes  #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备
HWADDR=00:0c:29:c8:36:68  #对应的网卡物理地址
TYPE=Ethernet
#DNS1=8.8.8.8  #根据需要配置DNS 这两个为谷歌提供的免费全球DNS
#DNS2=8.8.4.4
View Code

   3) 重新启动网络配置:执行命令service network restart

   4) 验证静态IP配置是否成功:① 执行命令ifconfig;② 在虚拟机linux中ping VMnet1网卡地址,如命令:ping 192.168.137.1;③ 在宿主机中ping虚拟机IP地址,如命令:ping 192.168.137.100。

2、修改主机名

   默认主机名为localhost.localdomain,为了测试方便,本实例将主机名修改为hadoop,执行命令:vi /etc/sysconfig/network,将HOSTNAME修改为hadoop然后保存退出。查看主机名命令为hostname,注意使用hostname hadoop命令只能将当前会话主机名修改为hadoop,重启后失效,因此建议修改配置文件。

3、绑定主机名和IP地址

   修改主机名后,执行命令:ping hadoop,系统会提示找不到主机,为了方便之后的配置可直接使用主机名代替ip地址,我们需要将主机hadoop和对应ip地址进行绑定,执行命令:vi /etc/hosts,增加一行:192.168.137.100  hadoop,前面为linux的ip地址,后面为主机名。

   注意:此处必须配置内网IP地址,特别是网络云主机

4、关闭防火墙及防火墙的自动启动

   hadoop集群很多地方需要使用linux的不同端口,为了方便学习,建议学习hadoop时将防火墙关闭。

   1) 关闭当前防火墙进程命令:service iptables stop,验证是否关闭命令:service iptables status。

   2) 查看防火墙是否自动重启,执行命令:chkconfig --list | grep iptables,若存在一个on状态,则防火墙会在下次系统启动时启动,我们需要关闭自动启动,执行命令:chkconfig iptables off,验证命令:chkconfig --list | grep iptables。

5、配置SSH免密码登陆

   1) 生成ssh公钥,执行命令:ssh-keygen -t rsa,全部默认回车,会在当前用户所在目录下生成.ssh文件夹,地址:~/.ssh

   2) 将生成的公钥放至公钥存放处authorized_keys(SSH会自动读取文件authorized_keys),执行命令:cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keysssh-copy-id -i /root/.ssh/id_rsa.pub localhost

   验证:ssh localhost   

6、安装JDK

   1) 利用文件上传工具WinSCP将JDK安装文件(本例jdk-6u27-linux-x64.bin)上传至虚拟机Linux路径/usr/local/目录下

   2) 授予bin文件执行权限,执行命令:chmod u+x jdk-6u27-linux-x64.bin,然后执行解压命令:./jdk-6u27-linux-x64.bin

   3) 重命名解压后文件夹,执行命令:mv jdk1.6.0_27 jdk   

   4) 配置jdk环境变量,命令:vi /etc/profile, 在空白处增加两行:export JAVA_HOME=/usr/local/jdk  和 export PATH=.:$JAVA_HOME/bin:$PATH

   5) 使配置文件立即生效,命令:source /etc/profile

   验证:java -version 

7、安装hadoop

   1) 利用文件上传工具WinSCP将hadoop安装文件(本例hadoop-1.1.2.tar.gz)上传至虚拟机Linux路径/usr/local/目录下

   2) 解压缩hadoop压缩包,执行命令:tar -zxvf hadoop-1.1.2.tar.gz

   3) 重命名文件夹名称,命令:mv hadoop-1.1.2 hadoop 

   4) 修改环境变量,执行命令:vi /etc/profile在PATH行前空白处增加一行: export HADOOP_HOME=/usr/local/hadoop,并修改PATH为:

export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH。

   5) 使配置文件立即生效,命令:source /etc/profile

   6) 修改hadoop的4个配置文件,位于$HADOOP_HOME/conf目录下,分别是hadoop-env.shcore-site.xmlhdfs-site.xmlmapred-site.xml,详细修改如下所示: 

   ① hadoop-env.sh 

export JAVA_HOME=/usr/local/jdk/  
View Code

   ② core-site.xml,注意这里第4行hadoop应改成相应主机名,即linux操作系统名

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://hadoop:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>
</configuration>
View Code

   ③ hdfs-site.xml,注意dfs.replication为副本数,默认为3,这里配置成1 

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>
View Code

   ④ mapred-site/xml,同core-xite.xml,注意这里第4行hadoop应该改成相应主机名,即linux操作系统名

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>hadoop:9001</value>
    </property>
</configuration>
View Code

   7) 对hadoop进行格式化,执行命令:hadoop namenode -format

   8) 启动hadoop,执行命令:start-all.sh

   验证

   ① 执行JDK提供查看进程的命令:JPS,查看进程DataNode、SecondaryNameNode、NameNode、JobTracker和TaskTracker是否启动;

   ② 在虚拟机Linux的浏览器中输入:a、http://hadoop:50070,查看NameNode是否启动正常;b、http://hadoop:50030,查看MapReduce是否启动正常;

   ③ 在宿主机浏览器中验证,输入http://192.168.137.100:50070或者http://hadoop:50070(修改主机C:\Windows\System32\drivers\etc\hosts文件,增加配置192.168.137.100 hadoop);

   常见错误解决办法

   问题一:多次格式化hadoop导致报错,如何解决?

   解决:删除/usr/local/hadoop/tmp文件夹,并重新格式化

   问题二:启动hadoop报警告Waring:$HADOOP_HOME is deprecated.,如何解决?

   解决:vi /etc/profile ,添加一行 export HADOOP_HOME_WARN_SUPPRESS=1,并重启配置:source /etc/profile

三、完全分布模式(集群模式)

   我们在实际中使用hadoop,都是使用完全分布模式,该模式可以发挥集群的优势,真正体现hadoop强大的魅力。

   在本集群实例中,主节点为一台,运行NameNode、JobTracker和SecondaryNameNode,从节点为两台,分别运行DataNode和TaskTracker,主机名和IP分别如下:①主节点-hadoop0,IP地址192.168.137.101;②从节点1-hadoop1,IP地址192.168.137.102;③从节点2-hadoop2,IP地址192.168.137.103。

1、基本环境配置

   所有节点都需要配置基本环境,包括设置静态IP地址修改主机名关闭防火墙及防火墙的自动启动,详细可参考伪分布模式对应安装步骤。

2、批量绑定主机名与IP地址

   1) 绑定配置所有节点的主机名和IP地址,选择某个节点并执行命令:vi /etc/hosts,并填入内容:

192.168.137.101     hadoop0
192.168.137.102     hadoop1
192.168.137.103     hadoop2

   2) 将该节点的配置文件/etc/hosts分发给其他节点,在该节点上批量执行命令:scp /etc/hosts root@hadoop1:/etc/,将hadoop1分别替换成对应的主机名

3、批量配置SSH免密码登陆

   1) 生成ssh密钥,在所有节点上执行命令:ssh-keygen -t rsa,全部默认回车,会在当前用户所在目录下生成.ssh文件夹,地址:~/.ssh

   2) 将生成的公钥存放至文件authorized_keys中,选择某个节点(假设主节点hadoop0)并执行命令:cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

   3) 其他节点分别将自己的公钥发送给hadoop0,分别执行命令:ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop0

   4) 主节点hadoop0将包含所有节点公钥信息的文件authorized_keys分发给其他节点,在hadoop0上批量执行命令:scp /root/.ssh/authorized_keys root@hadoop1:/root/.ssh/,将hadoop1分别替换成对应的主机名,建议通过脚本自动执行

   SSH免密码登陆是hadoop集群配置中很关键的一个步骤,节点进程之间的沟通都通过SSH协议进行,必须配置免密码登陆。SSH是基于非对称安全加密的策略,每个节点都有一对公钥和私钥,通过公钥(或私钥)加密数据,只能通过对应的私钥(或公钥)来进行解密。假设客户端A想通过SSH免密码登陆到服务器B,A必须事先将自身的公钥A保存在B中,然后A会向B发送连接请求,同时发送公钥A。B接收到请求后,在本服务器上寻找A事先保存的公钥并与发送过来的公钥A进行比较。如果两个密钥一致,B就用公钥A加密“质询”信息并发送给A,A接收到加密后的“质询”信息并用私钥A进行解密,将解密后的“质询”再次发送给B,B通过接收到的“质询”与原“质询”比较,若相同,则建立与A的SSH连接。在整个连接建立过程中,不传输密码,安全性相当高。

4、批量安装jdk和hadoop

   1) 在主节点hadoop0上安装jdk和hadoop,详细安装步骤见伪分布式对应操作步骤。hadoop安装完毕后,检查并删除logs和tmp文件夹下的所有文件

   2) 将hadoop0中的jdk和hadoop文件夹分别复制到其他从节点,在hadoop0节点上批量执行命令:scp -r /usr/local/jdk root@hadoop1:/usr/local/scp -r /usr/local/hadoop root@hadoop1:/usr/local/,将hadoop1分别替换成对应的主机名;

   3) 将hadoop0中的环境变量配置文件复制到其他从节点,在hadoop0中批量执行命令:scp /etc/profile root@hadoop1:/etc/,将hadoop1分别替换成对应的主机名;

   4) 所有从节点分别执行命令:source /etc/profile,使环境变量配置文件立即生效;

   5) 在主节点hadoop0中的配置文件hadoop/conf/slaves中配置从节点hadoop1和hadoop2,各占一行。配置文件hadoop/conf/masters用于指定SecondartNamenode的执行节点,根据实际需要进行配置。

   6) 主节点hadoop0格式化,执行命令:hadoop namenode -format

   7) 主节点hadoop0启动hadoop集群,执行命令:start-all.sh,会分别启动hadoop0的namenode、secondarynamenode、jobtracker进程,和hadoop1、hadoop2上的datanode、tasktracker进程

   注意事项

   ① 对于配置文件core-site.xml和mapred-site.xml在所有节点中都是相同的内容;

   ② 集群批量配置命令,建议通过shell等脚本自动执行;

   ③ 单独指定namenode与jobtracker,可以分别在core-site.xml和mapred-site.xml中指定节点,然后到节点中分别启动对应的进程;

   常见错误解决办法

   问题一:启动hadoop集群后,某些从节点的DataNode进程无法启动?

   解决:删除从节点hadoop.tmp.dir指定的路径(通常为/hadoop/tmp),然后主节点重新启动。

四、完全分布模式添加新节点

1、配置新节点的环境,参考完全分布模式的基本环境配置步骤;

2、主节点配置文件/etc/hosts添加新节点的主机和IP配置,并将该配置文件通过scp命令重新分发给所有的从节点;

3、在新节点中通过ssh-keygen命令生成ssh密钥,并通过ssh-copy-id命令将公钥发送至主节点。然后在主节点中,通过scp命令将authorized_keys文件分发给所有的从节点;

4、在主节点中,通过scp命令将jdk、hadoop和/etc/profile配置文件拷贝到所有新节点,然后分别在新节点中删除hadoop目录下的logs和tmp文件夹内容

5、在主节点中的配置文件hadoop/conf/slaves中添加新节点的hostname;

6、新节点单独启动datanode和tasktracker进程,执行命令:hadoop-daemon.sh start datanodehadoop-daemon.sh start tasktracker

7、主节点刷新从节点信息,执行命令:hadoop dfsadmin -refreshNodes

8、均衡整个集群的block存储,在新节点上执行(如果增加多个节点,只需在其中一个新节点执行即可)命令:./start-balancer.sh

验证:通过http://hadoop0:50070查看从节点数是否增加。

五、集群安全模式介绍

   在分布式文件系统启动的时候,会进入安全模式,在该模式下,HDFS中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。安全模式启动后会在一定时间内自动退出,可通过http://hadoop0:50070查看当前分布式系统是否处于安全模式和安全模式退出还需要多少时间,当然也可以通过命令强制退出安全模式。

   查看是否启动安全模式:hadoop dfsadmin -safemode get

   使系统进入安全模式:hadoop dfsadmin -safemode enter

   使系统退出安全模式:hadoop dfsadmin -safemode leave