我有四台服务器分别是 hadoop1、hadoop2、hadoop3、hadoop4
hadoop1是namenode
hadoop2/3/4是DataNode
secondarynamenode也在hadoop2上
hadoop版本为:hadoop-1.2.1-bin.tar.gz
jdk版本为:jdk-7u71-linux-x64.tar.gz
1. 设置ip地址 修改网卡配置
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # 进入系统网卡设置DEVICE=eth0 #描述网卡对应的设备别名
#BOOTPROTO=dhcp #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态,通过dhcp协议获得的,通过bootp协议获得的ip地址
BOOTPROTO=static # 修改为静态的
IPADDR=192.168.0.50 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
NETMASK=255.255.255.0 #网卡对应的网络掩码
GATEWAY=192.168.0.1 #设置本机连接的网关的IP地址
DNS1=192.168.0.1 #DNS 至少配置一个
ONBOOT=yes #指明在系统启动时是否激活网卡
#HWADDR=00:0c:29:c7:09:67 #对应的网卡物理地址 若修改应为MACADDR= 只要不一样啊啊啊啊
MACADDR=00:0c:29:c7:09:69
2. 修改主机名(centos7.0不需要修改)磁盘上的主机名
vi /etc/sysconfig/network
NETWORKING=yes #表示系统是否使用网络,一般设置为yes。如果设为no,则不能使用网络,而且很多系统服务程序将无法启动
#NETWORKING_IPV6=no
HOSTNAME=hadoop1 #设置本机的主机名,修改的是保存在磁盘上的主机名称。这里设置的主机名要和/etc/hosts中设置的主机名对应
3、修改内存中的主机名
一般情况下 两则必须要一致,修改磁盘主机名时记得将运行的系统主机名修改成相同的名称。
hostname hadoop1 # 正在运行的系统主机名称做修改为 hadoop1,必须和磁盘上的一致
hostname # 查看当前系统的主机名
4、修改配置的IP映射值
vi /etc/hosts
192.168.0.50 hadoop1 # 强IP映射为一个名字hadoop1
192.168.0.51 hadoop2
192.168.0.52 hadoop3
192.168.0.53 hadoop4
5、修改DNS 配置 vi /etc/resolv.conf
nameserver 192.168.0.1 #nameserver 即是DNS服务viroot器IP地址,第一个是首选,第二个是备用
6、关闭防火墙
hadoop是一个分布式结构,主要通信都是从网络通讯。网络通信涉及到很多端口,有防火墙比较麻烦。为了省事永久关闭防火墙。
service iptables stop #关闭防火墙 临时关闭 下次开启还会自动开启 可以设置永久性关闭防火墙
service iptables status # 查看防火墙状态 是否关闭
# 主要关闭下面的,上面的关闭了,重启后会再次开启
chkconfig iptables off #永久性关闭防火墙
chkconfig --list | grep iptables # 将列出的的所有配置项 做一个过滤 将包含iptables的项显示到屏幕上
getenforce #查看美国国家安全局的内核增强
setenforce 0 #0是关闭
## 关闭它
vi /etc/sysconfig/selinux
SELINUX=disabled
8、修改时间 时间同步
1. date 查看当前时间 差距较大需要同步时间
2、设置时间和日期
将CentOS系统日期设定成1996年6月10日的命令
date -s 06/22/96 #修改日期
将CentOS系统时间设定成下午1点52分0秒的命令
date -s 13:52:00 #修改时间
3. 将当前时间和日期写入BIOS,避免重启后失效
hwclock -w
4.定时同步时间 这是时间服务器ntp
# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1
9、安装jdk
1、将jdk-7u71-linux-x64.tar.gz上传到 /usr 目录下
2、tar -xzvf hadoop-1.2.1-bin.tar.gz ## 解压到 当前目录下
3、vi /etc/profile ## 配置环境变量
export JAVA_HOME=/usr/awenhadoop/jdk1.7.0_71
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/usr/awenhadoop/hadoop-1.2.1 #这一步在安装hadoop后配置
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
4、安装完后执行source /etc/profile
10、安装hadoop
1、将hadoop-1.2.1-bin.tar.gz上传到 /usr 目录下
2、tar -xzvf /usr/hadoop-1.2.1 ## 解压到 /usr 目录下
3、vi /etc/profile ## 配置环境变量
export JAVA_HOME=/usr/java/jdk/jdk1.6.0_13
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_HOME=/usr/hadoop-1.2.1
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
4、安装完后执行source /etc/profile
5、vi hadoop-env.sh
#hadoop中的相关配置
export JAVA_HOME=/usr/jdk1.7.0_71 # 配置环境变量export HADOOP_HOME_WARN_SUPPRESS=1 # Warning: $HADOOP_HOME is deprecated. 的解决
11、
1、core-site.xml # 这里面配置的是namenode
cd hadoop-1.2/conf
vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.50:9000</value> ##设置namenode
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop-1.2</value> ## 设置namenode的工作目录,不设置默认工作目录在/tmp 目录下,下次启动会被清空
</property> ##hadoop.tmp.dir /tmp/hadoop-${user.name}
</configuration>
dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name
namenode的工作目录 在tmp下再建立 ../dfs/name 的工作目录
其中fs.default.name为namenode的交互端口,注意不要使用已经占用的端口就好
hadoop.tmp.dir是用来存储其他临时目录的根目录 4.3.3在hdfs-site.xml文件中添加配置信息
2、hdfs-site.xml
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hdfs/data</value>
</property>
</configuration>
dfs.name.dir:存贮在本地的名字节点数据镜象的目录,作为名字节点的冗余备份
dfs.data.dir:datanode存储数据的根目录
dfs.replication:冗余数量,备份的数据量位2,默认为3,不能大于DataNode数目
dfs.http.address:namenode的http协议访问地址与端口 4.3.4在mapred-site.xml文件中添加配置信息
dfs.replication 3 # 默认副本数为3,原则上副本数要小于等于DataNode的节点数
3、mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop1:9002</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/hadoop/mapred/local</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/home/hadoop/mapred/system</value>
</property>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
mapred.job.tracker:jobTracker的交互端口
mapred.local.dir: map中间数据存放位置
mapred.system.dir: mapred控制文件存放位置
mapred.compress.map.output: 是否压缩输出 4.3.5在master文件中写入hadoop namenode节点
4、 设置DataNode
vi slaves # 这里面配置的是DataNode
hadoop2 # 映射的主机IP
hadoop3
5、设置secondaryNameNode
vi masters # 这里面配置的是secondaryNamenode
hadoop2
在hadoop2上继续设置secondnamenode,只要和namenode不在同一台机器上,那个机器都可以
一台机器两个节点可以。伪分布式一台机器3各节点。
####################################################################################
我的思路是先将hadoop1这台搭好、然后复制3次,作为hadoop2/3/4的虚拟机。修改对应的IP、主机名,记得和内存中主机名一致或reboot、MACADDR地址值。
ssh互信:
1、每台机器上都执行 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa # 生成认证公钥密钥
2、每一个DataNode都将生成的公钥scp给namenode
scp ~/.ssh/id_rsa.pub root@hadoop1:~/.ssh/hadoop2_id_rsa.pub # 发送公钥给别的机器
。。。
3、namenode将DataNode发送过来的公钥追加到 anthorized_keys 中,自己的也记得追加
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
4、分别将认证keys scp给每一台DataNode
scp ~/.ssh/authorized_keys root@hadoop2:~/.ssh/authorized_keys