数据库存储:hdoop,hive,hbase,clickHouse
流式计算:flink、spark、kafka
ETL数据收集与入库: flume、sqoop
一。Hadoop介绍与下载安装
1、Hadoop生态系统以及版本演化
1.Hadoop生态系统特点
1.源代码开源 2.社区活跃、参与者众多 3.涉及分布式存储和计算的方方面面 4.已得到企业界验证
2.Hadoop主要核心组件
分布式文件(存储)系统HDFS(Hadoop Distributed File System)
分布式计算框架 MapReduce
资源管理系统YARN(Yet Another Resource Negitiator) 2.0新加的
3.Hadoop各个发行版介绍(开源版)
Apache Hadoop
推荐使用最新的2.x.x 版本,比如2.4.0
下载 地址:http://hadoop.apache.org/releases.html
SVN :http://svn.apache.org/repos/asf/hadoop/common/branches/
CDH (Cloudera Distributed Hadoop )
推荐使用最新的CDH5 版本, 比如CDH5.0.0
下载地址: http://archive.cloudera.com/cdh5/cdh/
HDP (Hortonworks Data Platform )
推荐使用最新的 的HDP 2.x 版本 , 比如HDP 2.1 版本
下载 地址:http://zh.hortonworks.com/hdp/downloads/
4.Hadoop生态系统
Hive(基于MR的数据仓库):日志分析、多维度数据分析、其他场景如:海量结构化数据离线分 低成本进行数据分析 hive语句类似sql语句
Pig pig语句类似excel的汇总公式语句 (hive和pig都可以做数据分析)
Mahout 提供各种算法
HBase 数据模型
table:类似于传统数据库中的表
column family:列簇 table在水平方向有一个或多个column family组成,一个column family可以有多个任意column组成
row key:行键 table的主键,table中的记录按照row key排序
timestamp:时间戳 每行数据均对应一个时间戳(版本号)
Zookeeper:服务注册中心
Flume:数据收集系统
Sqoop:数据同步工具 连接Hadoop与传统数据库之间的桥梁
Oozie:作业流调度系统 目前计算框架和作业类型繁多,如何对这些框架和作业进行统一管理和调度?直接使用开源Oozie
Azkaban:作业调度系统
2、Hadoop下载安装启动
一、Hadoop三种运行方式
本地模式:一台服务器,数据存储在linux
伪分布式:一台服务器,数据存储在hdfs
完全分布式:多台服务器,数据存储在hdfs
二、完全分布式安装
//参考自VIP扩展——用户画像项目实战
1、准备三台服务器,下载jdk-8u321-linux-x64.tar.gz和hadoop-3.2.2.tar.gz解压并配置环境变量
vi /etc/profile
#Java环境变量配置
export JAVA_HOME=/home/piaoransheng/jdk/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
#Hadoop环境变量配置
export HADOOP_HOME=/home/piaoransheng/hadoop/hadoop-3.2.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
2、配置域名(每台服务器都操作)
编辑hosts文件:vi /etc/hosts
192.168.61.151 hadoop01
192.168.61.152 hadoop02
192.168.61.153 hadoop03
3、配置免密登录操作集群(每台服务器都操作)
a.所谓免密登录操作:
比如在hadoop01机器上要操作hadoop02机器,正常ssh hadoop02需要输入密码,如果配置有免密登录就不需要密码
b.操作步骤:
在hadoop01上生成密钥 ssh-keygen,回车,回车,回车
将密钥分发到另外两台机器 ssh-copy-id hadoop02,输入yes,回车,输入hadoop02的密码,回车
ssh-copy-id hadoop03,输入yes,回车,输入hadoop03的密码,回车
4、对配置文件进行配置
修改解压后的目录中的文件夹etc/hadoop下的xml配置文件(如 果文件不存在,则自己创建)
a.hadoop-env.sh修改以下配置: export JAVA_HOME=/home/dongxicheng/hadoop/jdk1.6.0_45
b.Slaves文件修改为以下配置: YARN001
c.以下四个标签添加配置项 (四个xml文件都在etc/hadoop文件夹下)
1、 mapred-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2. core-site.xml (其中“YARN001”是在/etc/hosts中设置的host,如果未设置,则换 为localhost)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/piaoransheng/hadoop/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为当前操作系统用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
3. hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- NameNode web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:9870</value>
</property>
<!-- SecondaryNameNode web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop03:9868</value>
</property>
<!-- 备份数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 开启webhdfs功能 -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
4. yarn-site.xml
<?xml version="1.0"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop02</value>
</property>
<!-- 环境变量的继承 跑示例时要用到-->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀死。默认是true -->
<property>
<name>yarn.nodemanager.pmen-check-enabled</name>
<value>false</value>
</property>
<!-- 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀死。默认是true -->
<property>
<name>yarn.nodemanager.vmen-check-enabled</name>
<value>false</value>
</property>
</configuration>
5.格式化(仅第一次启动)
配置完成后,第一次启动需要对NameNode格式化 hadoop namenode -format
初始化完成后会在/home/piaoransheng/hadoop/hadoop-3.2.2/data/dfs/name/current目录下创建一个NameNode的镜像。
6.启动服务
启动hdfs start-dfs.sh
启动yarn start-yarn.sh
全部启动 start-all.sh
如果没有创建hadoop用户,用的root用户启动,还需要配置环境变量
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
7.验证是否启动成功
jps命令 里面有DataNode/NameNode/SecondaryNameNode/NodeManager/ResourceManager进程
访问yarn地址:http://192.168.1.76:8088
访问HDFS地址:http://192.168.1.76:50070
访问webHdfs:http://192.168.1.76:9870/webhdfs/v1/<文件路径>?op=操作指令
示例:http://hadoop01:9870/webhdfs/v1/data/?op=GETFILESTATUS
指令参考:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
DataNode:数据存储(hdfs)
NameNode:名单管理(hdfs)
SecondaryNameNode:对NameNode的备份(hdfs)
NodeManager:工作子节点(yarn)
ResourceManager:集群协调(yarn)
二。Hadoop核心组件
1、HDFS
Hadoop Distributed File System 分布式文件系统
1.优点:高容错性、适合批处理、适合大数据处理、流式文件访问、可构建在廉价机器上
2.缺点:低延迟数据访问、文件存取 、发写入文件随机修改
3.访问方式:
webhdfs 直接http命令请求 https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
Shell 命令
Java API
REST API
Fuse:实现fuse协议
其他语言编程API
使用thrift实现
支持C++,Python,php,C等语言
4.快照
1.背景:HDFS上文件和目录是不断变化的,快照可以帮助用户保存某个时刻的数据
2.作用:a.防止用户误操作删除数据 b.数据备份
3.一个目录可以产生快照,当且仅当它是Snapshottable
使一个目录可以产生快照: bin/hdfs dfsadmin allowSnapshot <path>
4.创建/删除快照: bin/hdfs dfs -createSnapshot <path> [<snapshotName>]
bin/hdfs dfs -deleteSnapshot <path> [<snapshotName>]
5.快照存放位置和特定
a.快照是只读的,不可修改
b.<snapshottable_dir_path> /.snapshot/snapshotName
5.HDFS架构
HDFS是一个主从体系结构,由四部分组成,Client————NameNode————Secondary NameNode————DataNode
1.client作用: 提供一些命令来访问HDFS,比如启动或者关闭HDFS
a.文件切分。文件上传HDFS的时候,HDFS将文件切成一个一个的block,然后进行存储
b.与NameNode交互:获取文件的位置信息
c.与DataNode交互:读取或者写入数据
2.NameNode:就是master,它是一个主管,管理者
a.管理hdfs的名称空间
b.管理数据块映射空间
c.配置副本策略
d.处理客户端读写请求
一个文件在NameNode存放一条记录,不管这个文件多大或者多小,所以HDFS不适合存放大量小文件
3.DataNote:就是slave,NameNode下达命令,DataNode执行实际的操作
a.存储实际的数据库
b.执行数据块的读写操作.
4.Secondary NameNode:并非NameNode的热备,当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
a.辅助NameNode,分担其工作量
b.定期合并fsimage和fsedits,并推送给NameNode
c.在紧急情况下,可以辅助NameNote恢复
6.hdfs命令行操作 (任意路径)
如果提示没有该命令,加环境变量:
export PATH = $PATH:/home/will/Hadoop/hadoop-2.7.7/bin
显示文件列表1 ls: hdfs dfs -ls URI
显示文件列表2 ls -R: hdfs dfs -ls -R URI
创建目录1 mkdir hdfs dfs -mkdir /dir1 创建完可以用ls测试,也可以登录50070——utilities——file——查看
创建目录2 mkdir -p hdfs dfs -mkdir -p /dir2/dir22 创建二级目录,但是一级目录不存在,使用这个命令就可以一级二级目录一起创建
上传文件 put hdfs dfs -put test.txt /dir1
删除文件 rm hdfs dfs -rm /aaa/stopwords.txt
删除目录 -rm -r hdfs dfs -rm -r /aaa/1.py
本地移动文件到hdfs moveFromLocal hdfs dfs -moveFromLocal test.txt /dir1 将本地的文件移动到hdfs上
hdfs移动文件到本地 moveToLocal 还未实现,不能用
hdfs文件复制到本地 get hdfs dfs -get /dir2.txt ./ (./表示当前目录)
hdfs上移动文件 mv hdfs dfs -mv /dir2/test.text /dir1
hdfs上复制文件 cp hdfs dfs -cp /dir1/test/txt /dir2
查看文件 cat hdfs dfs -cat /dir1/test.txt
修改权限 chmod hdfs dfs -chmod 777或000 /dir1/a.txt
修改所属用户和用户组 chown hdfs dfs -chown will:will /dir1/a.txt
合并文件 appendToFile hdfs dfs -appendToFile core-site.xml hdfs-site.xml /dir1/b.txt 本地追加到hdfs
7.hdfs高级命令
a.数量限额配置 查看是否限额 hdfs dfs -count -q -h /dir1 第一个参数表示上传最大数量,第三个参数表示最大大小
数量限额 hdfs dfsadmin -setQuota 2 /dir1 设置一次最多只能上传两个文件
去掉数量限额 hdfs dfsadmin -clrQuota /dir1
b.大小限额 大小限额 hdfs dfsadmin -setSpaceQuota 384M /dir1 dir1路径空间大小4k
去掉大小限额 hdfs dfsadmin -clrSpaceQuota /dir1
c.安全模式
查看安全模式 hdfs dfsadmin -safemode get
进入安全模式 hdfs dfsadmin -safemode enter
离开安全模式 hdfs dfsadmin -safemode leave
8.hdfs基准测试
a.测试写入速度 hadoop jar /share/hadoop/mapreduce/hadoop-mapreduce-client-jobClient-2.7.7-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
b.测试读取速度 hadoop jar /share/hadoop/mapreduce/hadoop-mapreduce-client-jobClient-2.7.7-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
c.清除测试数据 TestDFSIO -clean
9.HDFS的Java API操作
a.winsows准备: 1.下载hadoop包 2.配置环境变量HADOOP_HOME 3.把hadoop.dll拷贝到C:\windows\system32目录下 4.重启
b.项目导入pom依赖 hadoop-common
hadoop-clent
hadoop-hdfs
hadoop-client-core
junit
c.使用url方式访问数据(了解) hdfs文件输入流,本地文件输入流,流拷贝实现下载
d.使用文件系统方式访问数据(掌握)
1.获取FileSystem 方式1:得到configuration,再得到FileSystem)
方式2:FileSystem.get(new URI("hdfs://node01:8020"),new Configuraion())
方式3:
方式4:
遍历操作: 先获取FileSystem,调用方法遍历 fileSystem.listFiles(new path("/"),true); 后面的true表示递归
创建文件夹:先获取FileSystem,然后 fileSystem.mkdir(new path("aaa/bbb/ccc"))
创建文件: 先获取FileSystem,然后 fileSystemcreate(new path("aaa/bbb/ccc.d.txt"))
文件的下载和上传: 下载方式1:hdfs文件输入流,本地文件输出流,流拷贝
下载方式2: fileSystem.copyToLocalFile(new path("/dir1/a.txt"),new path("d://a.txt"))
上传: fileSyste.copyFromLocalFile(SourcePath,DesPath)
hdfs的权限访问控制: etc/hadoop/hdfs-site.xml
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
小文件的合并:先在本地合并,然后再上传到hdfs
10.问题处理记录:
a.jps查看datanode没有启动:
logs查看datanode的日志,复制namenode的cluster-id;然后把这个id粘贴到dfs-data里面的cluster-id;重启就好了
2、YARN
YARN产生背景—总结
1.直接源于MRv1在几个方面的缺陷: a.扩展性受限 b.单点故障 c.难以支持MR之外的计算
2.多计算框架各自为战,数据共享困难
MR:离线计算框架
Storm:实时计算框架
Spark:内存计算框架
3、MapReduce
1.运行过程
MapReduce将整个运行过程分为两个阶段,Map阶段和Reduce阶段
Map阶段由一定的Map Task组成
a.输入数据格式解析:InputFormat
b.输入数据处理: Mapper
c.数据分组: Partitioner
Reduce阶段由一定数量的Reduce Task组成
a.数据远程拷贝
b.数据按照key排序
c.数据处理:Reducer
d.数据输出格式:OutputFormat(TextOutPutFormat)
2.编程接口
1.Hadoop提供了三种MapReduce编程方式
a.Java(最原始的方式)
b.Hadoop Streamng(支持多语言)
c.Hadoop Pipes(支持C++)
2.JAVA编程接口是所有编程方式的基础
3.不同的编程接口只是暴露给用户的形式不同而已,内部执行引擎是一样
不同编程方式效率不同
3.案例 wordcount
编程规范:有八个步骤(map2,shuffle4,reduce2)
条件:新建一个a.txt并上传到hdfs(如果仅仅测试mapreduce程序可以在本地新建)
1.指定文件的读取方式和读取路径
2.将第一步的结果转换成k2,v2 //map阶段 和第七步类似
3.对k2,v2进行分区
4.对分区的数据进行排序
5.(可选)对分组过的数据初步规约,降低数据的网络拷贝
6.对数据进行分组,相同key和value放入一个集合中 //shuffle阶段
7.将k2,v2转成k3,v3 //reduce阶段 和第二步类似
8.处理保存reduce输出的数据
k1,v1 0 hello world
11 hello hadoop
k2,v2 hello 1 world 1 新k2,v2 hello <1,1,1>
hello 1 hadoop1 world <1,1>
k3,v3 hello 3
world 2
4. wordcount运行的两种方式
a.yarn集群运行:将程序打包成JAR并上传,然后在集群上用hadoop命令启动(jar包点击maven-package,生成在项目target里面)
hadoop jar 4d5f5d.jar com.mapreduce.mapreduce.MainJob(jar包名称,主方法全路径名)
b.本地运行
5.mapreduce分区(大于15的和小于等于15的分出来)
步骤:定义mapper 自定义partition 定义reduce 主类
6.计数器 (这个文件有多少行)
//wordcount map
public class WordCountMapper extends Mapper<LongWritable, Text,Text,LongWritable> {
/**
* 将K1,v1转换成功k2,v2
*
* @param key 0
* @param value hello,word,hello,hadoop
* @param context 上下文
*/
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
Text text = new Text();
LongWritable longWritable = new LongWritable();
//1.将一行文本拆分
String[] arr = value.toString().split(".");
//2.遍历拆分后的数组
for (String word : arr){
text.set(word);
longWritable.set(1);
//3.将k2,v2写入上下文
context.write(text,longWritable);
}
}
}
//wordcount reduce
public class WordCountReduce extends Reducer<Text,LongWritable,Text,LongWritable> {
/**
* 将k2,v2转换成功k3,v3
*
* @param key hadoop
* @param values {1,1,1}
* @param context 上下文
*/
@Override
protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
long count = 0;
//1.遍历v2得到v3
for (LongWritable longWritable : values){
count += longWritable.get();
}
//2.将k3,v3写入上下文
context.write(key,new LongWritable(count));
}
}
//wordcount job任务
public class MainJob extends Configured implements Tool {
/**
* 指定一个Job任务,mian方法中ToolRunner.run执行的就是这个方法
*/
@Override
public int run(String[] strings) throws Exception {
//1.指定一个job任务对象
Job job = Job.getInstance(super.getConf(), "wordcount");
//2.配置job任务对象(八个步骤)
//第一步:指定文件的读取方式和读取路径
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job,new Path("hdfs://192.168.1.76:8020/wordcount"));
//第二步:Map阶段 k1,v1转成k2,v2
job.setMapperClass(WordCountMapper.class); //哪个处理类
job.setMapOutputKeyClass(Text.class); //k2类型
job.setMapOutputValueClass(LongWritable.class); //v2类型
//第三,四,五,六 先采用默认的方式,先不做处理; 以后再详细说明
//第七步 reduce阶段
job.setReducerClass(WordCountReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
//第八步 设置输出类型
job.setOutputFormatClass(TextOutputFormat.class);
//设置输出类型
TextOutputFormat.setOutputPath(job,new Path("hdfs://192.168.1.76:8020/wordcount_out"));
//等待任务结束
boolean result = job.waitForCompletion(true);
return result? 0:1;
}
public static void main(String[] args) throws Exception {
//启动job任务
int run = ToolRunner.run(new Configuration(), new MainJob(), args);
//退出
System.exit(run);
}
}
二。数据收集与入库系统
1、数据收集—— flume
1.都有哪些技术?
Flume Kfaka Scribe
2.Flume OG基本架构
Agent:用于采集数据,agent是flume中产生数据流的地方,同时agent会将产生的数据流传输到collcotor中.
agent通常包含两部分,source和sink;source用于获取数据,sink用于将获得的数据传给后面的collector
Collector:汇总多个agent结果,用于对数据进行聚合(数据收集器),往往会产生一个更大的数据流,然后加载到storage中
Master:协调agnet和collector的配置信息,负责配置及通信管理,是集群的控制器
3.flume为什么引入collector
a.对agent数据进行汇总,避免产生过多小文件
b.避免多个agent连接对hadoop造成过大压力
c.中间件,屏蔽agent和hadoop间的异构性
2、传统数据库与Hadoop同步 —— sqoop
1.sqoop是什么
sqoop:SQL-to-Hadoop,连接传统关系型数据库和Hadoop的桥梁
把关系型数据库的数据导入hadoop系统(如Hdfs,Hbase,Hive),把hadoop系统的数据导出到传统数据库
2.导入语法(mysql导入hadoop)
sqoop import
--connection jdbc:mysql://mysql.example.com/sqoop --mysql的信息
--username sqoop --mysql的信息
--password sqoop --mysql的信息
--table tableName --mysql的信息
会导入到目录 bin/hadoop fs -cat cities/part-m-*
也可以指定导入的目录 --target-dir /etl/input/cities
指定导出的条件 --where "country = 'USA' "
导入多个表
增量导入(两种方式) append
3.导出语法(hadoop导出到MySQL)
sqoop export
--connection jdbc://mysql://mysql.example.com/sqoop --mysql的信息
--username sqoop --mysql的信息
--password sqooop --mysql的信息
--table cities --mysql的信息
--export -dir cities --haddoop信息
三。Hbase
1.概述
Hbase是一个构建在HDFS上的分布式列存储系统
是Hadoop生态系统中重要的一员,主要用于海量结构化数据存储
从逻辑上讲,HBase将数据按照表,行和列进行存储
2.Hbase和HDFS对比
a.两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点
b.hdfs适合批处理场景
不支持数据随机查找
不支持增量数据处理
不支持数据更新
3.Hbase表特定(列式数据库,传统的行式数据库)
a.大: 一个表可以有数十亿行,上百万列
b.无规模: 每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列
c.面向列: 面向列的存储和权限控制,列独立检索
d.稀疏: 对于空的列,并不占用存储空间,表可以设计得非常稀疏
e.数据多版本: 每个单元格中的数据有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
f.数据类型单一:数据都是字符串,没有类型
4.habse访问方式
a.java API
b.Hbase Shell命令行工具
c.rest gateway,支持rest风格的HTTP API访问Hbase,解除了语言限制
d.使用mapReduce,pig,hive处理Hbase数据
5.java API访问hbase
1.创建一个configuration对象 (包含各种配置信息) Configuration conf = HbaseConfiguration.create();
2.构建一个HTable句柄 (提供Configuration对象,提供待访问table的名称) Htable table = new Htable(conf,tableName);
3.执行相应的操作 (put get delete scan等操作) table.getTableName();
4.关闭Htable句柄 (将内存数据刷新到磁盘上柄关闭资源) table.close();
六。Mahout
1、Mahout是什么
Mahout是Apach旗下的一个开源项目
提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序
Mahout包含许多实现,包括聚类,分类,推荐过滤,频繁子项挖掘。此外,通过Hadoop库,
Mahout可以有效地扩展到云中
2、Mahout的下载安装
Mahout是运行在Hadoop服务之上的算法工具,安装Mahout的前提是Hadoop集群服务运行正常。
Mahout的安装非常的简单,安装步骤如下:
1.下载 mahout-distribution-0.7.tar.gz (下载地址:http://mahout.apache.org/)
2.解压到 /opt目录
3、Mahout的算法库
包括三大块:聚类,分类,协同过滤等算法
a.Classfication(分类算法)
Logisitc Regression 逻辑回归
Bayeslan 贝叶斯分类算法
Support Vector Machines 支持向量机
b.lustering(聚合)
c.Dimension Reduction
d.Freq.Pattern Mining
e.Examples Non-MR Algorithms
f.Non-MR Algorithms
g.Recommenders
h.Regression
i.Evolution
j.Vecotr Similarty
k.等等
八。作业流调度引擎
1.作业流调度系统介绍
1.基本概念
目前计算框架和作业类型繁多,对这些框架和作业进行统一管理和调度
2.有多重解决方案
a.Crontab (Linux内置提供的一种脚本工具,举例:定时触发mapreduce作业)
b.自己设计调度系统
c.直接使用开源系统
3.Hadoop作业流调度系统基本功能
a.对常见作业类型进行调度 (mapreduce作业,Hive作业,Pig作业,Shell)
b.根据需要对作业进行调度(按周期调度,定时调度)
c.支持容错与报警
d.可视化作业流运行过程
4.常见的开源作业流调度系统
a.Oozie 雅虎,基于xml表达作业依赖关系
b.Azkaban Linkedin开源,通过Java property配置作业依赖关系
c.Zeus(宙斯) 阿里开源,通过界面配置作业依赖关系
d.其他开源系统 Cascading,通过Java API编程实现作业依赖关系
2.Oozie 作业流调度系统
1.Oozie基本架构
a.Oozie Client:
b.Oozie Server:包括作业流管理系统和定时器(Oozie Workflow 和 Oozie Coordinator)
2.Oozie使用方式
a.Oozie CLI(命令行)
b.java api
c.rest api
d.web ui(只读)
3.Oozie基本概念
a.作业流由一种节点构成,且这些节点通过控制流节点相连
b.Oozie工作流通过hPDL语言(一种xml过程定义语言)编写
4.Oozie层次结构
action(节点):支持mapreduce,hdfs,pig,ssh,http,email
workflow(作业):
coordinator(一群作业)
bundle(更大的群)
3.Azkaban 作业流调度系统
1.Azkaban基本架构
mysql
azkaban executor server:调度mysql语句
azkaban web server:显示
2.Azkaban使用方式
a.rest api
b.web ui(用户管理权限,提交作业流,查看作业流运行进度)
3.Azkaban作业流表达方式
a.每个作业描述对应一个".job"文件
b.作业依赖关系在".job"文件设置
c.一个作业流打包成.zip,提交到Azkaban上
4.Azkaban作业示例