Hadoop部署方式
- 本地模式
- 伪分布模式(在一台机器中模拟,让所有进程在一台机器上运行)
- 集群模式
服务器只是一堆废铁而已,上面跑了tomcat,我们叫它web服务器;上面跑了mysql,我们叫它数据库服务器。所以不同服务器只是上面跑的进程(或者说程序)不同,我们是根据它们跑的进程来命名它们分别叫什么服务器的。
宿主机(windows)和客户机(linux)之间通信
- host-only:宿主机与客户机单独组网
- 好处:网络隔离
- 坏处:虚拟机和其他服务器之间不能通信
- bridge:客户机与宿主机在同一个局域网
- 好处:都在同一个局域网,可以互相访问
- 坏处:不安全
Linux网络设置
修改主机名:/etc/sysconfig/network
将主机名和IP绑定:/etc/hosts
修改ip地址:/etc/sysconfig/network-scripts/ifcfg-eth0
关闭防火墙:service iptables stop chkconfig iptables off
防火墙是禁止一些端口启动的,而hadoop运行需要占用很多端口,因此要关闭防火墙
Hadoop伪分布式/完全分布式安装步骤
此安装步骤适用于Hadoop 0.x 和 Hadoop 1.x 版本。
Hadoop 2.x 很复杂,建议参考官网的教程,下面的不适用于版本2.x。
两种分布式模式
分布式模式分两种,伪分布式和完全分布式。
- 伪分布式是把进程运行在同一台机器上,但不是一个JVM
- 而完全分布式就是把整个服务分布在各个节点上
伪分布式
- 设置静态ip
- 修改主机名
- 修改当前会话的主机名:
hostname XXX
- 修改配置文件中的主机名:
vi /etc/hosts
- 修改当前会话的主机名:
- 把hostname和ip绑定
vi /etc/hosts
- 增加一行:
192.168.xx.yyy yourhostname
关闭防火墙
不论是伪分布安装,还是真实的分布式安装,如果不关闭防火墙,会遇到例如如下这种情况:执行
./start-dfs.sh
后,提示说都启动了,也将启动写进日志了,可是去其他机器上执行jps
发现并没有启动对应的Java进程。原因就是防火墙没有关闭。- service iptables stop
验证:
service iptables status
- service iptables stop
- 防止防火墙再次启动:
chkconfig iptables off
验证:chkconfig --list | grep iptables
SSH(secure shell)的免密码登陆
原理如图:
Q:为什么要设置免密码登录?
A:因为分布式应用程序,每台机器都有不同的进程,而整个分布式应用程序要想能起起来,需要各个机器上的进程都起起来并且还需要它们之间的配合。而每台机器上都有不同的进程需要启动,我们想做到在一台机器上能启动整个分布式应用,就需要达到在一台机器上能启动其他机器上的进程的目的。这个时候就需要免密码登录。
例如在node1上敲例如
start-all.sh
等命令,它为什么能启动整个分布式应用呢?是因为node1远程登录到了其他节点,启动了其他节点的进程,从而达到启动整个分布式应用的目的。其实不配置免密码登录,HDFS一样能启动起来,免密码只是为了运维方便,如果不设置,每次手动去敲会很麻烦。
ssh-keygen -t rsa
:产生密钥,位于~/.ssh
文件夹中cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
验证:
ssh localhost
然后两次exit
宿主机上安装WinSCP(远程传输数据)
rm -rf /usr/local/*
:这些东西用不到,我觉得可以全部删掉- 将JDK和hadoop拷贝到客户机
- 安装JDK
- 安装、配置hadoop
tar -zxvf hadoop-x.y.z.tar.gz
mv hadoop-x.y.z hadoop
配置hadoop、JDK
vi /etc/profile
,加下面几行export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP\_HOME/bin:$JAVA\_HOME/bin:$PATH
source /etc/profile
验证
java -version
修改
$HADOOP\_HOME/conf
下的4个配置文件(在WinSCP上面修改)hadoop-env.sh
:修改该文件中被#注释掉的JAVA_HOME
改成
export JAVA_HOME=/usr/local/jdk/
core-site.xml:(配置NameNode进程)
<configuration> <property> <name>fs.default.name</name> <value>hdfs://hadoop0:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> <description>HDFS的工作目录</description> </property> &l