一.hadoop简介

Hadoop的框架最核心的设计就是:HDFS和MapReduce。

  • HDFS为海量的数据提供了存储。
  • MapReduce为海量的数据提供了计算。

Hadoop框架包括以下四个模块:

  • Hadoop Common: 这些是其他Hadoop模块所需的Java库和实用程序。这些库提供文件系统和操作系统级抽象,并包含启动Hadoop所需的Java文件和脚本。
  • Hadoop YARN: 这是一个用于作业调度和集群资源管理的框架。
  • Hadoop Distributed File System (HDFS): 分布式文件系统,提供对应用程序数据的高吞吐量访问。
  • Hadoop MapReduce:这是基于YARN的用于并行处理大数据集的系统。

hadoop应用场景:

  • 在线旅游
  • 移动数据
  • 电子商务
  • 能源开采与节能
  • 基础架构管理
  • 图像处理
  • 诈骗检测
  • IT安全
  • 医疗保健

HDFS文件存储

  • HDFS属于Master与Slave结构。一个集群中只有一个NameNode,可以有多个DataNode。
  • HDFS存储机制保存了多个副本,当写入1T文件时,我们需要3T的存储,3T的网络流量带宽;系统提供容错机制,副本丢失或宕机可自动恢复,保证系统高可用性。
  • HDFS默认会将文件分割成block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,会导致内存的负担很重。
  • HDFS采用的是一次写入多次读取的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。
  • HDFS存储理念是以最少的钱买最烂的机器并实现最安全、难度高的分布式文件系统(高容错性低成本),HDFS认为机器故障是种常态,所以在设计时充分考虑到单个机器故障,单个磁盘故障,单个文件丢失等情况。

HDFS容错机制

  • 节点失败监测机制:DN每隔3秒向NN发送心跳信号,10分钟收不到,认为DN宕机。
  • 通信故障监测机制:只要发送了数据,接收方就会返回确认码。
  • 数据错误监测机制:在传输数据时,同时会发送总和校验码。

二. hadoop集群

本地(独立)式

[root@Server1 ~]# useradd hadoop
[root@Server1 ~]# su - hadoop

需要的包

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护

[hadoop@Server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz 
[hadoop@Server1 ~]$ ln -s jdk1.8.0_181/ java
[hadoop@Server1 ~]$ tar zxf hadoop-3.2.1.tar.gz 
[hadoop@Server1 ~]$ ln -s hadoop-3.2.1 hadoop
[hadoop@Server1 ~]$ cd hadoop
[hadoop@Server1 hadoop]$ cd etc/hadoop/
[hadoop@Server1 hadoop]$ vim hadoop-env.sh

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护_02

[hadoop@Server1 hadoop]$ cd ..
[hadoop@Server1 etc]$ cd ..
[hadoop@Server1 hadoop]$ mkdir input
[hadoop@Server1 hadoop]$ cp etc/hadoop/*.xml input
[hadoop@Server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar
[hadoop@Server1 hadoop]$ cd output/
[hadoop@Server1 output]$ ls
[hadoop@Server1 output]$ cat *

hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_03

伪分布式

[hadoop@Server1 hadoop]$ cd etc/hadoop/
[hadoop@Server1 hadoop]$ vim core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护_04

[hadoop@Server1 hadoop]$ vim hdfs-site.xml

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护_05

[root@server1 ~]# echo westos | passwd --stdin hadoop
[root@Server1 ~]# su - hadoop
[hadoop@Server1 ~]$ ssh-keygen
[hadoop@Server1 ~]$ ssh-copy-id localhost
[hadoop@Server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@Server1 hadoop]$ bin/hdfs namenode -format
[hadoop@Server1 hadoop]$ sbin/start-dfs.sh
[hadoop@Server1 ~]$ vim .bash_profile

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop_06

[hadoop@Server1 ~]$ source .bash_profile
[hadoop@Server1 hadoop]$ jps

hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_07

[hadoop@Server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@Server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@Server1 hadoop]$ rm -rf input/
[hadoop@Server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output
[hadoop@Server1 hadoop]$ bin/hdfs -get output

[hadoop@Server1 hadoop]$ rm -rf output/
[hadoop@Server1 hadoop]$ bin/hdfs dfs -rm output

完全分布式

[hadoop@Server1 hadoop]$ sbin/stop-dfs.sh
[hadoop@Server1 hadoop]$ yum install -y nfs-utils
[root@server1 ~]# vim /etc/exports
/home/hadoop    *(rw,anonuid=1000,anongid=1000)

[root@Server1 ~]# systemctl start nfs
[root@Server1 ~]# showmount -e

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护_08

创建server2、3、4,做以下操作

[root@server2 ~]# useradd hadoop
[root@server2 ~]# echo westos | passwd --stdin hadoop
[root@server2 ~]# yum install -y nfs-utils
[root@server2 ~]# showmount -e 172.25.4.1
[root@server2 ~]# mount 172.25.4.1:/home/hadoop/ /home/hadoop/

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护_09

[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml

hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_10

[hadoop@server1 hadoop]$ vim hdfs-site.xml

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop_11

[hadoop@server1 hadoop]$ vim workers
server2
server3
server4
[hadoop@server1 hadoop]$ rm -rf /tmp/*
[hadoop@server1 hadoop]$ cd ..
[hadoop@server1 etc]$ cd ..
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
[hadoop@server1 hadoop]$ jps

hadoop大数据维护 hadoop大数据平台构建与应用_zookeeper_12

[hadoop@server1 hadoop]$ dd if=/dev/zero of=bigfile bs=1M count=200
[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -put bigfile

hadoop大数据维护 hadoop大数据平台构建与应用_zookeeper_13


hadoop大数据维护 hadoop大数据平台构建与应用_hadoop_14

hadoop大数据维护 hadoop大数据平台构建与应用_hadoop_15


hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_16

[hadoop@server4 hadoop]$ bin/hdfs --daemon start datanod
[hadoop@server4 hadoop]$ jps

hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_17


hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_18

[hadoop@server4 hadoop]$ mv bigfile demo
[hadoop@server4 hadoop]$ bin/hdfs dfs -put demo

hadoop大数据维护 hadoop大数据平台构建与应用_zookeeper_19


hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护_20


hadoop大数据维护 hadoop大数据平台构建与应用_hadoop大数据维护_21

三.hadoop高可用

五个虚拟机
server1、5作为master
srever2、3、4作为一个集群

server2、3、4、5 nfs文件共享server1

停止所有的hadoop进程,清除每个主机下/tmp/下的所有数据

需要的包

hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_22

[hadoop@server1 ~]$ tar zxf zookeeper-3.4.9.tar.gz
[hadoop@server1 ~]$ cd zookeeper-3.4.9/conf
[hadoop@server1 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@server1 conf]$ vim zoo.cfg
server.1=172.25.4.2:2888:3888
server.2=172.25.4.3:2888:3888
server.3=172.25.4.4:2888:3888

hadoop大数据维护 hadoop大数据平台构建与应用_hdfs_23

[hadoop@server1 conf]$ mkdir /tmp/zookeeper

[hadoop@server2 ~]$ mkdir /tmp/zookeeper
[hadoop@server2 ~]$ echo 1 > /tmp/zookeeper/myid
[hadoop@server2 ~]$ cd zookeeper-3.4.9/
[hadoop@server2 zookeeper-3.4.9]$ bin/zkServer.sh start

[hadoop@server3 ~]$ mkdir /tmp/zookeeper
[hadoop@server3 ~]$ echo 2 > /tmp/zookeeper/myid
[hadoop@server2 ~]$ cd zookeeper-3.4.9/
[hadoop@server4 zookeeper-3.4.9]$ bin/zkServer.sh start

[hadoop@server4 ~]$ mkdir /tmp/zookeeper
[hadoop@server4 ~]$ echo 3 > /tmp/zookeeper/myid
[hadoop@server4 ~]$ cd zookeeper-3.4.9/
[hadoop@server4 zookeeper-3.4.9]$ bin/zkServer.sh start
[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
<configuration>
        <property>
        <name>fs.defaultFS</name>
        <value>hdfs://masters</value>
    </property>

<property>
<name>ha.zookeeper.quorum</name>
<value>172.25.4.2:2181,172.25.4.3:2181,172.25.4.4:2181</value>
</property>

</configuration>

hadoop大数据维护 hadoop大数据平台构建与应用_zookeeper_24

[hadoop@server1 hadoop]$ vim hdfs-site.xml
<configuration>
        <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

<property>
<name>dfs.nameservices</name>
<value>masters</value>
</property>

<property>
<name>dfs.ha.namenodes.masters</name>
<value>h1,h2</value>
</property>

<property>
<name>dfs.namenode.rpc-address.masters.h1</name>
<value>172.25.4.1:9000</value>
</property>

<property>
<name>dfs.namenode.http-address.masters.h1</name>
<value>172.25.4.1:9870</value>
</property>

<property>
<name>dfs.namenode.rpc-address.masters.h2</name>
<value>172.25.4.5:9000</value>
</property>

<property>
<name>dfs.namenode.http-address.masters.h2</name>
<value>172.25.4.5:9870</value>
</property>

<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://172.25.4.2:8485;172.25.4.3:8485;172.25.4.4:8485/masters</value>
</property>

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/tmp/journaldata</value></property>

<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
[hadoop@server2 hadoop]$ bin/hdfs --daemon start journalnode
[hadoop@server3 hadoop]$ bin/hdfs --daemon start journalnode
[hadoop@server4 hadoop]$ bin/hdfs --daemon start journalnode
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop 172.25.0.5:/tmp
[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK
[hadoop@server1 hadoop]$ sbin/start-dfs.sh