云服务器搭建HADOOP集群
目录
云服务器配置
本次采用三台服务器名称分别为
nn1 :NameNode ,ResourceManager,JobHistoryServer
dn1 :NodeManager,SecondaryNameNode,DataNode
dn2 :DataNode,NodeManager
服务器版本: centos 7.2
hadoop版本: hadoop-2.7.2
JDK版本: jdk-8u121-linux-x64
1. 设置安全组
为了防止外网攻击云服务器:
将各个服务器的内外网地址添加进安全组
将客户端外网地址添加进安全组
如用本机虚拟机搭建,则无需配置
2. 服务器配置
> 关闭防火墙和selinux 配置/etc/hosts
vi /etc/hosts
------> nn1 <------
106.13.177.xxx dn1
106.12.7.xxx dn2
192.168.0.x nn1
------> dn1 <------
192.168.16.x dn1
106.12.7.xxx dn2
106.12.51.xx nn1
------> dn2 <------
106.13.177.xxx dn1
192.168.16.x dn2
106.12.51.xx nn1
这里注意本机地址必须配置为内网地址,其他两台设置必须为外网地址。 否则集成搭建完成后,idea写的JAVA程序访问不了集群。
如果是本机虚拟机,则正常写入内网地址即可
> 创建hdp用户,设置主机互信
>>创建用户
useradd hdp
passwd hdp
>>设置主机互信
交换各主机密钥
分别在各个主机上运行
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub hdp@nn1
ssh-copy-id -i ~/.ssh/id_rsa.pub hdp@dn2
ssh-copy-id -i ~/.ssh/id_rsa.pub hdp@dn2
> 配置sudo
vi /etc/sudoers
在root ALL=(ALL) ALL下
添加如下内容
hdp ALL=(ALL) ALL
想免除密码输入加上NOPASSWD:
hdp ALL=(ALL) NOPASSWD: ALL
> 编写xcall ,xrsync 文件
xcall -- 批量执行文件
#!/bin/bash
pcount=$#
if (( pcount<1 )) ;then
echo no args;
exit;
fi
for host in nn dn1 dn2 ; ##主机名称
do
echo ---------------- $host ------------------
ssh $host $1
done
xrync -- 批量传输文件
#!/bin/bash
pcount=$#
if (( pcount<1 )) ;then
echo no args;
exit;
fi
p1=$1;
fname=`basename $p1`
echo fname=$fname;
pdir=`cd -P $(dirname $p1);pwd`
echo pdir=$pdir
cuser=`whoami`
for host in dn1 dn2 ; ##主机名称
do
rsync $pdir/$fname $cuser@$host:$pdir
done
编写文件之后,将文件放入/usr/local/bin文件下
赋权chmod 755 /usr/local/bin/
3. 软件安装
利用xrsync将JDK和HADOOP安装包传到各个主机
利用xcall批量执行
> 安装JDK
>>卸载现有JDK
查询现有JDK
rpm -qa | grep java
如有信息则卸载JDK
sudo rpm -e 软件包
>>安装JDK
解压
tar -zxvf jdk-8u121-linux-x64.tar.gz -C /usr/local/
赋权
chmod -R 777 jdk1.8.0_121
配置JDK环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_121
export HADOOP_HOME=/usr/local/hadoop-2.7.2
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
vi ~/.bashrc ##root,hdp都要做修改
source /etc/profile
> 安装hadoop
>>解压
tar -zxvf hadoop-2.7.2.tar.gz -C /usr/local
>>赋权
chown -R hdp:hdp /usr/local/hadoop-2.7.2
>>配置环境变量
(与JDK配置相同,文件有带有hadoop的配置,如JDK环境变量已经配置,此步省略)
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_121
export HADOOP_HOME=/usr/local/hadoop-2.7.2
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
vi ~/.bashrc ##root,hdp都要做修改
source /etc/profile
>>source文件,使配置生效
source /etc/profile
使用ssh执行命令 属于Login-shell,会自动读取 /etc/profile文件中定义的所有的变量!
ssh 执行远程机器命令属于non-login-shell,不会读取/etc/profile
如果在使用命令时,我们需要使用/etc/profile定义的一些变量,需要在目标机器的对应的用户的家目录/.bashrc中添加以下代码
source /etc/profile
如果不添加以上代码,在执行start-all.sh | stop-all.sh一定会报错!
> hadoop目录结构
bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
sbin目录:存放启动或停止Hadoop相关服务的脚本
share目录:存放Hadoop的依赖jar包、文档、和官方案例
4.HADOOP配置文件
以下配置文件均在 $HADOOP_HOME/etc/hadoop
配置完成后使用xrync将文件同步到各个节点
> core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hdp/bigdata/data/tmp</value>
</property>
> hdfs-site.xml
<!--配置副本数,默认3 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>dn1:50090</value>
</property>
<property>
<!-- namenode 的备份目录,即 HDFS数据目录的本机备份 -->
<name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name,file:///home/hdp/bigdata/namespace</value>
</property>
> datanode也可以配置多个目录,但不是副本。
> 两个目录可以分别存放在不用的磁盘上,更加安全
在hdfs-site.xml 内添加
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>
> mapred-site.xml
<property>
<!--配置在yarn上运行 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!--日志监控服务的地址,一般填写为nodenode机器地址 -->
<name>mapreduce.jobhistroy.address</name>
<value>nn1:10020</value>
</property>
<property>
<name>mapreduce.jobhistroy.webapp.address</name>
<value>nn1:19888</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://nn1:19888/jobhistory/logs</value>
</property>
> yarn-site.xml
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>nn1</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
> slaves
配置集群的数据节点
dn1
dn2
5.启停集群
注意切换到hdp 用户
> 操作
1.格式化NameNode(第一次启动时格式化,以后就不要总格式化)
bin/hdfs namenode -format
2.启动hadoop集群
start-all.sh
3.启动历史服务器
sh mr-jobhistory-daemon.sh start historyserver
4.停止hadoop集群
stop-all.sh
5.验证集群是否正常启动
xcall jps
> 集群可视化UI
hadoop集群状态
http://nn1:50070/
yarn
http://nn1:8088/cluster
2nn
http://dn1:50090/status.html
创作不易,请各位多多点赞,转载请注明出处。
我们可以在评论交流,长期更新,可以关注我哦~