Hadoop有三种安装模式,分别为单机模式、伪分布式模式和完全分布式模式(集群模式)。本文安装版本是hadoop-1.1.2,hadoop-2.x版本安装请参考:。
一、单机模式
单机模式是Hadoop的默认模式,单机模式只有一个节点,不使用HDFS,也不加载任何Hadoop的守护进程,该模式主要用户开发调试MapReduce应用程序逻辑。
二、伪分布式模式
伪分布式hadoop是一个只有一个节点的集群,这个节点既是mater,也是slave;既是NameNode,也是DataNode;既是JobTracker,也是TaskTracker。
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。
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、修改主机名
vi /etc/sysconfig/network,将HOSTNAME修改为hadoop然后保存退出。查看主机名命令为hostname,注意使用hostname hadoop命令只能将当前会话主机名修改为hadoop,重启后失效,因此建议修改配置文件。
3、绑定主机名和IP地址
vi /etc/hosts,增加一行:192.168.137.100 hadoop,前面为linux的ip地址,后面为主机名。
此处必须配置内网IP地址,特别是网络云主机。
4、关闭防火墙及防火墙的自动启动
hadoop集群很多地方需要使用linux的不同端口,为了方便学习,建议学习hadoop时将防火墙关闭。
service iptables stop,验证是否关闭命令:service iptables status。
chkconfig iptables off,验证命令:chkconfig --list | grep iptables。
5、配置SSH免密码登陆
ssh-keygen -t rsa,全部默认回车,会在当前用户所在目录下生成.ssh文件夹,地址:~/.ssh
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys或ssh-copy-id -i /root/.ssh/id_rsa.pub localhost
验证:ssh localhost
6、安装JDK
1) 利用文件上传工具WinSCP将JDK安装文件(本例jdk-6u27-linux-x64.bin)上传至虚拟机Linux路径/usr/local/目录下
chmod u+x jdk-6u27-linux-x64.bin,然后执行解压命令:./jdk-6u27-linux-x64.bin
mv jdk1.6.0_27 jdk
vi /etc/profile, 在空白处增加两行:export JAVA_HOME=/usr/local/jdk 和 export PATH=.:$JAVA_HOME/bin:$PATH
source /etc/profile
验证:java -version
7、安装hadoop
1) 利用文件上传工具WinSCP将hadoop安装文件(本例hadoop-1.1.2.tar.gz)上传至虚拟机Linux路径/usr/local/目录下
tar -zxvf hadoop-1.1.2.tar.gz
mv hadoop-1.1.2 hadoop
vi /etc/profile,在PATH行前空白处增加一行: export HADOOP_HOME=/usr/local/hadoop,并修改PATH为:
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH。
source /etc/profile
hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml,详细修改如下所示:
① hadoop-env.sh
export JAVA_HOME=/usr/local/jdk/
View Code
注意这里第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
注意这里第4行hadoop应该改成相应主机名,即linux操作系统名
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop:9001</value>
</property>
</configuration>
View Code
hadoop namenode -format
start-all.sh
验证:
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地址
vi /etc/hosts,并填入内容:
192.168.137.101 hadoop0
192.168.137.102 hadoop1
192.168.137.103 hadoop2
scp /etc/hosts root@hadoop1:/etc/,将hadoop1分别替换成对应的主机名
3、批量配置SSH免密码登陆
所有节点上执行命令:ssh-keygen -t rsa,全部默认回车,会在当前用户所在目录下生成.ssh文件夹,地址:~/.ssh
某个节点(假设主节点hadoop0)并执行命令:cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
其他节点分别将自己的公钥发送给hadoop0,分别执行命令:ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop0
分发给其他节点,在hadoop0上批量执行命令:scp /root/.ssh/authorized_keys root@hadoop1:/root/.ssh/,将hadoop1分别替换成对应的主机名,建议通过脚本自动执行。
通过公钥(或私钥)加密数据,只能通过对应的私钥(或公钥)来进行解密。假设客户端A想通过SSH免密码登陆到服务器B,A必须事先将自身的公钥A保存在B中,然后A会向B发送连接请求,同时发送公钥A。B接收到请求后,在本服务器上寻找A事先保存的公钥并与发送过来的公钥A进行比较。如果两个密钥一致,B就用公钥A加密“质询”信息并发送给A,A接收到加密后的“质询”信息并用私钥A进行解密,将解密后的“质询”再次发送给B,B通过接收到的“质询”与原“质询”比较,若相同,则建立与A的SSH连接。在整个连接建立过程中,不传输密码,安全性相当高。
4、批量安装jdk和hadoop
hadoop安装完毕后,检查并删除logs和tmp文件夹下的所有文件;
scp -r /usr/local/jdk root@hadoop1:/usr/local/和scp -r /usr/local/hadoop root@hadoop1:/usr/local/,将hadoop1分别替换成对应的主机名;
scp /etc/profile root@hadoop1:/etc/,将hadoop1分别替换成对应的主机名;
source /etc/profile,使环境变量配置文件立即生效;
5) 在主节点hadoop0中的配置文件hadoop/conf/slaves中配置从节点hadoop1和hadoop2,各占一行。配置文件hadoop/conf/masters用于指定SecondartNamenode的执行节点,根据实际需要进行配置。
hadoop namenode -format
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 datanode和hadoop-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