Hadoop 2.0 大家族(四)

目录

    • 七、Flume
      • (一)Flume简介
      • (二)Flume入门
    • 八、Mahout
      • (一)Mahout简介
      • (二)Mahout入门


七、Flume

  Flume是一个分布式高性能、高可靠的数据传输工具,它可用简单的方式将不同数据源的数据导入某个或多个数据中心,典型应用是将众多生产机器日志数据实时导入HDFS。

(一)Flume简介

1、Flume逻辑结构

  Flume核心思想是数据流,即数据从哪来到哪去,中间不需用经过谁。

在这里插入图片描述
  用户可以将Flume看成是两台机器之间通过网络互相传送数据,Flume定制了大量的数据源(Thrift、Shell)与数据汇(Thrift、HDFS、Hbase),通过使用“管道”,Flume能够确保不会丢失一条数据,提供了数据高可靠性。

在这里插入图片描述
2、Flume组成

(1)Source

  它负责读取原始数据,目前Flume支持大量类型。用户可以自定义Source,使用时在配置文件里声明即可。

(2)Channel

  它负责将从Source端传来的数据存入Channel。Flume的分用、复用和过滤功能即在于此。

(3)Sink

  它负责从Channel中取出并发送数据。Sink内部都是使用netty来发送数据的。

(二)Flume入门

1、Flume部署

  集群中只有一台机器部署Flume就可以接收数据了,此外下面的例题中还要有一台机器做为数据源,负责向Hadoop集群发送数据,故须在cMaster与iClient上部署Flume。

(1)部署Flume接收端:

[root@cMaster ~]# sudo yum install flume-ng-agent                  #在cMaster上部署Flume

(2)部署Flume发送端:

[root@iClient ~]# sudo yum install flume-ng-agent                      #在iClient上部署Flume

2、Flume访问接口

  Flume提供了命令行接口和程序接口,无论是命令行还是程序接口,都必须使用Flume配置文档,这也是Flume架构思想之一——配置型工具。

【例6】 按要求完成问题:
① 进入Flume命令行,查看常用命令。
② 要求发送端iClient使用telnet向cMaster发送数据,而接收端cMaster开启44444端口接收数据,并将收到的数据显示于命令行。
③ 要求发送端iClient将本地文件“/home/joe/source.txt”发往接收端cMaster,而接收端cMaster将这些数据存入HDFS。
④ 根据问题③,接收端cMaster开启接收数据的Flume服务,既然此服务能接收iClient发来的数据,它必然也可以接收iHacker机器(黑客)发来的数据,问如何尽量减少端口攻击,并保证数据安全。

解:

  对于问题①,直接在iClient上执行如下命令即可:

[root@iClient ~]# flume-ng                                        #查看Flume常用命令

  对于问题②,首先需要在cMaster上按要求配置并开启Flume,接着在iClient上使用telnet向cMaster发送数据,具体过程参见如下几步。
  在cMaster上以root权限,新建文件“/etc/flume/conf/flume.conf”,并填入如下内容:

# 命令此处agent名为a1,并命名此a1的sources为r1,channels为c1,sinks为k1
a1.sources = r1
a1.channels = c1
a1.sinks = k1
# 定义sources相关属性:即此sources在cMaster上开启44444端口接收以netcat协议发来的数据
a1.sources.r1.type = netcat
a1.sources.r1.bind = cMaster
a1.sources.r1.port = 44444
# 定义channels及其相关属性,此处指定此次服务使用memory暂存数据
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 定义此sink为logger类型sink:即指定sink直接将收到的数据输出到控制台
a1.sinks.k1.type = logger
# 将sources关联到channels,channels关联到sinks上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

  接着在cMaster上使用此配置以前台方式开启Flume服务:

[root@cMaster ~]# flume-ng agent -c /etc/flume-ng/ -f /etc/flume-ng/conf/flume.conf -n a1

  此时,接收端cMaster已经配置好并开启了,接下来需要开启发送端,在iClient上执行:

[root@iClient ~]# telnet cMaster 44444

  此时向此命令行里随意输入数据并回车,telnet会将这些数据发往cMaster,再次回到cMaster上执行命令的那个终端,会发现刚才在iClient里输入的数据发送到了cMaster的终端里。如果想退出iClient终端里的telnet,按Ctrl+]组合键(即同时按住Ctrl键和]键),回到telnet后输入“quit”命令回车即可,至于退出cMaster上的Flume,直接按Ctrl+C组合键。

  对于问题③,首先,在cMaster上新建文件“/etc/flume-ng/conf/flume.conf.hdfs”,并填入如下内容:

# 命令此处agent名为a1,并命名此a1的sources为r1,channels为c1,sinks为k1
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 定义sources类型及其相关属性
# 即此sources为avro类型,且其在cMaster上开启4141端口接收avro协议发来的数据
a1.sources.r1.type = avro
a1.sources.r1.bind = cMaster
a1.sources.r1.port = 4141
# 定义channels类型其实相关属性,此处指定此次服务使用memory暂存数据
a1.channels.c1.type = memory
# 定义此sink为HDFS类型的sink,且此sink将接收的数据以文本方式存入HDFS指定目录
a1.sinks.k1.type = hdfs	
a1.sinks.k1.hdfs.path = /user/joe/flume/cstorArchive
a1.sinks.k1.hdfs.fileType = DataStream
# 将sources关联到channels,channels关联到sinks上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

  接着,在iClient上新建文件“/root/ businessLog”,并填入如下内容:

ccccccccccccccccccccc
ssssssssssssssssssssssss
tttttttttttttttttttttttttttttttttt
ooooooooooooooooooo
rrrrrrrrrrrrrrrrrrrrrrrrrrrrr

  iClient上还要新建文件“/etc/flume-ng/conf/flume.conf.exce”,并填入如下内容:

# 命令此处agent名为a1,并命名此a1的sources为r1,channels为c1,sinks为k1
a1.sources = r1
a1.channels = c1
a1.sinks = k1
# 定义sources类型及其相关属性,此sources为exce类型
# 其使用Linux cat命令读取文件/root/businessLog,接着将读取到的内容写入channel
a1.sources.r1.type = exec
a1.sources.r1.command = cat /root/businessLog
# 定义channels及其相关属性,此处指定此次服务使用memory暂存数据
a1.channels.c1.type = memory
# 定义此sink为avro类型sink,即其用avro协议将channel里的数据发往cMaster的4141端口
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = cMaster
a1.sinks.k1.port = 4141
# 将sources关联到channels,channels关联到sinks上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

  至此,发送端iClient和接收端的Flume都已配置完成。现在需要做的是在HDFS里新建目录,并分别开启接收端Flume服务和发送端Flume服务,步骤如下。
  在cMaster上开启Flume,其中“flume-ng … a1”命令表示使用flume.conf.hdfs配置启动Flume,参数a1即是配置文件里第一行定义的那个a1。

[root@cMaster ~]# sudo -u joe hdfs dfs -mkdir flume                #HDFS里新建目录/user/joe/flume
[root@cMaster ~]# sudo -u joe flume-ng agent -c /etc/flume-ng/ -f /etc/flume-ng/conf/flume.conf.hdfs -n a1

  最后,在iClient上开启发送进程,与上一条命令类似,这里的a1,即flume.conf.exce定义的a1:

[root@iClient ~]# flume-ng agent -c /etc/flume-ng/ -f /etc/flume-ng/conf/flume.conf.exce -n a1

  此时,用户在iClient端口里打开“cMaster:50070”,依次进入目录“/user/joe/flume/cstorArchive”,将会查看到从iClient上传送过来的文件。

  问题④属于开放性问题,请参考官方文档,讨论并解决。

八、Mahout

  Mahout是基于Hadoop平台的机器学习工具,它提供了大量机器学习算法的MR实现,此外,它还提供了大量针对数据预处理的工具类,通过数据预处理工具类与机器学习算法的结合,能够很方便地实现从模型构建到性能测试等一系列步骤。

(一)Mahout简介

  目前Mahout主要包含分类、聚类和协同过滤三种类型算法,需要注意的是Mahout算法处理的数据类型必须是矩阵类型的二进制数据,若数据为文本类型,用户须通过Mahout提供的数据转换工具完成转换,接着提交给相关算法,用户可以把Mahout看成一个Hadoop客户端,只是这个客户端包含了大量的机器学习Jar包。

在这里插入图片描述

(二)Mahout入门

1、Mahout部署

在这里插入图片描述
  作为Hadoop的一个客户端,Mahout只要在集群中或集群外某台客户机上部署即可,实验中选择在iClient上部署Mahout。

[root@iClient ~]# sudo yum install mahout

2、Mahout访问接口

  Mahout提供了程序和命令行接口,通过参考Mahout已有的大量机器学习算法,程序员也可实现将某算法并行化。

【例7】 要求以joe用户运行Mahout示例程序naivebayes,实现下载数据,建立学习器,训练学习器,最后使用测试数据针对此学习器进行性能测试。

解:

  首先须下载训练数据集和测试数据,接着运行训练MR和测试MR,但是,Mahout里的算法要求输入格式为Value和向量格式的二进制数据,故中间还须加一些步骤,将数据转换成要求格式的数据,下面的脚本naivebayes.sh可以完成这些动作。

#!/bin/sh
#新建本地目录,新建HDFS目录
mkdir -p /tmp/mahout/20news-bydate /tmp/mahout/20news-all && hdfs dfs -mkdir mahout
#下载训练和测试数据集
curl http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz \
-o /tmp/mahout/20news-bydate.tar.gz
#将数据集解压、合并,并上传至HDFS
cd /tmp/mahout/20news-bydate && tar xzf /tmp/mahout/20news-bydate.tar.gz && cd
cp -R /tmp/mahout/20news-bydate/*/* /tmp/mahout/20news-all
hdfs dfs -put /tmp/mahout/20news-all mahout/20news-all
#使用工具类seqdirectory 将文本数据转换成二进制数据
mahout seqdirectory -i mahout/20news-all -o mahout/20news-seq -ow
#使用工具类seq2sparse 将二进制数据转换成算法能处理的矩阵类型二进制数据
mahout seq2sparse -i mahout/20news-seq -o mahout/20news-vectors  -lnorm -nv  -wt tfidf
#将总数据随机分成两部分,第一部分约占总数据80%,用来训练模型
#剩下的约20%作为测试数据,用来测试模型
mahout split -i mahout/20news-vectors/tfidf-vectors --trainingOutput mahout/20news-train-vectors \
--testOutput mahout/20news-test-vectors  \
--randomSelectionPct 40 --overwrite --sequenceFiles -xm sequential
#训练Naive Bayes模型
mahout trainnb -i mahout/20news-train-vectors -el -o mahout/model -li mahout/labelindex -ow
#使用训练数据集对模型进行自我测试(可能会产生过拟合)
mahout testnb -i mahout/20news-train-vectors -m mahout/model -l mahout/labelindex \
-ow -o mahout/20news-testing
#使用测试数据对模型进行测试
mahout testnb -i mahout/20news-test-vectors -m mahout/model -l mahout/labelindex \
-ow -o mahout/20news-testing

  脚本写得较为简陋,执行时,切记须在iClient上,以joe用户身份执行,且只能执行一次。再次执行时,先将所有数据全部删除,执行方式如下:

[root@iClient ~]# cp naivebayes.sh /home/joe
[root@iClient ~]# chown joe.joe naivebayes.sh
[root@iClient ~]# sudo –u joe chmod +x naivebayes.sh
[root@iClient ~]# sudo –u joe sh naivebayes.sh

  脚本执行时,用户可以打开Web界面“cMaster:8088”,查看正在执行的Mahout任务;还可以通过Web界面“cMaster:50070”,定位到“/user/joe/mahout/”查看目录变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/739209.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文华财经股票期货K线形态提示主图指标公式源码

文华财经K线形态主图指标公式源码: A1:ABS(O-C)HHV(ABS(O-C),20)&&ISUP; //DRAWCOLORKLINE(A1&&BACKSET(ISLASTBAR,SUMBARS(A1,1)),COLORLIGHTBLUE,0); DRAWSL(A1&&BACKSET(ISLASTBAR,SUMBARS(A1,1)),L-2*MINPRICE,0,6,0,COLORRED),LINE…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第47课-动态切换内嵌blender展厅的壁画

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第47课-动态切换内嵌blender展厅的壁画 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编…

驾照减分考试搜题软件?分享四个可以搜答案的软件 #其他#笔记#经验分享

大学生们可以通过使用搜题软件,快速找到自己遇到的问题的答案,提高学习效率,以下分享各类型的供大家学习。 1.彩虹搜题 这是个微信公众号 学生或者是成年人使用非常广的一款学习应用软件,里面包含了各行各业的海量题库&#xf…

QT实现QGraphicsView绘图 重写QGraphicsSvgItem类实现边框动画

目录导读 简述使用 QTimer 实现 QGraphicsSvgItem 边框动画效果 简述 在了解学习WPS的流程图的时候,发现它这个选择图元有个动态边框效果,而且连接线还会根据线生成点从头移动到尾的动画。像这种: 在QML中实现这种动画属性很简单&#xff0…

晨持绪科技:开好一家抖音小店运营怎么做

在数字时代,抖音小店以其独特的社交媒体优势迅速崛起,成为许多创业者的新宠。但如何有效运营,却是一门学问。首要任务是确定你的小店定位,这关系到后续的产品选择、目标客户群及营销策略。定位明确后,接下来便是挑选适…

Spring框架学习笔记(本地印象笔记搬运)(整理中)

1、背景 Spring作为Java Web开发使用最频繁的框架,具有非常高的学习价值,在Spring框架源码中包含了很多设计模式(单例、原型、代理、观察者等),读懂这些源码有助于拓宽开发思路,同时也能提高后端排查错误的…

win10免安装配置MySQL8.4.0

注:此教程基于win10 22H2 版本 1、下载最新版本MySQL压缩包 下载链接:MySQL官网下载地址 点击第二行的 ZIP Archive 后面的Download(当前时间2024-06-19最新版本是8.4.0) 2、解压并添加配置文件 下载完毕后,解压缩…

Java程序之可爱的小兔兔

题目: 古典问题,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 兔子的规律为数列1,1,2,3,…

【数据结构与算法】Dijkstra算法、Floyd算法

文章目录 最短路径Dijkstra算法实现 Floyd算法实现 最短路径 前文提到,对于不带权图来说,BFS可以解决最短路径问题,因为它是类似于树的层次遍历那样,同一个结点的后继的访问顺序相邻,这使得BFS首次访问结点时的路径必…

CCRC-DSO数据安全官和CCRC-DSA数据安全评估师的差异

在当前时代背景下,随着中国数据安全政策的加速推进和相关法律法规的密集发布,对数据资产进行全生命周期的安全管控变得日益迫切。 这不仅成为企业可持续发展的必要条件,也引发了广泛的关注于数据安全相关的专业培训及认证领域。 在此环境下&a…

PS系统教程26

PS与BR的关系 如何把图片以图层的方式导入画板里面 选中三张图片/多张选择工具-PS-将文件载入PS图层意味着这三张图片以图层的方式嵌入PS中 拼接长图 裁剪图片 保存裁剪后的图片拼接图片选中要拼接的图片选择工具-PS-Photomerge(拼合图像) 图像处理器 大白话&…

对撞指针技巧

对撞指针技巧 我们以LeetCode的一道题目来讲解一下对撞指针; LeetCode第27题移除元素,链接如下: https://leetcode.cn/problems/remove-element 如果使用快慢指针 如果使用快慢指针,将会有大量的后面元素赋值给前面元素的操作…

Open3D 点云随机下采样至指定数目

目录 一、背景 二、代码实现 2.1 关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2下采样后点云 3.3数据对比 一、背景 在Open3D中,如果你想将点云随机采样到固定的点数,可以使用random_down_sample 函数并计算相应的采样比例。以下是如何实现…

MySQL数据库(五):事务

MySQL数据库中的事务是一种用来保证一系列操作要么全部成功,要么全部取消的机制。想象一下你去超市购物,拿了很多商品,如果中途发现没带钱包,你可以放弃这次购买,所有商品会回到原位。通过事务,可以确保数据…

感恩父爱 健康同行 宁夏康源父亲节特惠普查

父亲,是那道坚实的屏障,为孩子们挡风遮雨。父亲,是那颗明亮的灯塔,为孩子们指明前进的方向。然而岁月无情,随着年龄的增长,曾经为我们遮风挡雨的父亲如今也逐渐进入了各种疾病的高发期。感恩父爱&#xff0…

linux下进度条的实现

一、代码一版 使用模块化编程 1.processbar.h #include<stdio.h> #define capacity 101 //常量使用宏定义 #define style //符号方便后续修改 extern void processbar();修饰变量的时候一定要带extern&#xff0c;修饰函数的时候可以省略&#xff0c;因为没有函数体就…

FLASH仿真EEPROM---基于智芯Z20K11XM

一、介绍 电可擦和可编程只读存储器(EEPROM)可以对字节或字编程和擦除。EEPROM中的数据即使断电也能保持&#xff0c;但Z20K1xx芯片不含EEPROM。然而&#xff0c;闪存可以通过EEPROM仿真软件来模拟EEPROM。Z20K1xx包含两个flash阵列。编程和擦除操作可以在一个数组上进行&#…

华为200人园区网有线和无线

实验描述&#xff1a; 1 内网有有线业务、内部无线、外部无线三种业误。 2 内网服务器配置静态IP&#xff0c;网关192.168.108.1。 3 sW1和R1之间使用v1an200 192.168.200.9/30 互联。 4 R2向运营商申请企业宽带并获得了1个固定公网IP&#xff1a; 200.1.1.1 子网掩码 255.255.…

双目相机测距原理

一、普通双目相机测距原理 普通双目相机具有如下特点&#xff1a;左右两个相机位于同一平面&#xff08;光轴平行&#xff09;&#xff0c;且相机参数&#xff08;焦距f&#xff09;一致。其原理图如下&#xff1a; 如图所示&#xff0c;P点为相应的物体位置&#xff0c;CL和C…

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:UseCompressedOops的作用 JVM参数-XX:UseCompressedOops的作用是启用对象指针压缩&#xff08;Ordinary Object Pointers compression&#xff09;。这一特性主要应用于64位的Java虚拟机中&#xff0c;目的是为了减少内存使用。在传统的64位系统中&#xff0c;对象…