三节点搭建hadoop环境
Hadoop 为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集,并且支持在单台计算机到几千台计算机之间进行扩展。
Hadoop 使用 Java 开发,所以可以在多种不同硬件平台的计算机上部署和使用。其核心部件包括分布式文件系统 (Hadoop DFS,HDFS) 和 MapReduce。
Hadoop 的作用
Hadoop 的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持。
也就是说, Hadoop 在某种程度上将多台计算机组织成了一台计算机(做同一件事),那么 HDFS 就相当于这台计算机的硬盘,而 MapReduce 就是这台计算机的 CPU 控制器。
Hadoop 整体设计
Hadoop 框架是用于计算机集群大数据处理的框架,所以它必须是一个可以部署在多台计算机上的软件。部署了 Hadoop 软件的主机之间通过套接字 (网络) 进行通讯。
Hadoop 主要包含 HDFS 和 MapReduce 两大组件,HDFS 负责分布储存数据,MapReduce 负责对数据进行映射、规约处理,并汇总处理结果。
Hadoop 框架最根本的原理就是利用大量的计算机同时运算来加快大量数据的处理速度。例如,一个搜索引擎公司要从上万亿条没有进行规约的数据中筛选和归纳热门词汇就需要组织大量的计算机组成集群来处理这些信息。如果使用传统数据库来处理这些信息的话,那将会花费很长的时间和很大的处理空间来处理数据,这个量级对于任何单计算机来说都变得难以实现,主要难度在于组织大量的硬件并高速地集成为一个计算机,即使成功实现也会产生昂贵的维护成本。
Hadoop 可以在多达几千台廉价的量产计算机上运行,并把它们组织为一个计算机集群。
一个 Hadoop 集群可以高效地储存数据、分配处理任务,这样会有很多好处。首先可以降低计算机的建造和维护成本,其次,一旦任何一个计算机出现了硬件故障,不会对整个计算机系统造成致命的影响,因为面向应用层开发的集群框架本身就必须假定计算机会出故障。
HDFS
Hadoop Distributed File System,Hadoop 分布式文件系统,简称 HDFS。
HDFS 用于在集群中储存文件,它所使用的核心思想是 Google 的 GFS 思想,可以存储很大的文件。
在服务器集群中,文件存储往往被要求高效而稳定,HDFS同时实现了这两个优点。
HDFS 高效的存储是通过计算机集群独立处理请求实现的。因为用户 (一半是后端程序) 在发出数据存储请求时,往往响应服务器正在处理其他请求,这是导致服务效率缓慢的主要原因。但如果响应服务器直接分配一个数据服务器给用户,然后用户直接与数据服务器交互,效率会快很多。
数据存储的稳定性往往通过”多存几份”的方式实现,HDFS 也使用了这种方式。HDFS 的存储单位是块 (Block) ,一个文件可能会被分为多个块储存在物理存储器中。因此 HDFS 往往会按照设定者的要求把数据块复制 n 份并存储在不同的数据节点 (储存数据的服务器) 上,如果一个数据节点发生故障数据也不会丢失。
HDFS 的节点
HDFS 运行在许多不同的计算机上,有的计算机专门用于存储数据,有的计算机专门用于指挥其它计算机储存数据。这里所提到的”计算机”我们可以称之为集群中的节点。
命名节点 (NameNode)
命名节点 (NameNode) 是用于指挥其它节点存储的节点。任何一个”文件系统”(File System, FS) 都需要具备根据文件路径映射到文件的功能,命名节点就是用于储存这些映射信息并提供映射服务的计算机,在整个 HDFS 系统中扮演”管理员”的角色,因此一个 HDFS 集群中只有一个命名节点。
数据节点 (DataNode)
数据节点 (DataNode) 使用来储存数据块的节点。当一个文件被命名节点承认并分块之后将会被储存到被分配的数据节点中去。数据节点具有储存数据、读写数据的功能,其中存储的数据块比较类似于硬盘中的”扇区”概念,是 HDFS 存储的基本单位。
副命名节点 (Secondary NameNode)
副命名节点 (Secondary NameNode) 别名”次命名节点”,是命名节点的”秘书”。这个形容很贴切,因为它并不能代替命名节点的工作,无论命名节点是否有能力继续工作。它主要负责分摊命名节点的压力、备份命名节点的状态并执行一些管理工作,如果命名节点要求它这样做的话。如果命名节点坏掉了,它也可以提供备份数据以恢复命名节点。副命名节点可以有多个。
MapReduce
MapReduce 的含义就像它的名字一样浅显:Map 和 Reduce (映射和规约) 。
大数据处理
大量数据的处理是一个典型的”道理简单,实施复杂”的事情。之所以”实施复杂”,主要是大量的数据使用传统方法处理时会导致硬件资源 (主要是内存) 不足。
开始搭建
一、hadoop模式介绍
hadoop 分为三种模式:单机模式、伪集群模式和集群模式。
- 单机模式:Hadoop 仅作为库存在,可以在单计算机上执行 MapReduce 任务,仅用于开发者搭建学习和试验环境。
- 伪集群模式:此模式 Hadoop 将以守护进程的形式在单机运行,一般用于开发者搭建学习和试验环境。
- 集群模式:此模式是 Hadoop 的生产环境模式,也就是说这才是 Hadoop 真正使用的模式,用于提供生产级服务。
二、环境介绍
创建三台虚拟机,选用Centos7系统。
节点名 | IP |
---|---|
master | 192.168.137.133 |
slave1 | 192.168.137.134 |
slave2 | 192.168.137.135 |
三、开始搭建
关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
创建虚拟机之后,配置主机名,配置内网解析
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
cat <<EOF >> /etc/hosts
192.168.137.133 master
192.168.137.134 slave1
192.168.137.135 slave2
EOF
配置master免密登录slave1和slave2
ssh-keygen #然后一路回车
ssh_copy-id root@master
ssh_copy-id root@slave1
ssh_copy-id root@slave2
然后下载hadoop安装包和jdk
就咱这性格,必须下载最新版本的啊!(因为是学习,肯定学最新的,因为等你用上都指不定是哪年哪月,你再不学点新知识…)
wget Https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz
wget https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz
解压压缩包到指定目录
tar zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jdk
tar zxvf hadoop-3.2.2.tar.gz -C /usr/local/hadoop
配置java和hadoop环境变量
vi /etc/profile
#java环境变量
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
#hadoop环境变量
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#hadoop用户,如果不设置为root,则需要创建hadoop用户
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
修改hadoop的配置文件
cd /usr/local/hadoop/hadoop-3.2.2/etc/hadoop/
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
#/home/hdfs为hdfs分布式文件系统的根目录,可以自己设置
<name>dfs.namenode.name.dir</name>
<value>/home/hdfs</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hdfs</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
#配置通过masterip:50070访问hdfs的web ui
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>matraxa:9001</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.application.classpath</name>
#这个value通过命令hadoop classpath获得
<value>/usr/local/hadoop/hadoop-3.2.2/etc/hadoop:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/common/lib/*:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/common/*:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/hdfs:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/hdfs/lib/*:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/hdfs/*:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/mapreduce/*:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/yarn:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/yarn/lib/*:/usr/local/hadoop/hadoop-3.2.2/share/hadoop/yarn/*</value>
</property>
</configuration>
hadoop-env.sh和mapred-env.sh、yarn-env.sh添加java环境变量
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181
works
slave1
slave2
至此,所有的配置已经完成,准备启动hadoop服务。
初始格式化文件系统 hdfs namenode -format
启动所有服务 start-all.sh
分别在三台机器jps,检查节点状态。
浏览器查看 mapreduce:http://master的ip:8088
浏览器查看 HDFS:http://master的ip:50070
四、验证
hdfs dfs -mkdir /user #创建文件夹
dd if=/dev/zero of=1.txt bs=1M count=1 #生成一个1M大小的文件
dd if=/dev/zero of=2.txt bs=1M count=100 #生成一个100m大小的文件
hdfs dfs -put 1.txt /user #上传文件
hdfs dfs -put 2.txt /user #上传文件
可以看到已经上传完成
Hdfs的功能验证完成之后,验证下mapreduce的功能,首先创建一个文本文件,内容如下
cat <<EOF >> /test.txt
hadoop
hive
hadoop
hbase
spark
hive
hadoop
spark
EOF
上传文件到hdfs中
hdfs dfs -put test.txt /user
用hadoop自带的词语统计,统计一下
hadoop jar /usr/loval/hadoop/hadoop-3.2.2/share/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /user/test.txt /output
查看结果
文章内容仅用于作者学习使用,如果内容侵犯您的权益,请立即联系作者删除,作者不承担任何法律责任。