hadoop伪分布式模式部署

1.hadoop的部署模式

hadoop可使用不一样的模式部署,适用于不一样的场景。java

单机模式:无需任何守护进程,全部的程序都运行在同一个JVM上执行,通常用于调试MapReduce程序时使用(多用在Windows环境下)。
伪分布式模式:守护进程运行在本地机器上,模拟一个小规模的集群,只有一个NameNode和一个DataNode实例,数据都存放在同一个节点上。“伪”体如今如何本节点出现故障,则数据丢失,而彻底分布式可使用副本机制保证一个节点故障时数据正常访问。伪分布模式也多用在程序调试中。
彻底分布式模式:守护进程运行在一个集群上,有一个NameNode和多个DataNode,利用副本机制能够保证当其中一个DataNode节点故障时数据还能正常访问。利用SecondaryNameNode和高可用机制,还可保证整个集群不间断地提供服务。企业应用中hadoop的部署必然是彻底分布式模式。node

伪分布模式的优点linux

(1)节省硬件资源:使用一个节点就能够完成集群的搭建。
(2)便于调试:在程序调试阶段能够省去不少服务维护工做,专一于业务研发。git

2.伪分布模式安装部署

2.1安装环境

Linux:CentOS 7.2(若是没有实体机可以使用虚拟机代替)
JDK:1.8(openjdk或oracle jdk都可,能运行java命令便可)web

java -version命令输出以下:shell

[root@node1 hadoop]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

2.2配置节点名称

设置节点名称为node1
hostnamectl set-hostname node1
/etc/hosts文件中写入节点名称和ip的对应信息
192.168.21.20 node1
hostname命令执行结果为node1apache

2.3关闭防火墙

systemctl stop firewalld
setenforce 0
# 等效于手动修改/etc/sysconfig/selinux,将其中的SELINUX=enforcing改为SELINUX=disabled
sed 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

2.4配置免密登陆

配置免密的目的是让Hadoop的NameNode和DataNode能在没有密码的状况下互相通讯。oracle

# 有提示的地方一路按回车
ssh-keygen -t rsa
# 提示输入root用户密码
ssh-copy-id node1

测试:若是执行ssh node1不须要密码,即为成功。ssh

2.5安装包下载

记住apache软件统一下载地址,apache系列全部软件、全部版本不再用在百度上搜了!
https://archive.apache.org/dist/
根据项目须要下载相应的版本,本文以2.7.3版本做为示例。下载地址:
https://archive.apache.org/dist/hadoop/core/hadoop-2.7.3/hadoop-2.7.3.tar.gzjvm

2.6安装包上传并解压

将hadoop安装包经过远程传输工具(如xftp),上传至linux的/root目录。
进入/root目录,并解压tar.gz,解压后将hadoop-2.7.3目录移动到/usr/local/目录下(不绝对,也有人喜欢放在/opt目录下,但最好不要放在/root目录下,由于容易被误删)

cd /root
tar -zxvf hadoop-2.7.3.tar.gz
mv hadoop-2.7.3 /usr/local/

推荐移动至/usr/local/目录的理由:
/usr/local/目录下存放的是linux的本地连接库、运行命令等,一是将hadoop也做为linux的本地程序维护,二是防止被其余用户误删。

2.7 配置环境变量

修改/etc/profile文件,在末尾写入

# java的路径根据实际路径填写
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
export HADOOP_HOME=/usr/local/hadoop-2.7.3
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

测试,若是执行hadoop version,出现如下结果则为成功。

hadoop version
Hadoop 2.7.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff
Compiled by root on 2016-08-18T01:41Z
Compiled with protoc 2.5.0
From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4
This command was run using /usr/local/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar

2.8配置hadoop

进入到/usr/local/hadoop/etc/hadoop进行hadoop配置文件修改

2.8.1hadoop-env.sh文件

配置java的路径,根据实际修改。

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre

2.8.2core-site.xml

配置NameNode访问地址、临时目录、访问代理等(用于权限认证)。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/tmp/hadoop</value>
    </property>
    <property>
       <name>hadoop.proxyuser.root.hosts</name>
       <value>*</value>
    </property>
    <property>
       <name>hadoop.proxyuser.root.groups</name>
       <value>*</value>
    </property>
</configuration>

2.8.3 hdfs-site.xml

配置DataNode的数据目录、NameNode的数据目录、副本数、是否开启dfs认证权限等。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/var/lib/hadoop/datanode</value>
    </property>
    <property>
         <name>dfs.namenode.name.dir</name>
         <value>/var/lib/hadoop/namenode</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
</configuration>

2.8.4slaves

配置DataNode节点的名称。

node1

2.9启动DFS

使用如下命名开启DFS服务

start-dfs.sh

若是成功,则正常输出

Starting namenodes on [node1]
node1: starting namenode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-root-namenode-node1.out
node1: starting datanode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-root-datanode-node1.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-root-secondarynamenode-node1.out

2.10测试

hdfs dfs -ls /
hdfs dfs -mkdir /input
hdfs dfs -put /usr/local/hadoop-2.7.3/etc/hadoop/* /input/
hdfs dfs -ls /input

若是成功,应输出图中内容。
在这里插入图片描述