Hadoop各组件详解

大数据之HDFS

1.HDFS产生背景

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盆中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

2.HDFS定义

HDFS,是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,机器中的服务器有各自的角色。
HDFS使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,不适合做网盘应用。
优点:
1.高容错性
2.适合处理大数据
3.可构建在廉价机器上,通过多副本机制,提高可靠性
缺点:
1.不适合低延时数据访问
2.无法高效的对大量小文件进行存储
3.不支持并发写入、文件随机修改
HDFS块的大小主要取决与磁盘的传输数率
常用命令:

启动hadoop命令:
#cd /usrlocal/hadoop
#./sbin/start-dfs.sh
[root@master ~]# hadoop fs -help
Usage: hadoop fs [generic options]
        [-appendToFile  ... ]
        [-cat [-ignoreCrc]  ...]
        [-checksum  ...]
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R]  PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-copyFromLocal [-f] [-p] [-l]  ... ]
        [-copyToLocal [-p] [-ignoreCrc] [-crc]  ... ]
        [-count [-q] [-h] [-v] [-t []] [-u]  ...]
        [-cp [-f] [-p | -p[topax]]  ... ]
        [-createSnapshot  []]
        [-deleteSnapshot  ]
        [-df [-h] [ ...]]
        [-du [-s] [-h]  ...]
        [-expunge]
        [-find  ...  ...]
        [-get [-p] [-ignoreCrc] [-crc]  ... ]
        [-getfacl [-R] ]
        [-getfattr [-R] {-n name | -d} [-e en] ]
        [-getmerge [-nl]  ]
        [-help [cmd ...]]
        [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [ ...]]
        [-mkdir [-p]  ...]
        [-moveFromLocal  ... ]
        [-moveToLocal  ]
        [-mv  ... ]
        [-put [-f] [-p] [-l]  ... ]
        [-renameSnapshot   ]
        [-rm [-f] [-r|-R] [-skipTrash] [-safely]  ...]
        [-rmdir [--ignore-fail-on-non-empty]  ...]
        [-setfacl [-R] [{-b|-k} {-m|-x } ]|[--set  ]]
        [-setfattr {-n name [-v value] | -x name} ]
        [-setrep [-R] [-w]   ...]
        [-stat [format]  ...]
        [-tail [-f] ]
        [-test -[defsz] ]
        [-text [-ignoreCrc]  ...]
        [-touchz  ...]
        [-truncate [-w]   ...]
        [-usage [cmd ...]]
Generic options supported are
-conf      specify an application configuration file
-D             use value for given property
-fs       specify a namenode
-jt     specify a ResourceManager
-files     specify comma separated files to be copied to the map reduce cluster
-libjars     specify comma separated jar files to include in the classpath.
-archives     specify comma separated archives to be unarchived on the compute machines.
The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]
-appendToFile [localsrc] [dst] 将本地文件localsrc追加到hdfs的dst文件中,如果dst文件不存在,则创建。
eg:hdfs dfs -appendToFile /home/t2.txt /user/hdfs/gpl/t2.txt
-cat [dst]显示文件内容
eg:hdfs dfs -cat /user/hdfs/gpl/t2.txt
-checksum [dst] 为匹配文件模式dst到stdou的文件转储校验和信息
eg:hdfs dfs -checksum /user/hdfs/gpl/t2.txt

-chgrp [-R] GROUP PATH 相当与-chown
eg:hdfs dfs -chgrp hdfs /user/hdfs/gpl/t2.txt

-chmod 更改文件的权限,与shell的chmod命令类似
eg:hdfs dfs -chmod 777 /user/hdfs/gpl/t2.txt
-chown 更改文件所属者
eg:hdfs dfs -chown hdfs /user/hdfs/gpl/tx.txt
-copyFromLocal [localsrc] [dst] 将本地文件上传到hdfs目录
eg:hdfs dfs -copyFromLocal /home/t2.txt /user/hdfs/gpl/
-copyToLocal [dst] [localsrc] 将hdfs文件下载到本地
eg:hadoop fs -copyToLocal /user/hdfs/data2/ip=10.69.2.3/logfile_localhost.lo
caldomain_1531106559.txt /home/
-count 查看目录下,子目录数[-q]、文件数[-h]、文件大小[-v]、文件名/目录名[dst]
eg: hdfs dfs -count /user/hdfs/gpl

-cp SRC [SRC …] DST 将文件从SRC复制到DST,如果指定了多个SRC,则DST必须为一个目录
eg: hdfs dfs -cp /user/hdfs/data2/ip=10.69.2.3/logfile_localhost.loc
aldomain_1531106600.txt /user/hdfs/gpl/
-createSnapshot [snapshotDir] [snapshotName] 在目录上创建快照
eg:hdfs dfs -createSnapshot /user/hdfs/gpl/ kz
.
-deleteSnapshot [snapshotDir][snapshotName] 在目录上删除快照
eg:hdfs dfs -deleteSnapshot /user/hdfs/gpl/kz
-df 显示文件系统的容量、空闲空间和使用空间
eg:hdfs dfs -df /user/hdfs/gpl

-du 显示该目录中每个文件或目录的大小
eg: hdfs dfs -du -s -h /user/hdfs

-expunge 清空回收站,文件被删除时,它首先会移到临时目录.Trash/中,当超过延迟时间之后,文件才会被永久删除
eg: hdfs dfs -expunge
-find 查找与指定表达式匹配的所有文件
eg:hdfs dfs -find /user/hdfs -name t2.txt
-get 将hdfs文件下载到本地与-copyToLocal 类似
eg:hadoop fs -get /user/hdfs/data2/ip=10.69.2.3/logfile_localhost.lo
caldomain_1531106559.txt /home/
-getfacl [-R] [path] 显示文件和目录的访问控制列表(acl)。如果一个
目录有一个默认的ACL,然后getfacl也显示默认的ACL。
eg:hdfs dfs -getfacl /user/hdfs

-getfattr 显示文件或的扩展属性名和值(如果有的话)
-getmerge [src] [localdst] 将hdfs的多个文件合并后下载到本地
eg:hsfs dfs -getmerge /user/hdfs/data2/ip=10.69.2.3/ /home/ip.txt
help 帮助命令,列出可操作命令
-ls 列出指定目录下的文件或目录
eg:hdfs dfs -ls /user/hdfs

-mkdir 创建目录
eg:hdfs dfs -mkdir /user/hdfs/test

-moveFromLocal [localsrc] … [dst] 本地文件系统复制文件到HDFS文件系统后删除本地文件
eg:hdfs dfs -moveFromLocal /home/md.txt /user/hdfs/gpl
-moveToLocal [src] [localdst] 未实现

-mv [src] [dst] 将匹配指定文件模式src的文件移动到目标dst,在移动多个文件时,目标必须是一个目录。
eg:hdfs dfs -mv /user/hdfs/gpl/mft5.txt /user/hdfs/gpl/mft.txt

-put [localsrc] [dst] 本地文件系统复制文件到HDFS文件系统与,与-copyFromLocal类似
-renameSnapshot [snapshotDir][oldName] [newName] 快照重命名
-rm 删除 ,与shell的rm命令类似
eg: hdfs dfs -rm -r /user/hdfs/gpl/mtf.txt
-rmdir [dir] 删除指定的dir目录项
eg: hdfs dfs -rmdir /user/hdfs/test
-setfacl 设置文件和目录的访问控制列表(acl)。
-setfattr 设置文件或目录的扩展属性名和值。
-setrep 设置文件的复制级别
-stat [format] path 以指定格式打印文件/目录的统计信息,其中,%b-块、%g-所属组 、%n-文件名、%o块大小、%u用户名
eg:hdfs dfs -stat [%b-%g-%n-%o-%r-%u-%y:%Y] /user/hdfs/gpl

-tail [-f] path Show the last 1KB of the file
eg:hdfs dfs -tail /user/hdfs/gpl/t2.txt

-test -[defsz] path 回答关于path的各种问题,结果通过退出状态。

-text 获取源文件并以文本格式输出该文件。允许的格式是zip和TextRecordInputStream和Avro。
-touchz path 在path处创建一个0长度的文件,当前时间作为时间戳
<路径>如果文件的长度不为零,则返回错误
eg:hdfs dfs -touchz /user/hdfs/gpl/1.txt
-usage 显示给定命令或所有命令的用法(如果没有指定任何命令)。与-help类似
eg:hdfs dfs -usage

大数据之MapReduce

MapReduce是Hadoop中的一种处理大规模数据的编程模型,得益于MapReduce的并行计算,可以高效的处理大规模数据(一般是HDFS中存储的数据)。

生成序列文件: # mahout seqdirectory

-i Sequence File文件目录
-o 向量文件输出目录
-wt 权重类型,支持TF或者TFIDF两种选项,默认TFIDF
-n 使用的正规化,使用浮点数或者"INF"表示,
-ow 指定该参数,将覆盖已有的输出目录
-seq 指定该参数,那么输出的向量是SequentialAccessVectors
-nv 指定该参数,那么输出的向量是NamedVectors

大数据之hbase

一、hbase的简介:

   HBase - Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
    HBase是Google BigTable的开源实现,类似Google BigTable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby作为协同服务,HBase利用Zookeeper作为对应。

优势:
1.写入性能高,且几乎可以无限扩展。
2.海量数据下(100TB级别表)的查询依然能保持在5ms级别。
3.存储容量大,不需要做分库分表。
4.表的列可以灵活配置,1行可以有多个非固定的列。
劣势:
1.并不能保证100%时间可用,宕机回复时间根据写入流量不同在几秒到几十秒内。
2.查询便利性上缺少支持sql语句。
3.无索引,查询必须按照RowKey严格查询,不带RowKey的filter性能较低。
4.对于查询会有一些毛刺,特别是在compact时,平均查询延迟在2~3ms,但是毛刺时会升高到几十到100多毫秒。

二、HBase使用场景

2.1 历史数据存储类应用(约占七成)
这类应用范围比较广,特别对于历史订单、历史记录、日志类的业务比较友好。由于以上这些业务的数据量巨大,传统的书库很难hold住,而这类应用往往查询量相对较少,查询随机性较大(无热点访问),对于mysql,redis来说存储成本太高,hbase用在这里非常合适。
2.2 分析型应用(约占两成)
主要是指配合spark,MapReduce,storm等来做数据分析。由于以上这些计算组件对于中间状态的保存具有局限性,当然spark内也有全局变量的概念,但是毕竟不是存储,不可能缓存一年的中间结果做cache。二有些应用又需要用到可能很长一段时间的数据做训练或者比对,这个时候hbase的优势就可以发挥出来了。
2.3 在线读写型应用(约占一成)
可以理解为对mysql或者redis的一种替换做法,但是这类应用比较在意可用性、稳定性以及sql、索引等支持。hbase的劣势较大,应用范围较窄。只有在一种情况下会是用–mysql或者redis的容量实在无法支撑数据量了,而应用对可用性的要求可以有一定成都的容忍。

三、HBase与传统关系数据库的区别?

答:主要体现在以下几个方面:1.数据类型。关系数据库采用关系模型,具有丰富的数据类型和储存方式。HBase则采用了更加简单的数据模型,它把数据储存为未经解释的字符串,用户可以把不同格式的结构化数据和非结构化数据都序列化成字符串保存到HBase中,用户需要自己编写程序把字符串解析成不同的数据类型。
2.数据操作。关系数据库中包含了丰富的操作,如插入、删除、更新、查询等,其中会涉及复杂的多表连接,通常是借助多个表之间的主外键关联来实现的。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表与表之间的关系,通常只采用单表的主键查询,所以它无法实现像关系数据库中那样的表与表之间的连接操作。
3.存储模式。关系数据库是基于行模式存储的,元祖或行会被连续地存储在磁盘页中。在读取数据时,需要顺序扫描每个元组,然后从中筛选出查询所需要的属性。如果每个元组只有少量属性的值对于查询是有用的,那么基于行模式存储就会浪费许多磁盘空间和内存带宽。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的,它的优点是:可以降低I/O开销,支持大量并发用户查询,因为仅需要处理可以回答这些查询的列,而不是处理与查询无关的大量数据行;同一个列族中的数据会被一起进行压缩,由于同一列族内的数据相似度较高,因此可以获得较高的数据压缩比。
4.数据索引。关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。与关系数据库不同的是,HBase只有一个索引——行键,通过巧妙的设计,HBase中所有访问方法,或者通过行键访问,或者通过行键扫描,从而使整个系统不会慢下来。由于HBase位于Hadoop框架之上,因此可以使用Hadoop MapReduce来快速、高效地生成索引表。
6.数据维护。在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍旧保留。
7.可伸缩性。关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,因此能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩。

HBase也有自身的局限性,如HBase不支持事务,因此无法实现跨行的原子性。

五、Hbase常用shell命令:
启动hbase
$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh
$ cd /usr/local/hbase
$ ./sbin/start-hbase.sh
$ ./bin/hbase shell
注:启动和关闭hadoop和hbase的顺序一定是:启动hadoop,启动hbase,关闭hadoop,关闭hbase。
hbase 中创建表:
hbase>create ‘student’ , ‘Sname’ , ‘Ssex’, ‘Sage’
hbase 中查看创建的表:
hbase>list
hbase 中添加数据:
hbase>put ‘student’ , ‘95001’ , ‘Ssex’, ‘Sage’
hbase 中查看数据:
hbase>get ‘student’ , ‘95001’
hbase 中查询表的全部数据:
hbase>scan ‘student’
hbase 中删除数据:
hbase>delete ‘student’ , ‘95001’ , ‘Ssex’, ‘Sage’
disable 表的禁用:
hbase(main):038:0> disable ‘xt’
drop 表的删除:
hbase(main):039:0> drop ‘xt’
count 统计表个数:
hbase(main):034:0> count ‘xt’
truncate 清空表数据:
hbase(main):035:0> truncate ‘xt’
put 添加数据
hbase>put ‘student’ , ‘Sname’ , ‘Ssex’, ‘Sage’
退出hbase:
hbase>exit
终止hbase运行:
#stop-hbase.sh
开启hbase运行:
#start-hbase.sh

大数据之pig

什么是Pig?
Pig 是一种数据流语言和运行环境,常用于检索和分析数据量较大的数据集。Pig包括两部分:一是用于描述数据流的语言,称为Pig Latin;二是用于运行Pig Latin程序的执行环境。

Pig的常用命令:操作HDFS
ls、cd、cat、mkdir、pwd、copyFromLocal(上传)、copyToLocal(下载)、register、define等。

操作Pig:

命令行:pig提供了一个shell终端与用户进行交互,用户可以进行增删改查操作。
启动pig命令行模式,进入本地模式:pig -x local

启动pig命令行模式,进入集群模式:pig - x mapredcue/pig
(pig没有API可以操作)

常用的PigLatin语句:
load:加载数据
foreach:逐行扫描
generate:提取列
filter:过滤
distinct:去重
order by:排序
group by:分组
join:多表查询
union:联合查询
dump:把结果输出到屏幕上
store:把结果保存到HDFS上

大数据之mahout

1.概念:

Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
2.主要特性:

虽然在开源领域中相对较为年轻,但 Mahout 已经提供了大量功能,特别是在集群和 CF 方面。Mahout 的主要特性包括:
  Taste CF。Taste 是 Sean Owen 在 SourceForge 上发起的一个针对 CF 的开源项目,并在 2008 年被赠予 Mahout。
  一些支持 Map-Reduce 的集群实现包括 k-Means、模糊 k-Means、Canopy、Dirichlet 和 Mean-Shift。
  Distributed Naive Bayes 和 Complementary Naive Bayes 分类实现。
  针对进化编程的分布式适用性功能。
  Matrix 和矢量库。
  上述算法的示例。
3.内容简介:
Mahout 的创始人 Grant Ingersoll 介绍了机器学习的基本概念,并演示了如何使用 Mahout 来实现文档聚类、做出推荐和组织内容。

mahout手册:
有效的程序名称是:
arff.vector::从ARFF文件或目录生成向量
baumwelch::用于无监督HMM训练的Baum-Welch算法
buildforest ::建立随机森林分类器
顶篷::顶篷聚类
cat::打印文件或资源,因为逻辑回归模型会看到它
cleansvd ::清理和验证SVD输出
clusterdump:将集群输出转储到文本
clusterpp ::群集中的群集群集输出
cmdump ::以HTML或文本格式转储混淆矩阵
concatmatrices:将两个具有相同基数的矩阵连接到一个矩阵中
cvb ::通过折叠的变化贝叶斯(0th导数)的LDA
cvb0_local ::通过折叠的变化贝叶斯LDA,在本地内存中。
describe:描述数据集中的字段和目标变量
valuateFactorization ::计算针对探针的评级矩阵分解的RMSE和MAE
fkmeans ::模糊K均值聚类
hmmpredict::通过给定的HMM生成随机的观测序列
itemsimilarity:计算基于项目的协同过滤的item-item-likeities
kmeans :: K均值聚类
lucene.vector ::从Lucene索引生成向量
lucene2seq::从Lucene索引生成文本SequenceFiles
matrixdump :: CSV格式的转储矩阵
matrixmult ::取两个矩阵的乘积
parallelALS::评级矩阵的ALS-WR分解
qualcluster ::运行聚类实验并以CSV格式汇总结果
Recommendationfactorized ::使用评级矩阵的因式分解来计算建议
基于requestitem ::使用基于项目的协作过滤来计算建议
regexconverter::基于正则表达式每行转换文本文件
resplit::将一组SequenceFiles拆分为多个相等的拆分
rowid ::将SequenceFile 映射到{SequenceFile ,SequenceFile }
rowsimilarity:计算矩阵行的成对相似度
runAdaptiveLogistic::使用可能经过训练和验证的AdaptivelogisticRegression模型对新生产数据进行评分
runlogistic ::针对CSV数据运行逻辑回归模型
seq2encoded::从文本序列文件生成编码的稀疏向量
seq2sparse ::从文本序列文件生成稀疏向量
seqdirectory ::从目录生成(文本)序列文件
seqdumper ::通用序列文件转储器
seqmailarchives ::从包含gzip压缩邮件存档的目录中创建SequenceFile
seqwiki :: Wikipedia xml转储到序列文件
Spectralkmeans::频谱k均值聚类
split ::将输入数据分为测试和训练集
splitDataset::将评级数据集分为训练和探针部分
ssvd::随机SVD
streamingkmeans ::流式k均值聚类
svd::Lanczos奇异值分解
testforest:测试随机森林分类器
testnb::测试基于向量的贝叶斯分类器
trainAdaptiveLogistic ::训练AdaptivelogisticRegression模型
trainlogistic ::使用随机梯度下降训练逻辑回归
trainnb::训练基于向量的贝叶斯分类器
转置::对矩阵进行转置
validateAdaptiveLogistic ::针对保持数据集验证AdaptivelogisticRegression模型
vecdist::计算一组向量(或簇或树冠,它们必须适合内存)与向量列表之间的距离
vectordump:将向量从序列文件转储到文本
viterbi::从给定的输出状态序列对隐藏状态进行维特比解码

  1. itemsimilarity参数
    通过mahout itemsimilarity –-help 查看:
    –input (-i) input, 设置数据输入路径
    –output (-o) output ,设置结果输出路径
    –similarityClassname (-s) ,设置相似度计算函数:
    SIMILARITY_COOCCURRENCE,同现相似度
    SIMILARITY_LOGLIKELIHOOD, 对数似然相似度
    SIMILARITY_TANIMOTO_COEFFICIENT
    SIMILARITY_CITY_BLOCK, 曼哈顿距离相似度
    SIMILARITY_COSINE, 余弦相似度
    SIMILARITY_PEARSON_CORRELATION,皮尔森相似度
    SIMILARITY_EUCLIDEAN_DISTANCE, 欧氏距离相似度
    具体函数定义参照:http://blog.fens.me/mahout-recommend-engine/
    –maxSimilaritiesPerItem (-m), 物品最大相似物品数量,默认是100;
    –maxPrefs (-mppu) ,最大评分,默认是: 500
    –minPrefsPerUser (-mp) ,最小评分,默认是1
    –booleanData , false评分 true 0、1
    –threshold (-tr) ,相似度过滤
    –randomSeed ,抽样
    –tempDir tempDir ,临时目录

  2. recommenditembased参数
    通过mahout recommenditembased–-help 查看:
    –input (-i) input, 设置数据输入路径
    –output (-o) output ,设置结果输出路径
    –similarityClassname (-s) ,设置相似度计算函数
    –numRecommendations (-n) ,每个用户推荐数量,默认10
    –usersFile,计算用户推荐结果的用户数据
    – itemsFile,推荐结果只包含该物品列表;
    –maxSimilaritiesPerItem (-m), 物品最大相似物品数量,默认是100;
    –maxPrefs (-mppu) ,最大评分,默认是: 500
    –minPrefsPerUser (-mp) ,最小评分,默认是1
    –booleanData , false评分 true 0、1
    –threshold (-tr) ,相似度过滤
    –filterFile (-f) ,过滤用户推荐物品
    –randomSeed ,抽样
    –tempDir tempDir ,临时目录

大数据之spark

spark-shell 退出的正确操作是**:quit**
二:spark相关概念
Application 运行在集群上的用户程序,包含集群上的driver program 和多个executor线程组成;
Driver program application运行的main方法,并生sparkcontext;
Cluster manager 集群资源管理器 ;
Deploy mode 部署模式 用于区别driver program的运行方式:集群模式(cluter mode),driver在集群内部启动;客户端模式(client mode),driver进程从集群外部启动;
Worker node 工作节点,运行application的节点
Executor work node的上进程,运行task并保持数据交互,每一个application有自己的executor
Task 运行于Executor中的任务单元,Spark应用程序最终被划分为经过优化后的多个任务的集合
Job 由多个转变构建的并行计算任务,具体为Spark中的action操作, 一个action就为一个job

Scala当中parallelize并行化的用法
parallelize并行化集合是根据一个已经存在的Scala集合创建的RDD对象。集合的里面的元素将会被拷贝进入新创建出的一个可被并行操作的分布式数据集。
eg:加载数据“1,2,3,4,5,6,7,8,9,10”:
scala> val num=sc.parallelize(1 to 10)

Spark-必会的基础语法练习:
//创建一个List
val lst0 = List(1,7,9,8,0,3,5,4,6,2)
//将lst0中每个元素乘以10后生成一个新的集合
val lst1 = lst0.map(_*10)
println(lst1)

//将lst0中的偶数取出来生成一个新的集合
val lst2 = lst0.filter(_%2 ==0)
//将lst0排序后生成一个新的集合
val lst3 = lst0.sorted

//反转顺序
val lst4 = lst0.sorted.reverse

//将lst0中的元素4个一组,类型为Iterator[List[Int]]
val lst5 = lst0.grouped(4)

//将Iterator转换成List
val lst6 = lst5.toList

//将多个list压扁成一个List
val lst7 = lst6.flatten

val lines = List("hello tom hello jerry", "hello jerry", "hello kitty")
//先按空格切分,在压平
val lst8= lines.map(_.split(" ")).flatten


//并行计算求和
val lst9 =lst0.par.reduce(_+_)
val lst10 = lst0.par.fold(0)(_+_)
//化简:reduce
//将非特定顺序的二元操作应用到所有元素
val lst11= lst0.fold(0)(_+_)
//安装特点的顺序
val lst12= lst0.foldLeft(0)(_+_)


//折叠:有初始值(无特定顺序)
val lst13 = lst0.par.fold(10)(_+_)
val lst14 = lst0.fold(10)((x,y ) => x+y)

//折叠:有初始值(有特定顺序)
val lst15 = lst0.par.foldLeft(10)(_+_)
val lst16 = lst0.foldLeft(10)((x,y)=>x+y)

//聚合
val arr = List(List(1, 2, 3), List(3, 4, 5), List(2), List(0))
//聚合操作, _+_.sum  初始值+集合中第一个元素的sum
// _+_ 各个元素的sum,依次相加求和
val i = arr.aggregate(0)(_+_.sum,_+_)

val l1 = List(5,6,4,7)
val l2 = List(1,2,3,4)
//求并集
val ls0 = l1.union(l2)

//求交集
val ls1 = l1.intersect(l2)

//求差集
val ls2 = l1.diff(l2)

val lines = List("hello tom hello jerry", "hello jerry", "hello kitty")

//wordcount

lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).map(t=>(t._1, t._2.size)).toList.sortBy(_._2).reverse

spark中函数用法
sc.parallelize():并行化
map():一种可迭代的键值对(key/value)结构。
filter():遍历整个集合,你提供一个判断条件(函数),来过滤集合元素
toDebugString:可以输出你的RDD的组成
split():处理字符串
textFile():读取文件
flatMap():将函数产出的集合串接在一起。
foreach:用于调用数组的每个元素,并将元素传递给回调函数。
sparkContext:

大数据之flume

flume命令:
help 帮助显示此帮助文本
agent 代理运行一个flume代理
avro-client 运行avro客户端
password 创建用于flume配置的密码文件
version 版本显示flume版本信息

命令选项:
–conf,-c 使用目录下的配置文件
–classpath,-C 追加到classpath
–dryrun,-d 实际上并没有启动Flume,只是打印命令
–plugins-path colon-separated list of plugins.d directories. See the
plugins.d section in the user guide for more details.
Default: $FLUME_HOME/plugins.d
-Dproperty=value sets a Java system property value
-Xproperty=value sets a Java -X option

agent options:
–conf-file,-f 指定一个配置文件(必选)
–name,-n 这个代理的名称(必填)
–help,-h -h显示帮助文本

avro-client options:
–rpcProps,-P RPC客户端属性文件与服务器连接参数
–host,-H 主机名,事件将被发送到该主机
–port,-p <端口的avro源的>端口
–dirname

目录流到avro源
–filename,-F 文本文件流到avro源(默认:std输入)
–headerFile,-R File 其中每个新行上都包含作为键/值对的事件头
–help,-h 显示帮助文本

Either --rpcProps or both --host and --port must be specified.

password options:
–outfile 将存储已编码密码的文件输出

注意,如果指定了目录,那么总是先包含它在类路径中。

大数据之hive

概述:
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。

hive语法与MySQL类似

你可能感兴趣的:(大数据,hadoop,hdfs,big,data)