hadoop可使用不一样的模式部署,适用于不一样的场景。java
单机模式:无需任何守护进程,全部的程序都运行在同一个JVM上执行,通常用于调试MapReduce程序时使用(多用在Windows环境下)。
伪分布式模式:守护进程运行在本地机器上,模拟一个小规模的集群,只有一个NameNode和一个DataNode实例,数据都存放在同一个节点上。“伪”体如今如何本节点出现故障,则数据丢失,而彻底分布式可使用副本机制保证一个节点故障时数据正常访问。伪分布模式也多用在程序调试中。
彻底分布式模式:守护进程运行在一个集群上,有一个NameNode和多个DataNode,利用副本机制能够保证当其中一个DataNode节点故障时数据还能正常访问。利用SecondaryNameNode和高可用机制,还可保证整个集群不间断地提供服务。企业应用中hadoop的部署必然是彻底分布式模式。node
伪分布模式的优点linux
(1)节省硬件资源:使用一个节点就能够完成集群的搭建。
(2)便于调试:在程序调试阶段能够省去不少服务维护工做,专一于业务研发。git
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)
设置节点名称为node1
hostnamectl set-hostname node1
在/etc/hosts
文件中写入节点名称和ip的对应信息
192.168.21.20 node1
hostname
命令执行结果为node1
apache
systemctl stop firewalld setenforce 0 # 等效于手动修改/etc/sysconfig/selinux,将其中的SELINUX=enforcing改为SELINUX=disabled sed 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
配置免密的目的是让Hadoop的NameNode和DataNode能在没有密码的状况下互相通讯。oracle
# 有提示的地方一路按回车 ssh-keygen -t rsa # 提示输入root用户密码 ssh-copy-id node1
测试:若是执行ssh node1
不须要密码,即为成功。ssh
记住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
将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的本地程序维护,二是防止被其余用户误删。
修改/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
进入到/usr/local/hadoop/etc/hadoop进行hadoop配置文件修改
配置java的路径,根据实际修改。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
配置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>
配置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>
配置DataNode节点的名称。
node1
使用如下命名开启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
hdfs dfs -ls / hdfs dfs -mkdir /input hdfs dfs -put /usr/local/hadoop-2.7.3/etc/hadoop/* /input/ hdfs dfs -ls /input
若是成功,应输出图中内容。