一、设置IP地址、网关、DNS
nat地址:
约定:
第一块网卡为外网
第二块网卡为内网(没有外网的机器也要将内网配置在第二块网卡上)
说明:CentOS 6.6默认安装好之后是没有自动开启网络连接的!
输入账号root
再输入安装过程中设置的密码,登录到系统
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #编辑配置文件,添加修改以下内容
BOOTPROTO=static #启用静态IP地址
ONBOOT=yes #开启自动启用网络连接
IPADDR=192.168.60.41 #设置IP地址
NETMASK=255.255.255.0 #设置子网掩码
GATEWAY=192.168.60.2 #设置网关
DNS1=8.8.8.8 #设置主DNS
DNS2=8.8.4.4 #设置备DNS
IPV6INIT=no #禁止IPV6
:wq! #保存退出 :q! #不保存退出
service ip6tables stop #停止IPV6服务
chkconfig ip6tables off #禁止IPV6开机启动
service yum-updatesd stop #关闭系统自动更新
chkconfig yum-updatesd off #禁止开启启动
service network restart #重启网络连接
ifconfig #查看IP地址
以下可省略:
service iptables stop #关闭linux防火墙
chkconfig iptables off
service sshd start #启动ssh服务
二、设置主机名
约定:
主机名命名规范:业务.机房.主备.域名
这里设置主机名为:b01
1、hostname “b01”
设置主机名为b01
2、vi /etc/sysconfig/network #编辑配置文件
HOSTNAME= b01
修改localhost.localdomain为b01
:wq! #保存退出
shutdown -r now #重启系统
系统环境
1、创建用户
安装、运维及监控皆需使用hadoop用户。
root用户下执行如下命令进行添加hadoop用户。
useradd hadoop
passwd hadoop (输入两遍密码)
开发用户可选用其他新建用户
2、配置SSH互信
配置目的
配置集群内SSH互信并不是hadoop集群搭建中必须的,但是配置互信的主要作用是为集群统一管理和监控带来极大的便利。我们修改配置文件很多时候是对集群内所有服务器进行修改,有了SSH互信对于配置文件的传输非常便利,同时监控服务,统一启停集群也非常方便。
SSH服务简介
root用户的互信在维护监控时可有可无,hadoop用户的互信最好配置上。
1. ssh-keygen 创建公钥(Public Key)和密钥(Private Key)。
2. ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限
3. 我们使用client端去登陆server端免密码输入。
Client 必须制作 Public & Private 这两把 keys,且 Private Key需放到~/.ssh/ 内;
Server 必须要有 Public Key ,且放置到用户家目录下的~/.ssh/authorized_keys,同时目录的权限 (.ssh/) 必须是 700 而目录文件则必须为 600 ,同时文件的拥有者与群组都必须与该账号吻合才行。
进行免密码验证配置之前,要保证机器可以正常通信。
1、首先在MASTER机器配置
进去.ssh文件夹: [hadoop@b01 ~]$ cd~/.ssh/
生成秘钥 ssh-keygen : ssh-keygen -t rsa ,一路狂按回车键就可以了
最终生成(id_rsa,id_rsa.pub两个文件)
生成authorized_keys文件:
cat id_rsa.pub >> authorized_keys
2、在另两台SLAVE机器也生成公钥和秘钥
步骤跟MASTER是类似的
进去.ssh文件: [hadoop@b01 ~]$ cd~/.ssh/
生成秘钥 ssh-keygen :ssh-keygen -t rsa ,一路狂按回车键就可以了
最终生成(id_rsa,id_rsa.pub两个文件)
3、将两台SLAVE机器的id_rsa.pub文件copy到MASTER机器:
scp id_rsa.pub hadoop@b01:~/.ssh/id_rsa.pub_sl1
scp id_rsa.pub hadoop@b01:~/.ssh/id_rsa.pub_sl2
4、切换到机器MASTER合并authorized_keys;
cat id_rsa.pub_sl1>> authorized_keys
cat id_rsa.pub_sl2 >>authorized_keys
5、将authorized_keyscopy到两台SLAVE机器(/home/spark/.ssh):
scp authorized_keys hadoop@b2:~/.ssh/
scp authorized_keys hadoop@b3:~/.ssh/
6、更改文件夹权限
现在将Master机器和两台slave机器.ssh/文件夹权限改为700,authorized_keys文件权限改为600(or 644)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
7、完成以上操作后可以开始ssh验证了
3、Selinux
由于Selinux是基于角色的访问控制策略设置,由于设置非常繁琐。所以如无必要关闭Selinux即可
root用户下进行操作。
1.显示Selinux状态命令:getenforce或者sestatus命令。
Selinux有「disabled」「permissive」,「enforcing」3种选择。
Disabled不设置控制访问权限的策略。
Permissive为Selinux有效,但是即使你违反了策略的话也能继续操作,但是把违反内容记录下来。
Enforcing就是违反了策略,就无法继续操作下去。
2.设置Selinux。执行如下命令可实时将Selinux修改为permissive状态。
setenforce 0
3.修改配置文件将默认状态修改为disabled。
修改/etc/selinux/config
SELINUX=disabled
4、时间同步服务
root用户下进行操作。
配置目的
hadoop集群间节点时间不宜超过30秒,否则在运行任务时可能出现异常。
如果使用hbase数据库那么对于时间同步的要求非常严格。
为此我们使用NTP服务来进行集群件服务器的时间同步:选取其中一台服务器为ntp服务端,其他服务器作为NTP客户端来同步此服务器的时间。
配置文件
需要修改配置文件/etc/sysconfig/ntpd与/etc/ntp.conf。
1./etc/sysconfig/ntpd
添加SYNC_HWCLOCK=yes设置NTP服务自动同步硬件时间
2./etc/ntp.conf
需要关注的是两个关键词,server与restrict.
利用restrict 来管理权限控制,控制其他客户端来进行访问。格式如下:
restrict [IP] mask [netmask_IP] [parameter]
Parameter 的参数主要如下:
ignore :拒绝所有类型的NTP联机。
nomodify: 客户端不能使用ntpc 与ntpq 这两个程序来修改服务器的时间参数,但客户端可透过这部主机来进行网络校时;
noquery:客户端不能够使用ntpc 与ntpq 等指令来查询时间服务器,不提供NTP的网络校时。
notrap:不提供trap 这个运程事件登入的功能。
notrust:拒绝没有认证的客户端。
Kod:kod技术可以阻止“Kiss of Death “包对服务器的破坏。
Nopeer:不与其他同一层的NTP服务器进行时间同步。
利用server 设定上层NTP服务器,作为客户端访问其他服务端。格式如下:
server [IP or hostname] [prefer]
perfer:表示优先级最高
burst:当一个运程NTP服务器可用时,向它发送一系列的并发包进行检测。
iburst:当一个运程NTP服务器不可用时,向它发送一系列的并发包进行检测。
NTP服务端设置访问权限:在/etc/ntp.conf
restrict 127.0.0.1
restrict ::1
设定ip地址权限
restrict 192.168.60.0 mask 255.255.255.255 nomodify
#设定区域网内的访问权限,选择网段设置
restrict 192.168.60.0 mask 255.255.255.0 nomodify
#最上层服务器必须跟自己进行校对否则客户端不能进行同步
server 127.127.1.0
NTP客户端设置访问权限:在/etc/ntp.conf
server 192.168.60.41 perfer
全部服务器启动NTP服务,每次修改配置文件也需要重启NTP服务,注:默认情况15分钟后才会与上层NTP服务器进行时间校对。也可能更长。
启动:service ntpd start
关闭:service ntpd stop
重启:service ntpd restart
设置开机启动:chkconfig ntpd on
服务端查看状态:ntpq –p或者ntpstat
b01
b2
5、修改最大进程数和句柄数
root用户下进行操作。
由于默认用户的最大进程数和句柄数不满足大数据多文件,参数需要调整大一些。否则会报错。
这里只是设置了hadoop用户和root用户的权限,如果存在其他开发用户,也需要一并添加。
修改/etc/security/limits.conf添加如下
hadoop soft nofile 131072
hadoop hard nofile 131072
修改/etc/security/limits.d/90-nproc.conf添加如下
hadoop soft nproc unlimited
root soft nproc unlimited
hadoop hard nproc unlimited
6、修改主机名文件
root用户下进行操作。
修改/etc/hosts文件
#第一列为IP地址,后面每列皆为ip地址的hostname别名
192.168.60.41 b01 hivemysql
##b01的别名hivemysql是作为在hive-site.xml文件的配置,ha比较便利
192.168.60.42 b2
192.168.60.43 b3
7、防火墙
防火墙可关闭,也可根据需要设置。
root用户下操作
1.关闭防火墙服务
service iptables stop
2.设置防火墙服务器开机不自动启动
chkconfig iptables off
3.如果不关闭防火墙的话,需进行单独设置
集群内所有服务器之间需开放所有端口的tcp和udp端口。
集群内所有服务器需具备访问oracle数据库的权限,以便sqoop导数之用。
安装hadoop集群
1:给hadoop用户增加sudo权限
1)切换到root用户,su 输入密码
2)给sudoers增加写权限:chmod u+w /etc/sudoers
3)编译sudoers文件:vim /etc/sudoers
在root ALL=(ALL) ALL下方增加
hadoop ALL=(ALL)NOPASSWD:ALL
4)去掉sudoers文件的写权限:chmod u-w /etc/sudoers
2:每台机器上安装java环境( jdk-7u51-linux-x64.tar)
解压到指定目录,这里我选择的是/opt
tar -zxvf jdk-7u51-linux-x64.tar /opt
mv /opt/jdk1.7.0_51 /opt/java
配置环境变量,
vim /etc/profile (如果没有权限可以前边加入sudo)
export JAVA_HOME=/opt/java
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:
%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
3:解压hadoop到指定目录(我这里使用的是/opt/目录)
tar -zxvf hadoop-2.7.0.tar.gz /opt/hadoop-2.7.0
重命名文件:mv /opt/hadoop-2.7.0 /opt/hadoop
在/opt/hadoop/目录下,建立tmp、hdfs/name、hdfs/data目录,执行如下命令
mkdir /opt/hadoop/tmp
mkdir /opt/hadoop/hdfs
mkdir /opt/hadoop/hdfs/data
mkdir /opt/hadoop/hdfs/name
3),设置环境变量,#vi ~/.bash_profile
#set hadoop path
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin
4),使环境变量生效,$source ~/.bash_profile
Hadoop配置
进入$HADOOP_HOME/etc/hadoop目录,配置 hadoop-env.sh等。涉及的配置文件如下:
hadoop-2.7.1/etc/hadoop/hadoop-env.sh
hadoop-2.7.1/etc/hadoop/yarn-env.sh
hadoop-2.7.1/etc/hadoop/core-site.xml
hadoop-2.7.1/etc/hadoop/hdfs-site.xml
hadoop-2.7.1/etc/hadoop/mapred-site.xml
hadoop-2.7.1/etc/hadoop/yarn-site.xml
hadoop-env.sh:
export JAVA_HOME=/opt/java
yarn-env.sh
export JAVA_HOME=/opt/java
core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://b01:9000</value>
<description>HDFS的URI,文件系统://namenode标识:端口号</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/tmp</value>
<description>namenode上本地的hadoop临时文件夹 </description>
</property>
</configuration>
hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>副本个数,配置默认是3,应小于datanode机器数量</description>
</property>
<property>
<name>dfs.namenode.name.dir</name> <value>file:/opt/hadoop/dfs/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
<property>
<name>dfs.datanode.data.dir</name> <value>file:/opt/hadoop/dfs/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>b01:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>b01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>b01:19888</value>
</property>
</configuration>
yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce
.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler
</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>b01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>b01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>b01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>b01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>b01:8088</value>
</property>
</configuration>
8:编辑slaves文件
清空加入从节点的名字
b1
b2
9:将hadoop分发到各个节点(因为权限问题,先将该文件夹分发到各个节点的/home/hadoop目录下,再进入各个节点将文件夹移到/opt下)
scp -r /opt/hadoop b2:/home ,
进入该节点执行:sudo mv hadoop /opt/
scp -r /opt/hadoop b3:/home ,
进入该节点执行:sudo mv hadoop /opt/
10:在master节点格式化hdfs
1)格式化namenode
bin/hdfs namenode -format
看见status 0表示安装成功
2)启动NameNode 和 DataNode 守护进程
$ sbin/start-dfs.sh
3)启动ResourceManager 和 NodeManager 守护进程
$ sbin/start-yarn.sh
启动验证
1)执行jps命令,有如下进程,说明Hadoop正常启动
# jps
11044 Jps
5999 ResourceManager
5122 SecondaryNameNode
4836 NameNode