Hadoop三种运行方式:单节点方式(单台)、单机伪分布方式(一个节点的集群)与完全分布式(多台组成集群)
下面以hadoop完全分布式为例,
Hadoop 集群的安装配置大致为如下流程:
假设需要搭建1 Master,1 Slave
1.网络配置
2.安装JDK
3.创建专门用户hadoop,配置ssh免登录
4.Master安装hadoop文件,修改配置文件,拷贝到其他Slave机器上
5.启动haoop
具体过程
1.网络配置
root身份
(1)先将虚拟机的网络模式选为NAT, VirturalBox 中为桥接模式,MAC地址保证不同
(2)修改主机名
在 Ubuntu/CentOS 7 中修改/etc/hostname
CentOS 6.x 系统,则是修改 /etc/sysconfig/network 文件,改为 HOSTNAME=Master
对应的另外一台机器,相应的改为HOSTNAME=Slave1
(3)修改IP
/etc/sysconfig/network-scripts/ifcfg-eth0,
Master 为IPADDR="192.168.1.101"
Slave1为IPADDR="192.168.1.102"
(4)关闭防火墙
service iptables stop
chkconfig iptables off
(5)重启linux
reboot
2.安装JDK
root 身份
(1)解压jdk
#创建文件夹
mkdir /home/hadoop/app
#解压
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app
(2)将java添加到环境变量中
vim /etc/profile
#在文件最后添加
export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
export PATH=$PATH:$JAVA_HOME/bin
#刷新配置
source /etc/profile
3.创建专门用户hadoop,配置ssh免登录
root 身份
useradd hadoop (创建用户)
passwd hadoop (设置密码,为简单起见,3台机器上的hadoop密码最好设置成一样,比如hadoop123)
为了方便,建议将hadoop加入root用户组,操作方法:
先以root身份登录,然后输入
usermod -g root hadoop ,执行完后hadoop即归属于root组了,可以再输入
id hadoop 查看输出验证一下,如果看到类似下面的输出:
uid=502(hadoop) gid=0(root) 组=0(root)
就表示OK了
配置ssh免登录
先在master上,生成公钥、私钥对
以hadoop身份登录到系统
cd (进入个人主目录,默认为/home/hadoop)
ssh-keygen -t rsa -P '' (注:最后是二个单引号)
即:以rsa算法,生成公钥、私钥对,-P ''表示空密码。该命令运行完后,会在个人主目录下生成.ssh目录,里面会有二个文件id_rsa(私钥) ,id_rsa.pub(公钥)
导入公钥
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
执行完以后,可以在本机上测试下,用ssh连接自己,即:ssh localhost (或ssh master),如果不幸还是提示要输入密码,说明还没起作用,还有一个关键的操作
chmod 600 .ssh/authorized_keys (修改文件权限,否则不起作用)
然后再测试下 ssh localhost ,如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。
在其它机器上生成公钥、密钥,并将公钥文件复制到master
a) 以hadoop身份登录其它机器 Slave1执行 ssh-keygen -t rsa -P '' 生成公钥、密钥
b) 然后用scp命令,把公钥文件发放给Master(即:刚才已经搞定的那台机器)
slave1上:
scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_01.pub
这二行执行完后,回到master中,查看下/home/hadoop目录,应该有二个新文件id_rsa_01.pub、id_rsa_02.pub,然后在master上,导入这二个公钥
cat id_rsa_01.pub >> .ssh/authorized_keys
这样,master这台机器上,就有所有3台机器的公钥了。
将master上的“最全”公钥,复制到其它机器
a) 继续保持在master上,
scp .ssh/authorized_keys hadoop@Slave1:/home/hadoop/.ssh/authorized_keys
b) 修改其它机器上authorized_keys文件的权限
slave1机器上,均执行命令
chmod 600 .ssh/authorized_keys
验证
在每个虚拟机上,均用 ssh 其它机器的hostname 验证下,如果能正常无密码连接成功,表示ok
4.Master安装hadoop文件,修改配置文件,拷贝到其他Slave机器上
(1)先上传hadoop的安装包到服务器上去/home/hadoop/
注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop
(2)需要修改8个配置文件
etc/hadoop/hadoop-env.sh,etc/hadoop/yarn-env.sh,core-site.xml,core-site.xml,hdfs-site.xml,mapred-site.xml ,yarn-site.xml,slaves
vi etc/hadoop/hadoop-env.sh (及 vi etc/hadoop/yarn-env.sh)
export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
core-site.xml
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.6/tmp</value>
</property>
hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>192.168.1.101:50090</value>
</property>
mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
slaves (伪分布式可以不用配置)
添加Slave1
5.启动hadoop
(1)将hadoop添加到环境变量
vi /etc/proflie
export HADOOP_HOME=/home/hadoop/hadoop-2.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
(2)格式化namenode(是对namenode进行初始化)
hdfs namenode -format (hadoop namenode -format)
(3)启动hadoop
先启动HDFS
sbin/start-dfs.sh
再启动YARN
sbin/start-yarn.sh
(4)验证是否成功
http://192.168.1.101:50070 (HDFS管理界面)
http://192.168.1.101:8088 (MR管理界面)
使用jps命令验证
NameNode
SecondaryNameNode
NodeManager
ResourceManager
DataNode