标签(空格分隔): hadoop
hadoop集群搭建
1 centos准备
####静态网络配置
我是centos7的 配置下对应的静态网路地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static #静态网路
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes # 开机启动
IPADDR=192.168.52.131 #地址
DNS=8.8.8.8 #dns
GATEWAY=192.168.52.2 # 网关
NETMASK=255.255.255.0
记得删除UUID
然后service network restart 重启网络
如果无法ping通百度啥的域名如下配置改下
vi /etc/resolv.conf
添加
nameserver 8.8.8.8
解析服务与dns一致即可
2安装jdk
1)去官网下个jdk对应的版本,之后上传解压
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)配置下对应的host
vi /etc/hosts
192.168.52.131 hadoop1
192.168.52.132 hadoop2
192.168.52.133 hadoop3
192.168.52.134 hadoop4
4)文件拷贝辅助shell
scp_file.sh
source $basepath/userconfig
scp_file() {
local s=? l=? d=?
while getopts "s:d:l:" opt; do
case $opt in
s )
s=$OPTARG
;;
l )
l=$OPTARG
;;
d )
d=$OPTARG
;;
? )
echo "选项不存在"
;;
esac
done
copy_every $l $s $d
}
copy_every(){
local nodes files;
nodes=${1//,/ }
files=${2//,/ }
for n in $nodes
do
for f in $files
do
echo $n $f
expect -c "set timeout -1;
spawn scp -r $f $ROOT_U@${n}:${3}
expect {
*(yes/no)* {send yes\r;exp_continue;}
*assword:* {send $ROOT_P\r;exp_continue;}
eof {exit 0;}
}";
done
done
}
scp_file $@
userconfig
ROOT_U=root# 用户名
ROOT_P=root#密码
例子:
sh scp_file.sh -l hadoop2,hadoop3,hadoop4,hadoop1 -s jdk-8u121-linux-x64.tar.gz -d /root
其中 -l后面是对应的域名以,号隔开 -s是要拷贝的文件 以,号隔开 -d是对应要拷贝到对应的目录上
sh scp_file.sh -l hadoop2,hadoop3,hadoop4 -s /etc/hosts -d /etc/
3用户配置
由于我们需要运行hadoop所以最好建立一个相关的用户去运行该程序
1)新建用户辅助shell
user_add.sh
#! /bin/bash
basepath=$(cd `dirname $0`;pwd)
source ${basepath}/adduserconf
yum install -y tcl tk expect
user_add(){
echo $1
useradd $1
echo "密码 $2"
expect -c "set timeout -1;
spawn passwd $1;
expect {
*密码* {send $2\r; exp_continue;}
eof {exit 0;}
}";
su $1
}
user_add_enter(){
user_add $USER $PASSWDN
}
user_add_enter
adduserconf
USER=hadoop
PASSWDN=hadoop
这两个文件放到相同目录下
执行 user_add.sh 即可添加hadoop用户
可使用 scp_file.sh将这两个文件拷贝到对应的机器上去执行
执行完毕后用hadoop登陆 再做如下hadoop集群搭建
4 hadoop集群配置
2个集群,5个配置
2个集群
hadoop下载可通过 hadoop历史版本选择一个版本下载
hadoop集群搭建 主要搭建两个集群 在hadoop里面已存在。
hdfs和yarn(存储和调度系统)
5个配置
这里搭建是最简配置,如果需要自定义其他相关配置可通过 hadoop历史版本找到对应的版本选择document完成自定义配置
我在/home/hadoop 下建立一个文件夹 apps 将hadoop对应项目放到里面
配置文件在 hadoop-[version]/etc/hadoop下
core-size.xml hdfs-size.xml yarn-size.xml mapred-site.xml hadoop.env 哦 还有启动的时候需要配置slave 配置datanode 比如hadoop2~4都是datanode则配置
hadoop2
hadoop3
hadoop4
start-dfs.sh里面会读取slave数据。
注意每个集群上,hdfs本身都是单独启动对应的节点的,yarn也一样,我们可以通过配置slave和免密登陆,可让脚本自动启动。另外yarn的resourcemanage是本地启动的。
hadoop的这几个需要配置的文件都在 HADOOP_HOME/etc/hadoop 里面配置
第一个:hadoop-env.sh
vim hadoop-env.sh
#第27行
export JAVA_HOME=${JAVA_HOME}
第二个:core-site.xml
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.4.1/tmp</value>
</property>
第三个:hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop1:50090</value>
</property>
第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第五个:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
修改完毕后使用scp_file.sh 完成hadoop项目的拷贝
sh scp_file.sh -l hadoop2,hadoop3,hadoop4 -s /home/hadoop/apps -d /home/hadoop/apps
apps下是hadoop-[version]的项目
由于运行hadoop最好单独用hadoop或者单独的用户去运行,所以我们再使用scp_file 的时候将对应的userconf的用户和密码配置成相应的用户,如果先运行 免密配置就木有影响
将HADOOP_HOME添加到环境变量
vim /etc/proflie
export JAVA_HOME=/usr/java/jdk1.7.0_65
export HADOOP_HOME=/itcast/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
5 免密登陆辅助shell
免密配置
copy_id.sh
#!/bin/bash
SERVERS="hadoop1 hadoop2 hadoop3 hadoop4 "
PASSWORD=hadoop
auto_ssh_copy_id() {
expect -c "set timeout -1;
spawn ssh-copy-id $1;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
ssh_copy_id_to_all() {
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
}
免密配置:
ssh-keygen -t rsa <生成秘钥>
四个enter即可不需要配置啥密码
调用copy_id.sh完成免密登陆配置
sh copy_id.sh
防火墙设置
由于使用centos7防火墙操作命令如下 做下关闭操作
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
4 namenode format
hdfs namenode -format (hadoop namenode -format)
格式化namenode