1

【学习整理】hadoop大数据解决方案

 2 years ago
source link: https://blog.feelyou.top/posts/2445394680.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

hadoop大数据解决方案 test

9f41905cad2d30e5f82859105a99c5c1.jpeg

Hadoop简介

Hadoop特点

  • Java编写
  • 跨计算机集群的分布式存储和计算的环境
  • 可以上千台机器扩展,每个机器都可以提供本地计算和存储

Hadoop架构

1d66ee7db3bc4383619d0e69a61f1ab4.jpeg

Hadoop主要有两个层次,即:

  1. 加工/计算层(MapReduce)
  2. 存储层(Hadoop分布式文件系统)

Hadoop的框架还包括以下两个模块: Hadoop通用:这是Java库和其他Hadoop组件所需的实用工具。 Hadoop YARN :这是作业调度和集群资源管理的框架。

Hadoop安装

分布式文件储存系统

d11ec7d9f4a03f3f37d13873810f9231.jpeg

hdfs 特点

  • 它适用于在分布式存储和处理。
  • Hadoop提供的命令接口与HDFS进行交互。
  • 名称节点和数据节点能够检查集群的状态。
  • 流式访问文件系统数据。
  • HDFS提供了文件的权限和验证。
名称节点 - Namenode(主服务器)
  • 管理文件系统命名空间。
  • 规范客户端对文件的访问。
  • 它也执行文件系统操作,如重命名,关闭和打开的文件和目录
数据节点 - Datanode
  • 数据节点上的文件系统执行的读写操作,根据客户的请求。
  • 根据名称节点的指令执行操作,如块的创建,删除和复制。
块 - Rack

存储在HDFS文件系统中的文件将被划分为一个或多个段和/或存储在个人数据的节点。这些文件段被称为。换句话说,数据的HDFS可以读取或写入的最小量被称为一个块。

HDFS的目标

  • 故障检测和恢复:由于HDFS包括大量的普通硬件,部件故障频繁。因此HDFS应该具有快速和自动故障检测和恢复机制。
  • 巨大的数据集:HDFS有数百个集群节点来管理其庞大的数据集的应用程序。
  • 数据硬件:请求的任务,当计算发生不久的数据可以高效地完成。涉及巨大的数据集特别是它减少了网络通信量,并增加了吞吐量。

Hadoop HDFS入门

HDFS集群主要由 NameNode 管理文件系统 Metadata 和 DataNodes 存储的实际数据。

  • NameNode: NameNode可以被认为是系统的主站。它维护所有系统中存在的文件和目录的文件系统树和元数据。两个文件:“命名空间映像“和”编辑日志“是用来存储元数据信息。Namenode 有所有包含数据块为一个给定的文件中的数据节点的知识,但是不存储块的位置持续。从数据节点在系统每次启动时信息重构一次。
  • DataNode : DataNodes作为从机,每台机器位于一个集群中,并提供实际的存储. 它负责为客户读写请求服务。

HDFS读操作

cae7454447bfe5e265d456d6cc96e5ef.png

HDFS写操作

b3801f95eb955d974fca8c0638559c77.png
使用命令行界面访问HDFS
  • 从本地文件系统复制文件到 HDFS: hdfs dfs -copyFromLocal temp.txt /
  • 列出一个目录下存在的文件 -ls: hdfs dfs -ls /
  • 从 HDFS 拷贝到本地文件系统: hdfs dfs -copyToLocal /temp.txt
  • 创建新的目录: hdfs dfs -mkdir /mydirectory

Hadoop HDFS操作

将Hadoop应用路径配置在.bashrc $HADOOP_HOME/bin/hadoop

hdfs文件列表:hadoop fs -ls <args>

将数据插入到HDFS:
  1. 创建目录:hadoop fs -mkdir /user/input
  2. 传输本地文件至Hadoop文件系统:hadoop fs -put /home/file.txt /user/input
  3. ls命令验证文件:hadoop fs -ls /user/input
从HDFS中检索数据
  1. cat命令来查看HDFS数据:hadoop fs -cat /user/output/outfile
  2. 从HDFS得到文件使用get命令在本地文件系统:hadoop fs -get /user/output/ /home/hadoop_tp/

Hadoop fs命令参考

查看Hadoop命令:hadoop fs -help

02148d22eceb03aa6b31cb1bbf14bb75.png

daf97a2dbafe8a65655415ba467642a6.png

a345d30e93ffa5cc0f16658ad742a3ea.png

Hadoop MapReduce

e1fe9a4236dffb67441e3d4fed016b80.png

MapReduce简介

MapReduce是基于Java的分布式计算,包含了两项重要任务,即Map 和 Reduce。Map采用了一组数据,并将其转换成另一组数据,其中,各个元件被分解成元组(键/值对)。其次,减少任务,这需要从Map 作为输入并组合那些数据元组成的一组小的元组输出。
MapReduce主要优点是,它很容易大规模数据处理在多个计算节点。MapReduce模型中,数据处理的原语被称为映射器减速器。但是编写MapReduce形式的应用,扩展应用程序运行在几百,几千,甚至几万机集群中的仅仅是一个配置的更改。

算法

MapReduce计划分三个阶段执行,即映射阶段,shuffle阶段,并减少阶段:

  1. 映射阶段:映射或映射器的工作是处理输入数据。一般输入数据是在文件或目录的形式,并且被存储在Hadoop的文件系统(HDFS)。输入文件被传递到由线映射器功能线路。映射器处理该数据,并创建数据的若干小块。
  2. 减少阶段:这个阶段是:Shuffle阶段和Reduce阶段的组合。减速器的工作是处理该来自映射器中的数据。处理之后,它产生一组新的输出,这将被存储在HDFS。
  • 在一个MapReduce工作,Hadoop的发送Map和Reduce任务到集群的相应服务器。
  • 框架管理数据传递例如发出任务的所有节点之间的集群周围的详细信息,验证任务完成,和复制数据。
  • 大部分的计算发生在与在本地磁盘上,可以减少网络通信量数据的节点。
  • 给定的任务完成后,将群集收集并减少了数据,以形成一个合适的结果,并且将其发送回Hadoop服务器。
1eb00bebcbf022bceb570b5abcd58495.jpeg

术语:

  • PayLoad - 应用程序实现映射和减少功能,形成工作的核心
  • Mapper - 映射器的输入键/值对映射到一组中间键/值对
  • NamedNode - 节点管理Hadoop分布式文件系统(HDFS)
  • DataNode - 节点数据呈现在任何处理发生之前。
  • MasterNode - 节点所在JobTracker运行并接受来自客户端作业请求。
  • SlaveNode - 节点所在Map和Reduce程序运行。
  • JobTracker - 调度作业并跟踪作业分配给任务跟踪器。
  • Task Tracker - 跟踪任务和报告状态的JobTracker。
  • Job -程序在整个数据集映射器和减速的执行。
  • Task - 一个映射程序的执行或对数据的一个片段的减速器。
  • Task Attempt - 一种尝试的特定实例在SlaveNode执行任务。
880897b4d04086e0db68dea8359dc8c7.png

Hadoop Streaming

eb007a9894797479e872a968e525fa42.png

Hadoop数据流是Hadoop自带发行的实用程序。该程序允许创建和运行Map/Reduce任务的任何可执行文件或脚本映射器和/或减速器。
任何工作在Hadoop中必须有两个阶段:映射器减速器
映射阶段代码 mapper.py

!/usr/bin/python
import sys
# Input takes from standard input
# Remove whitespace either side
# Break the line into words
# Iterate the words list
# Write the results to standard output

for myline in sys.stdin:
myline = myline.strip()
words = myline.split()
for myword in words:
print '%s\t%s' % (myword, 1)

减速器阶段代码 reducer.py

#!/usr/bin/python
# Input takes from standard input
# Remove whitespace either side
# Split the input we got from mapper.py word
# Convert count variable to integer
# Count was not a number, so silently ignore this line continue
# Write result to standard output
# Do not forget to output the last word if needed!
from operator import itemgetter
import sys
current_word = ""
current_count = 0
word = ""
for myline in sys.stdin:
myline = myline.strip()
count = myline.split('\t', 1)
try:
count = int(count)
except ValueError:
if current_word == word:
current_count += count
else:
if current_word:
print '%s\t%s' % (current_word, current_count)
current_count = count
current_word = word
if current_word == word:
print '%s\t%s' % (current_word, current_count)

wordCount程序的执行

$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar \
-input input_dirs \
-output output_dir \
-mapper <path/mapper.py \
-reducer <path/reducer.py

数据流工作原理

当指定映射器的脚本,每个映射任务将启动脚本作为一个单独的进程时映射器初始化。作为mapper任务运行时,输入转换成行给进程的标准输入(STDIN)。在此期间,映射器收集从该方法的标准输出(stdout)面向行输出和每一行转换为键/值对,其被收集作为映射器的输出。缺省情况下,一行到第一个制表符的前缀是键和行(不包括制表符)的其余部分为值。如果在该行没有任何制表符,则整行键和值被视为null。然而,这可以被定制,每次需要1个。
当指定减速器脚本,每个减速器任务将启动脚本作为一个单独的进程,然后减速初始化。减速器任务运行时将其转换其输入键/值对,进入行并将该行进程的标准输入(STDIN)。在此期间,在减速机收集来自该过程的标准输出(stdout)的面向行的输出,每行转换成一个密钥/值对,其被收集作为减速机的输出。缺省情况下,一行到第一个制表符的前缀是键,(不包括制表符)的其余部分的值为行。然而,这可以被定制为每次具体要求。

06438f538e3d560eed19e525f9674d84.png

Hadoop多节点集群

Hadoop 生态系统组件

0f4a11c57b17f6395df1f323fdaa8e61.png

Sqoop连接器:外部存储系统之间的数据传输

0f08c55ca876f254561dfd92ab467b71.png

Flume 用于移动大规模批量流数据到 HDFS 系统

6370193749b13377c06c4739b184a041.png


41109bd9bdb4a011801ade1a2d9e1a0f.jpeg

Hive:基于Hadoop的Map-Reduce 框架之上的数据仓库解决方案

cc84411feaeca66cafd221b476406105.jpeg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK