hadoop处理大数据处理

2016-08-22 21:51:54 hijack00 阅读数 5214


基于Hadoop的大数据处理系统

By bigben@seu.edu.cn
2015/11/10

0. 前言

伴随Internet和Web技术的飞速发展,网络日志、互联网搜索索引、电子商务、社交网站等技术的广泛使用带来了数据量的急剧增长。计算机技术在各行各业的普遍使用也促使大量数据的产生,如物联网中的传感器所产生的海量数据。近几年数据以惊人的速度增长,这预示我们己经进入大数据时代。大数据时代给我们带来的不仅是数据量的爆炸式增长、数据结构的复杂多样,而且也使处理这些数据信息的手段变的复杂起来。海量数据的存储以及分布式计算是大数据分析与处理的首要问题。

目前大数据的处理平台以Hadoop为主,Hadoop是一个开源的可运行于大规模集群上的分布式文件系统和和分布式计算的基础框架,提供了对于海量数据存储以及分布式计算的支持。Hadoop擅长于在廉价机器搭建的集群上进行海量数据(结构化与非结构化)的存储与离线处理,目前能够让数千台普通、廉价的服务器组成一个稳定的、强大的集群,使其能够对PB级别的大数据进行存储、计算。此外,Hadoop已经具有了强大稳定的生态系统,有很多延伸产品,如Hive,HBase,Sqoop,ZooKeeper等等。Hadoop的这些优势,使其成为大数据处理的首选平台和开发标准。我们目前进行的大数据学习研究也是基于Hadoop平台展开。

本报告主要包括以下几方面主题:

  1. 分布式计算架构及分布式计算原理概述
  2. Hadoop架构及集群方式介绍
  3. 基于Hadoop完全分布式集群进行演示

1. 架构介绍

大数据处理平台依赖于分布式存储和分布式计算。本节主要包括以下几个要点:

1.1 分布式系统架构

分布式数据处理系统主要处理以下两方面的问题:

  1. 存储 分布式存储系统,解决海量数据的存储及管理。典型的分布式存储系统有NFS,AFS,GFS,HDFS等等。
  2. 计算 分布式计算系统,主要处理计算资源的调度,任务监控,系统容错,节点间协调等问题。比较典型的是MapReduce架构。

1.2. Hadoop系统架构

Hadoop DFS

Hadoop分布式文件系统,简称HDFS,是一个分布式文件系统。它是谷歌GFS的开源实现。具有较高的容错性,而且提供了高吞吐量的数据访问,非常适合大规模数据集上的应用,是一个高度容错性和高吞吐量的海量数据存储解决方案。

Hadoop MapReduce

MapReduce的名字源于这个模型中的两项核心操作:MapReduce。这是函数式编程(Functional Programming)中的两个核心概念。

MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。如同Java程序员可以不考虑内存泄露一样,MapReduce的runtime系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统资源。这样的优势使得Hadoop在众多分布式存储和计算技术中脱颖而出,成为大数据分析与处理的标准平台。

2. 集群方式

Hadoop有三种集群方式可以选择:

  • Local (Standalone) Mode
  • Pseudo-Distributed Mode
  • Fully-Distributed Mode

以下分别予以介绍。

Local (Standalone) Mode

Local (Standalone) Mode即单机模式,是一种无集群模式,比较简单。一般成功安装Hadoop并配置相关环境变量(主要是JAVA_HOME和HADOOP_HOME)后即可进入该模式,而无需额外配置。该模式并没有充分发挥分布式计算的优势,因为集群中只有一台主机,但是该模式下可以测试Hadoop及相关环境变量是否配置正常。

Pseudo-Distributed Mode

Pseudo-Distributed Mode即伪分布模式,它是单机集群模式。Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点既作为NameNode也作为DataNode。伪分布式模式配置也很简单,只需在单机模式基础上配置core-site.xml,hdfs-site.xml,mapred-site.xml和yarn-site.xml这4个文件(对应的默认参数在core-default.xml,hdfs-default.xml,mapred-default.xml和yarn-default.xml文件中)即可。这4个文件的最小配置和详细配置可以参照相关教程或者Hadoop官方文档。

Fully-Distributed Mode

Fully-Distributed Mode(完全分布模式)是一种多机集群模式。它不是用Java进程来模拟分布式计算中的各种角色,而是用真实的主机来充当分布式计算中NameNode,DataNode,SecondaryNameNode,ResouceManager,NodeManager等角色。这种模式的集群能够完全体现分布式计算系统的工作原理。也是本次演示所采用的集群模式。
从完全分布式的概念可知,配置这种模式至少需要3台主机。因为从分布式计算的逻辑上看,master是调度者的角色,而slave是执行者的角色,所以slave至少为2才能体现分布式计算的概念。
关于分布式系统中NameNode,DataNode,SecondaryNameNode,ResouceManager,NodeManager等角色的描述及相互之间的通信在网上有很多精彩的博客,此处不再赘述。

3. 系统部署

系统部署在实验室服务器(Windows Server 2008 R2 Enterprise)上,利用VMware Workstation软件创建多台虚拟机,模拟真实物理机群,搭建了一个完全分布式的Hadoop分布式计算环境。

3.1 硬件环境

集群共包括6台主机,每台主机4G内存,4x4核,拥有20GB SCSI硬盘。集群中主机名和IP地址配置及主机在集群中的角色如下表所示:


Table 1. Cluster Host Configuration

Index Host IP Role
1 SprakMaster 192.168.174.20 NameNode,ResourceManager
2 SprakSlave1 192.168.174.21 SecondaryNameNode,DataNode,NodeManager
3 SprakSlave2 192.168.174.22 DataNode,NodeManager
4 SprakSlave3 192.168.174.23 DataNode,NodeManager
5 SprakSlave4 192.168.174.24 DataNode,NodeManager
6 SprakSlave5 192.168.174.25 DataNode,NodeManager

注:在Hadoop应用中,还存在一种角色:Client,即负责提交计算任务(Job)的用户。在本系统中,集群中任何一个节点均能成为client提交Job。

3.2 软件环境

  • 操作系统版本: CentOS-6.0-x86_64
  • Hadoop: 2.7.1
  • Java: jdk 1.7.0_79

4. 演示实例

本节给出5个实例,用于演示基于Hadoop完全分布式集群进行MapReduce计算原理。

4.1 QuasiMonteCarlo

在Hadoop软件文档hadoop-mapreduce-examples-2.7.1.jar中提供了许多利用Hadoop进行MapReduce开发的demo,例如wordcount,pi等。我们选择其中最简单的pi来测试我们刚刚搭建起来的集群。
此处不选择经典的wordcount进行测试是因为pi这个demo更加简单,用户不需要指定输入文件路径和输出文件路径,程序中会生成数据作为mapper的输入。

首先简单介绍一下pi的工作原理,它是利用Monte Carlo方法估计圆周率π值,类似“布丰投针”实验,都是根据大数定律的思想用频率逼近概率。阅读pi的源代码可以知道,程序通过产生随机数来模拟从一个边长为1的正方形中随机取点的过程,可知该点落在其内接圆内的概率为π4,从而可以根据落在内接圆内的点的频率来估计概率,进而求出π值。

在命令行输入:

cd $HADOOP_HOME
hadoop jar \
  share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar \
  pi 100 20000

第一个参数100指定生成的mapper的个数,第二个参数指定在每个mapper中要产生20000样本点(根据大数定律,样本点的个数足够大时样本均值才能逼近总体均值)。

程序运行结果如下:
pi

计算用时94.319s,得到π的估计值为3.1415。通过增大第2个参数,可以得到更高的估计精度。

4.2 Streaming

第2个实例也选自Hadoop官方文档。

以下是关于Hadoop Streaming机制的一些介绍。
Hadoop是基于Java开发的,而Streaming是Hadoo提供的一个能够利用其他编程语言来进行MapReduce开发的API。Hadoop Streaming并不复杂,其只是利用了Unix的标准输入输出作为Hadoop和其他编程语言的开发接口,因而在其他编程语言所写的map和reduce过程中,只必需将标准输入作为map和reduce过程的输入,将标准输出作为map和reduce过程的输出即可。在标准输入输出中,key和value是以tab作为分隔符,并且在reduce的标准输入中,Hadoop框架保证了输入的数据是按key排序的。

利用Streaming机制,用户可以使用Shell命令行,C语言程序,Python脚本,Perl脚本等来编写map程序和reduce程序(官网给出了具体实例),这样极大增强了MapReduce开发的灵活性。

在命令行输入以下命令:

hadoop fs -mkdir myInputDirs
hadoop fs -mkdir myOutputDirs
hadoop fs -put xxxx myInputDirs/xxxx
hadoop jar hadoop-streaming-2.7.1.jar \
  -input myInputDirs \
  -output myOutputDir \
  -mapper /bin/cat \
  -reducer /usr/bin/wc

这个例子是通过*nix系统下的wc对文本文件中的字符和单词进行统计。其中mapper采用cat程序,只是将输入内容原封不动的输出给reducer;reducer为wc程序,完成实际的字符和单词统计工作。

以下是官网给出的利用Python脚本进行Streaming的一个实例:

hadoop jar hadoop-streaming-2.7.1.jar \
  -input myInputDirs \
  -output myOutputDir \
  -mapper myPythonScript.py \
  -reducer /usr/bin/wc \
  -file myPythonScript.py

此外,Hadoop中还提供了Pipes机制。Hadoop Pipes是Hadoop MapReduce的C++接口。与利用标准输入输出的Hadoop Streaming不同(当然Streaming也能够用于C++),Hadoop Pipes以Hadoop IPC通信时利用的socket作为管道,而不是标准输入输出。与Java的接口不一样,Hadoop Pipes的key和value都是基于STL的string,因而在处理时开发人员必需手动地进行数据类型的转换。

4.3 ABCEntropy

这个实例是我在学习MapReduce编程时模仿WordCount编写的一个简单MapReduce程序,主要是将WordCount中统计单词改为了统计英文字符。最后根据统计结果计算英文文本的熵。采用的英文语料为网上下载的英文文学名著的txt文本,经过初步预处理(如剔除空行等等)后上传到HDFS,其大小达到227MB。

english literature

abcentropy.sh代码如下:

#! /bin/bash

INPUT_DIR=datasets/englishliterature
OUTPUT_DIR=abcentropy/output
TESTDATA=$INPUT_DIR/englishliterature.data

echo "preprocessing text material in englishliterature "
cat englishliterature/* | sed '/^\s*$/d'  > $INPUT_DIR/englishliterature.data

# echo "preprocessing completed successfully !"
# ls -hl $INPUT_DIR/englishliterature.data

hadoop fs -rm -r $INPUT_DIR
hadoop fs -mkdir -p $INPUT_DIR
echo "uploading data to $INPUT_DIR ..."
hadoop fs -put -f $TESTDATA $TESTDATA

echo "execute ABCEntropy on the cluster ..."
hadoop jar abc.jar bigben.demo.ABCEntropy $INPUT_DIR $OUTPUT_DIR -ow

echo "Finished!"

计算结果如下图所示:


abcentropy

由图可知:计算出英文字母的熵为4.17 bit。在网上查到的数据为4.03 bit。若假设英文26个字母完全等概,则英文文本的熵为log2(26)=4.70 bit(实际英文文本的熵小于这个值)。从而说明计算得到的结果还是有一定可信度的。

4.4 Iris

iris为UCI(University of California Irvine)机器学习数据库中下载的鸢尾花数据集。
iris以鸢尾花的特征作为数据来源,常用在分类操作中,是进行分类算法性能分析的著名的benchmark。该数据集由3种不同类型的鸢尾花(Setosa(山鸢尾),Versicolour(杂色鸢尾)以及Virginica(维吉尼亚鸢尾))的150个样本数据构成。每个样本数据包含4个属性,分别是:

  • Sepal Length(花萼长度),单位是cm
  • Sepal Width(花萼宽度),单位是cm
  • Petal Length(花瓣长度),单位是cm
  • Petal Width(花瓣宽度),单位是cm

前段时间看到有些论文上用UCI数据集(iris,wine)来做聚类测试。故本例也尝试对iris数据集进行聚类,聚类结果在Matlab中用平行坐标法进行可视化。聚类采用两种方法,一种是利用Matlab自带的kmeans函数,一种是利用Mahout提供的k-means算法。最后对比二者的性能。

为了利用Mahout进行Kmeans聚类,需要将数据转换为Mahout能够处理的SequenceFile格式。首先将利用shell脚本将数据导出为空格分隔的文本文件,再利用Mahout中提供的org.apache.mahout.clustering.conversion.InputDriver将文本格式转换为SequenceFile,最后输入Mahout的k-means算法进行k-means聚类并分析结果。由于Mahout的k-means聚类输出结果不直观,为了便于在Matlab中画图,还需编写脚本对输出结果进行转换。

设置聚类算法生成3个簇,最大迭代次数maxIter为10,距离测度distanceMeasure采用默认的平方欧氏距离。

以下是部分代码

iris.sh代码如下:

#! /bin/bash

PROJECT=iris
PROJECT_DIR=/demo/iris/
TESTDATA=data/iris_clusterdata.dat
numClusters=3
maxIter=10

hdfs dfs -rm -r $PROJECT_DIR
hdfs dfs -mkdir -p $PROJECT_DIR/data
hdfs dfs -put -f $TESTDATA $PROJECT_DIR/data

# convert text-foramtted points data into sequence file
mahout text2cluster -i $PROJECT_DIR/data -o $PROJECT_DIR/vectors

# k-means clustering
mahout kmeans -i $PROJECT_DIR/vectors -o $PROJECT_DIR/kmeans/clusters \
    -c $PROJECT_DIR/kmeans/initial_cluster -k $numClusters -x $maxIter -cl

# read centroids
mahout clusterdump -i $PROJECT_DIR/kmeans/clusters/clusters-*-final \
    -o ./${PROJECT}_centroids.txt

# read clustered points
mahout seqdumper -i $PROJECT_DIR/kmeans/clusters/clusteredPoints/part-m-00000 \
    -o ./${PROJECT}_points.txt

# generate mapping using a dictionary.
cat ${PROJECT}_points.txt | grep 'Key:' | cut -d ':' -f 2,7 > ${PROJECT}_membership.txt
./kmeans_mapping.py $TESTDATA ${PROJECT}_membership.txt | sort -t '|' -k 1n > ${PROJECT}.map

# plot using Matlab
cut -d '|' -f 2 ${PROJECT}.map > ${PROJECT}_plot.dat

# iris_visualizer.m $TESTDATA ${PROJECT}_plot.dat

echo "Finished"

kmeans_mapping.py代码如下:

#! /usr/bin/python
import sys

if __name__ == '__main__':
    point_map = dict();
    cluster_map = dict();

    if (len(sys.argv) < 2):
        print('usage: kmeans_mapping.py <point> <membership>')
        sys.exit(-1)

    file_0 = sys.argv[1]
    file_1 = sys.argv[2]

    point_index = 0;    
    fr = open(file_0, "r")              
    while (True):
        try:
            line = fr.readline().rstrip();
            if line == '': break;
            point_index += 1;
            point_map['['+line+']'] = point_index;
        except Exception,e:
            print(e)
            break;  
    fr.close()

    cluster_index = 0;
    fr = open(file_1, "r")  
    # print('pointid|clusterid')        
    while (True):
        try:
            line = fr.readline().strip();
            if line == '': break;
            [cluster, point] = line.split(':')              
            point = point.strip().replace(',', ' ');

            if not cluster_map.has_key(cluster):
                cluster_index += 1
                cluster_map[cluster] = cluster_index

            point_id = point_map[point]
            cluster_id = cluster_map[cluster]   
            print('%s|%s' %(point_id, cluster_id))          
        except Exception,e:
            print(e)
            break;      
    fr.close();

由于iris数据集属性有4维,不便于采用普通的二维图形来进行可视化,故采用平行坐标法进行展示。结果如下图所示:


kmeans_iris
图1. Iris聚类结果

4.5 JAFFE

本例主要利用Mahout的k-means聚类算法对JAFFE的人脸图片进行聚类,并与Matlab下的k-means聚类结果进行对比。

JAFFE(JApanese Female Facial Expression)是日本女性脸部表情图片库,该数据库是由10个人的7种正面表情组成的213幅灰度图像,图像是以大小为256x256的8位灰度级存储的,格式为.tiff型,平均每个人每种表情有2到4张,包含HAP,SAD,SUR,ANG,DIS,FEA等表情。该数据库可以从此处获取。

图片数据首先在Matlab中进行向量化,将64x64的矩阵转换为列向量,从而可以利用k-means算法进行聚类。再将数据导出为空格分隔的文本文件,并利用Mahout中提供的org.apache.mahout.clustering.conversion.InputDriver将文本格式转换为SequenceFile,最后输入Mahout的k-means算法进行k-means聚类得到结果(设置聚类cluster个数为10,最大迭代次数maxIter为20,距离测度distanceMeasure采用默认的平方欧氏距离)。

Matlab中对JAFFE人脸聚类结果如下图所示:


kmeans_jaffe
图2. Matlab实现JAFFE人脸聚类

jaffe.sh的内容与iris.sh基本相同,差别仅仅在于变量的定义:

#! /bin/bash

PROJECT=jaffe
PROJECT_DIR=/demo/jaffe/
TESTDATA=./jaffe_clusterdata64x64.dat
numClusters=10
maxIter=20

5. 总结

本文首先对分布式计算架构及分布式计算原理进行了概述,之后对Hadoop架构及Hadoop集群方式进行了简单介绍。最后,基于搭建的Hadoop完全分布式集群给出了5个实例,演示了Hadoop集群工作原理以及MapReduce开发流程。

关于Hadoop架构及其运行维护是一个博大精深的话题,不可能在一篇报告中详细阐述。关于这些主题的更精彩的阐释可参阅相关论文或博客。

2016-11-07 13:45:46 nuisthou 阅读数 2402

关于hadoop处理气象数据,这里给出几篇比较好的文章:

http://www.cnblogs.com/shishanyuan/archive/2014/12/22/4177908.html;

http://blog.163.com/lzm07@126/blog/static/25705468201331702456829/;

2014-03-24 01:14:19 hardworkba 阅读数 11348


深入浅出Hadoop: 高效处理大数据

2011年10月21日15:11 it168网站原创 作者:DoubleLife 编辑:皮丽华 我要评论(0)

    【IT168 专稿】Hadoop与Google一样,都是小孩命名的,是一个虚构的名字,没有特别的含义。从计算机专业的角度看,Hadoop是一个分布式系统基础架构,由Apache基金会开发。Hadoop的主要目标是对分布式环境下的“大数据”以一种可靠、高效、可伸缩的方式处理。设想一个场景,假如您需要grep一个100TB的大数据文件,按照传统的方式,会花费很长时间,而这正是Hadoop所需要考虑的效率问题。

  关于Hadoop的结构,有各种不同的说法。我们这里简单的理解为Hadoop主要由三部分组成:HDFS(Hadoop Distributed File System),MapReduce与Hbase。

  1.Hadoop组件之一:HDFS分布式文件系统具有哪些优点?

  HDFS作为一种分布式文件系统,它和现有的分布式文件系统有很多共同点。比如,Hadoop文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。对于Client端而言,HDFS就像一个传统的分级文件系统,可以创建、删除、移动或重命名文件等等。与此同时,HDFS与其他的分布式文件系统的区别也是显而易见的。

  首先,HDFS设计目标之一是适合运行在通用硬件(commodity hardware)上的分布式文件系统。HDFS假设的硬件错误不是异常,而是常态。因为HDFS面向的是成百上千的服务器集群,每台服务器上存储着文件系统的部分数据,并且这些机器的价格都很低廉。这就意味着总是有一部分硬件因各种原因而无法工作。因此,错误检测和快速、自动的恢复是HDFS最核心的架构目标。从这个角度说,HDFS具有高度的容错性。

  第二,HDFS的另一个设计目标是支持大文件存储。与普通的应用不同,HDFS应用具有很大的数据集,一个典型HDFS文件大小一般都在G字节至T字节。这就意味着HDFS应该能提供比较高的数据传输带宽与数据访问吞吐量。相应的,HDFS开放了一些POSIX的必须接口,容许流式访问文件系统的数据。

  第三,HDFS还要解决的一个问题是高数据吞吐量。HDFS采用的是“一次性写,多次读”这种简单的数据一致性模型。换句话说,文件一旦建立后写入,就不需要再更改了。网络爬虫程序就很适合使用这样的模型。

  第四,移动计算环境比移动数据划算。HDFS提供了API,以便把计算环境移动到数据存储的地方,而不是把数据传输到计算环境运行的地方。这对于数据大文件尤其适用,可以有效减少网络的拥塞、提高系统的吞吐量。

  HDFS的体系结构与工作流程

  下面简单看一下HDFS的结构。图1所示为HDFS的体系结构图。HDFS采用的是Master/Slave架构。

  NameNode节点作为Master服务器,有三部分功能。第一:处理来自客户端的文件访问。第二:管理文件系统的命名空间操作,如'打开'、'关闭'、'重命名'等。第三:负责数据块到数据节点之间的映射。从这个意义上说,它扮演中心服务器的角色。

  DataNode节点作为Slave服务器,同样有三部分功能。第一:管理挂载在节点上的存储设备。第二:响应客户端的读写请求。第三:从内部看,每个文件被分成一个或多个数据块,被存放到一组DataNode,在Namenode的统一调度下进行数据块的创建、删除和复制。

IT168:深入浅出Hadoop

  图1 HDFS体系结构图

  HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。相应地,GNU/Linux操作系统支持Namenode与Datanode。一个典型的部署场景是,一台GNU/Linux操作系统上运行一个Namenode实例,作为Master中心服务器。而集群中的其它GNU/Linux操作系统分别运行一个Datanode实例,作为Slave服务器集群。


        2.Hadoop组件之二:什么是MapReduce编程模型, MapReduce的工作流程是什么?

  MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。MapReduce的设计目标是方便编程人员在不熟悉分布式并行编程的情况下,将自己的程序运行在分布式系统上。

  MapReduce的命名规则由两个术语组成,分别是Map(映射)与Reduce(化简)。这些术语来自于列表处理语言,如:LISP,Scheme,或ML。从概念上来讲,MapReduce将输入元素列表(Input List)转换成输出元素列表(Output List),按照Map与Reduce规则各一次。

  从MapReduce框架的实现角度看,MapReduce程序有着两个组件:一个实现了 Mapper,另一个实现了Reducer。

  第一次叫Mapping,如图2所示。MapReduce将Input List作为Mapping函数的输入参数,经过处理,把结果返回给Output List。举例来说,有一个函数toUpper(str),用来返回输入字符串的大写版本。那么这里的Input List指的是转换前的常规字符串列表,Mapping Function指的是toUpper函数,而Output List指的是转换后的大写字符串列表。值得注意的是,在这里Mapping并没有改变输入字符串列表,而是返回一个新的字符串列表。

IT168:深入浅出Hadoop

  图2 Map函数处理

  第二次叫Reducing,如图3所示。MapReduce将Input List作为Reducing函数的输入参数,经过迭代处理,把这些数据汇集,返回一个输出值给Output Value。从这个意义上来说,Reducing一般用来生成”总结“数据,把大规模的数据转变成更小的总结数据。例如,"+"可以用来作一个reducing函数,去返回输入数据列表的值的总和。

IT168:深入浅出Hadoop

  图3 Reduce函数处理

  从工作流程来讲,MapReduce对应的作业Job首先把输入的数据集切分为若干独立的数据块,并由Map组件以Task的方式并行处理。处理结果经过排序后,依次输入给Reduce组件,并且以Task的形式并行处理。MapReduce对应的输入输出数据由HDFS的DataNode存储。MapReduce对应的Job部署在Master服务器,由Master JobTracker负责Task的调度,监控,重新执行失败的任务等等。MapReduce对应的Job部署在若干不同的Slave服务器,每个集群节点含一个slave TaskTracker,负责执行由master指派的任务。

  Hadoop框架由Java实现的,它提供了两种主要工具。Hadoop Streaming是一种运行作业的实用工具,它允许用户创建和运行任何可执行程序(例如:Shell工具)来做为mapper和reducer。Hadoop Pipes是一个与SWIG兼容的C++ API (没有基于JNITM技术),它也可用于实现Map/Reduce应用程序。这样,开发人员就可以利用MapReduce框架,开发分布式应用程序,运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。


       3.Hadoop组件之三:什么是面向列开源分布式数据库Hbase?

  HBase是一个分布式的、面向列的开源数据库,由Apache基金会开发。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。它基于列的而不是基于行的模式。用户存储数据行在一个表里。一个数据行拥有一个可选择的键和任意数量的列。用户可根据键访问行,以及对于一系列的行进行扫描和过滤。HBase一个可以横向扩张的表存储系统,能够为大规模数据提供速度极快的低等级更新。主要用于需要随机访问,实时读写大数据(Big Data)。这正是信息系统所需要的功能。

  下面的例子演示的是将原来存放在MySQL中Blog中的数据迁移到HBase中的过程:

  图4为MySQL中现有的表结构:表Blogtable表示博客本身,包括5个字段,BlogId为每位用户对应的博客ID号,类型为Int,作为主键字段;Author为该用户的博客名称,类型为Varchar;Title为该用户的博客签名,类型为Varchar;URL为博客网址链接,类型为Varchar;Text为博客的内容,类型为Varchar。Comment表示博客评论,包括5个字段。ID为发表评论的用户ID,类型为Int,作为主键字段;BlogId为博客的原文ID,类型为Varchar。其中,BlogId作为Comment表的外键,指向表Blogtable的主键。Title为评论标题,类型为Varchar;Author为发表该评论的用户名称,类型为Varchar;Text字段为评论内容,类型为Varchar。

IT168:深入浅出Hadoop

  图4 MySQL表结构

  图5 为迁移HBase中的表结构:HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family)。表Blogtable表示博客本身。ID为Row Key,即Table的主键,用来检索记录。Table在水平方向有一个或者多个Column Family组成。表BlogTable包含5个Column Family, Info的数据结构分为Info:Author,Info:Title,Info:URL。如果想添加其它属性X,则对应的结构为Info:X。需要说明的是,Column Family支持动态扩展,无需预先定义Column的数量以及类型,但是,所有Column均以二进制格式存储,用户需要自行进行类型转换。

IT168:深入浅出Hadoop

  图5 HBase表结构

  总之,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。简单的理解,Hbase介于nosql和RDBMS之间。Hbase仅能通过主键(row key)和主键的range来检索数据,不支持条件查询以及排序等,仅支持单行事务。Habase主要用来存储非结构化和半结构化的松散数据。针对Hbase的不足,Hadoop的一个数据仓库工具Hive对此做出了弥补。Hive可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,并将SQL语句转换为MapReduce任务运行。针对Hbase单行事务的限制,Hive也提供了扩展。据说,Facebook之所以选择了Hbase,是因为他们HBase适用于处理以下两种类型的数据模式:1.一小组经常变化的临时数据;2.一组不断增加但很少访问的数据。

  


      Hadoop为企业来带了什么?

  如今,“大数据”这一术语在IT经理人中变得越来越流行。美国国家海洋与大气管理局NOAA利用“大数据”进行气象、生态系统、天气和商务研究。《纽约时报》使用“大数据”工具进行文本分析和Web信息挖掘。迪斯尼则利用它们关联和了解跨不同商店、主题公园和Web鎼滅储资产的客户行为。

  “大数据”不仅适用于大型企业,而是适用于各种不同规模的企业。例如,通过评估某位客户在网站上的行为,来更好地了解他们需要什么支持或寻找什么产品,或者弄清当前天气和其他条件对于送货路线和时间安排的影响。

  面对“大数据”,Hadoop为揭示深奥的企业与外部数据的关键内幕提供了基础。从技术上看,Hadoop分布式文件系统(HDFS)保证了大数据的可靠存储,而另一Hadoop核心组件MapReduce则提供高性能并行数据处理服务。这两项服务提供了一个使对结构化和复杂“大数据”的快速、可靠分析变为现实的基础。

  Hadoop已经迅速成长为首选的、适用于非结构化数据的大数据分析解决方案。基于Hadoop、利用商品化硬件对海量的结构化和非结构化数据进行批处理,给数据分析领域带来了深刻的变化。通过挖掘机器产生的非结构化数据中蕴藏的知识,企业可以做出更好的决策,促进收入增长,改善服务,降低成本。

  Google与Hadoop有着千丝万缕的联系。如前所述,Hadoop主要是由HDFS、MapReduce和Hbase组成。而HDFS是Google File System(GFS)的开源实现,MapReduce是Google MapReduce的开源实现,HBase是Google BigTable的开源实现。Hadoop分布式框架很有创造性,而且有极大的扩展性,使得Google在系统吞吐量上有很大的竞争力。因此Apache基金会用Java实现了一个开源版本,支持Fedora、Ubuntu等Linux平台。

  考虑到Hadoop在应对大规模非结构型数据中所起到的重要作用,微软也不得不放下架子,近日宣布开发一个兼容Windows Server与Windows Azure平台的Hadoop开源版本。

  IBM宣布在Hadoop上建立新的存储架构,作为群集运行DB2或Oracle数据库,目的是让应用程序,支持高性能分析,数据仓库应用程序和云计算的目的。

  EMC也推出了世界上第一个定制的、高性能的Hadoop专用数据协同处理设备——Greenplum HD数据计算设备,为客户提供了最强大、最高效率的方法,充分挖掘大数据的价值。

  互联网搜索巨头百度也在考虑使用Hadoop。不过,出于性能与安全的考虑,百度在采用Hadoop架构的时候,将Hadoop计算层进行了重新编写。

  总结:

  Hadoop作为一种分布式基础架构,可以使用户在不了解分布式底层细节的情况下,开发分布式程序。

  关于Hadoop的价值,思科的James Urquhart指出:“Hadoop可以说是不涉及任何现有专利的开源项目在企业软件方面所取得的首个里程碑式成功。”在业界,Hadoop也赢得“庞大数据问题的通用解决方案”的头衔。我们不得不说,Hadoop前途不可估量。

  参考资料:

  http://baike.baidu.com/view/908354.htm

  http://subject.csdn.net/hadoop/

  http://hadoop.apache.org/common/docs/r0.19.2/cn/quickstart.html

2018-04-16 16:27:54 adnb34g 阅读数 4038

大数据可以说是从搜索引擎诞生之处就有了,我们熟悉的搜索引擎,如百度搜索引擎、360搜索引擎等可以说是大数据技处理技术的最早的也是比较基础的一种应用。大概在2015年大数据都还不是非常火爆,2015年可以说是大数据的一个分水岭。随着互联网技术的快速发展,大数据也随之迎来它的发展高峰期。

整个大数据处理技术的核心基础hadoopmapreducenosql系统,而这三个系统是建立在谷歌提出的大表、分布式文件系统和分布式计算的三大技术构架上,以此来解决海量数据处理的问题。虽然说大数据处理技术最早兴起于国外,但就当前大数据处理技术的应用还是我们国内做的要比较好。从近两年国家对大数据的扶持力度,我们可以很明显的感觉到大数据正在与我们的生活、工作深刻的结合。

大数据能够在国内得到快速发展,甚至是国家层面的支持,最为重要的一点就是我们纯国产大数据处理技术的突破以及跨越式发展。在互联网深刻改变我们的生活、工作方式的当下,数据就成为了最为重要的资料。尤其是数据安全问题就更为突出,前阶段的Facebook用户数据泄漏所引发产生的一系列问题,就充分的说明了数据安全问题的严重性。大数据发展的必然趋势就是将会深刻改变我们的工作和生活方式,无论是企业还是个人也都必然会成为其中的一个“数据”。选择什么样的大数据处理,不仅仅考虑是简单、易用,更重要的是能够确保数据的安全!

当前国内的hadoop大数据处理平台可以说是比较杂乱的,有国外的、有在国外版本基础上二次开发,却很少有做原生态开发的。而至于做原生态开发的,目前已知也就是大快搜索了。所以,个人一直很喜欢大快搜索产品手册封面上的一句话:让每个程序员都能开发大数据 底层技术从此触手可及!在这里我也是直接把大快搜索的手册封面图拿来了做了文章的封面。

大数据的应用开发一直是过于偏向底层,面临的问题就是学习难度大,所涉及的技术面也是非常广泛,这在很大程度上了制约了大数据的普及,这也是大部分大数据处理平台都面临的突出问题。大快搜索所推出的大数据一体化开发框架基本上是很好的解决了这样的问题。它把大数据开发中的一些通过的,重复使用的基础代码、算法封装为类库,降低了大数据的学习门槛,降低了开发难度,很好的提高了大数据项目的开发效率。大快的一体化开发框架由数据源与SQL引擎、数据采集(自定义爬虫)模块、数据处理模块、机器学习算法、自然语言处理模块、搜索引擎模块,六部分组成。采用类黑箱框架模式,用户直接调用大快的相关类即可完成,过去复杂的编码工作。


大快的大数据通用计算平台(DKHadoop),已经集成相同版本号的开发框架的全部组件。关于DKhadoop大数据处理平台的案例,其实感兴趣的可以去大快的网站上查询一下,里面有很多案例分享。个人所知的是DKhadoop的政务大数据处理解决方案非常好!大家也可以在大快网站上查询一下这方面的方案资料。

2014-04-08 13:48:25 u014490103 阅读数 1923

hadoop处理excel数据

阅读数 1092