Hadoop集群搭建
Hadoop集群搭建
1、伪分布式模式(Centos7、jdk1.8、hadoop2.7.3、Oracle VM VirtualBox)
1.1 环境搭建:网络配置、关闭防火墙、jdk安装、hadoop安装
1.1.1 网络配置
1) Oracle VM VirtualBox 网络设置,设置虚拟机和本地windows互通。
网卡1:网络地址转换(NAT)
网卡2:仅主机模式(Host-Only)网络
2) 设置固定ip
网卡1配置:$>vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
网卡2配置:$>vim /etc/sysconfig/network-scripts/ifcfg-enp0s8
1.1.2 关闭防火墙
1) 查看防火墙状态:$>systemctl status firewalld.service
2) 临时关闭防火墙:$>systemctl stop firewalld.service
3) 永久关闭防火墙:$>systemctl disable firewalld.service
1.1.3 jdk安装
1) 上传安装包(可用SecureFXP)
2) 解压安装包:$>tar -zxvf jdk-8u131-linux-x64.tar.gz ./
3) 创建符号链接:$>ln -s jdk1.8.0_131/ jdk
4) 配置环境变量:$>sudo vim /etc/profile 打开后在末行添加如下代码
#set JAVA_HOME export JAVA_HOME=/soft/jdk export PATH=$PATH:$JAVA_HOME/bin
5) 使配置文件生效:$>source /etc/profile
6) 验证是否安装成功:$>java -version
1.1.4 hadoop安装
1) 上传安装包(可用SecureFXP)
2) 解压安装包:$>tar -zxvf hadoop-2.7.3.tar.gz ./
3) 创建符号链接:$>ln -s hadoop-2.7.3/ hadoop
4) 配置环境变量:$>sudo vim /etc/profile 打开后在末行添加如下代码
#set HADOOP_HOME export HADOOP_HOME=/soft/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
5) 使配置文件生效:$>source /etc/profile
6) 验证是否安装成功:$>hadoop version
1.2 Hadoop配置
1) 进入Hadoop的配置文件目录:$>cd /soft/hadoop/etc/hadoop/
2) 编辑需要配置的文件
$>vim core-site.xml
<configuration> <property> <name>fs.defaultFSname> <value>hdfs://nn:8020value> property> <property> <name>hadoop.tmp.dirname> <value>/soft/hadoop/data/tmpvalue> property> configuration>core-site.xml
$>vim hadoop-env.sh 手动修改"JAVA_HOME"的路径
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/soft/jdk
$>vim hdfs-site.xml
<configuration> <property> <name>dfs.replicationname> <value>1value> property> configuration>hdfs-site.xml
$>vim yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostnamename> <value>localhostvalue> property> <property> <name>yarn.nodemanager.aux-servicesname> <value>mapreduce_shufflevalue> property> configuration>yarn-site.xml
$>vim mapred-site.xml
<configuration> <property> <name>mapreduce.framework.namename> <value>yarnvalue> property> configuration>mapred-site.xml
1.3 配置SSH
1) 生成密钥对
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
2) 拷贝公钥到目标机
$>ssh-copy-id 192.168.56.101
1.4 Hadoop启动
1)格式化hdfs
$>hadoop namenode -format
2)启动hdfs
$>start-dfs.sh
3)启动yarn
$>start-yarn.sh
4)查看是否启动成功
[yss@yss ~]$ jps 2512 NodeManager 2404 ResourceManager 1932 NameNode 2044 DataNode 2237 SecondaryNameNode 2830 Jps
5)查看hdfs文件系统
#查看hadoop文件的根目录 $>hdfs dfs -ls / #webui查看hadoop文件系统 http://192.168.56.101:50070/
2、基于伪分布的完全分布式
基于伪分布式的条件:关闭防火墙、各主机之间ssh互通。
2.1 节点规划(可根据实际情况调整)
| nn | dn1 | dn2 |
dn3 |
|
NameNode SecondaryNameNode ResourceManager |
DataNode NodeManager |
DataNode NodeManager |
DataNode NodeManager |
2.2 配置完全分布式
2.2.1 可在{HADOOP_HOME}/etc/目录下拷贝3份配置文件,分别命名local(本地模式)、pseudo(伪分布式)、full(完全分布式),然后在该目录下创建一个hadoop的付号连接,指向需要的模式。
[yss@nn /soft/hadoop/etc]$ll total 12 drwxr-xr-x. 2 yss yss 4096 Jul 25 04:44 full lrwxrwxrwx. 1 yss yss 22 Jul 25 04:50 hadoop -> /soft/hadoop/etc/full/ drwxr-xr-x. 2 yss yss 4096 Jul 25 01:36 local drwxr-xr-x. 2 yss yss 4096 Jul 25 01:37 pseudo
2.2.2 完全分布式配置
1)core-site.xml
<configuration> <property> <name>fs.defaultFSname> <value>hdfs://nn:8020value> property> <property> <name>hadoop.tmp.dirname> <value>/soft/hadoop/data/tmpvalue> property> configuration>core-site.xml
2)hdfs
hdfs-site.xml
<configuration> <property> <name>dfs.replicationname> <value>3value> property> <property> <name>dfs.namenode.secondary.http-addressname> <value>nn:50090value> property> configuration>hdfs-site.xml
slaves
dn1
dn2
dn3
slaves
hadoop-env.sh
export JAVA_HOME=/soft/jdk
3)yarn
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>nnvalue>
property>
yarn-site.xml
yarn-env.sh
export JAVA_HOME=/soft/jdk
4)mapreduce
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
mapred-site.xml
mapred-env.sh
export JAVA_HOME=/soft/jdk
2.3 配置文件分发
2.3.1 脚本编写
批量执行命令脚本
$>vim /usr/local/bin/xcall.sh
#!/bin/bash params=$@ i=1 echo ============= localhost $params ============= $params for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do echo ============= dn$i $params ============= ssh dn$i "$params" donexcall.sh
在节点间分发文件的脚本
$>vim /usr/local/bin/xsync.sh
#!/bin/bash #1 获取输入参数个数,如果没有参数,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #2 获取文件名称 p1=$1 fname=`basename $p1` echo fname=$fname #3 获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 获取当前用户名称 user=`whoami` #5 循环 for((host=1; host<=3; host++)); do #echo $pdir/$fname $user@dn$host:$pdir echo --------------- dn$host ---------------- rsync -rvl $pdir/$fname $user@dn$host:$pdir donexsync.sh