55、大数据处理:Hadoop与Spark实战

大数据处理:Hadoop与Spark实战

1. Hadoop处理《罗密欧与朱丽叶》文本

在大数据处理中,Hadoop是一个强大的工具。下面我们将使用Hadoop对《罗密欧与朱丽叶》的文本进行处理,统计单词长度的数量。

1.1 复制文件到Hadoop文件系统

要让Hadoop读取《罗密欧与朱丽叶》的文本内容,首先需要将文件复制到Hadoop的文件系统中。操作步骤如下:
1. 使用 ssh 登录到集群并访问其命令行,在命令提示符、终端或shell中执行以下命令,记得将 YourClusterName 替换为你的集群名称,同时会提示输入集群密码:

ssh sshuser@YourClusterName-ssh.azurehdinsight.net
  1. 对于Windows用户,如果 ssh 无法正常工作,可以按照 此链接 的说明安装并启用它。安装完成后,注销并重新登录或重启系统以启用 ssh
  2. 使用以下Hadoop命令将文本文件复制到集群提供的 /example/data 文件夹中:
hadoop fs -copyFromLocal RomeoAndJuliet.txt /example/data/RomeoAndJuliet.txt
1.2 运行MapReduce作业

现在可以在集群上运行《罗密欧与朱丽叶》文本的MapReduce作业,执行以下命令:

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-streaming.jar \
  -D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
  -D mapred.text.key.comparator.options=-n \
  -files length_mapper.py,length_reducer.py \
  -mapper length_mapper.py \
  -reducer length_reducer.py \
  -input /example/data/RomeoAndJuliet.txt \
  -output /example/wordlengthsoutput

命令参数说明:
| 参数 | 说明 |
| ---- | ---- |
| -files | 逗号分隔的文件名列表,Hadoop会将这些文件复制到集群的每个节点,以便在每个节点上本地执行。 |
| -mapper | 映射器脚本文件的名称。 |
| -reducer | 归约器脚本文件的名称。 |
| -input | 提供给映射器的输入文件或文件目录。 |
| -output | 输出将写入的HDFS目录,如果该文件夹已存在,将出现错误。 |

作业执行时,Hadoop会产生一些反馈信息,例如:

18/12/05 16:46:25 INFO mapred.FileInputFormat: Total input paths to process : 1
18/12/05 16:46:26 INFO mapreduce.JobSubmitter: number of splits:2
...
18/12/05 16:46:50 INFO mapreduce.Job: Job job_1543953844228_0025 completed successfully
1.3 查看单词计数结果

Hadoop MapReduce将输出保存到HDFS中,要查看实际的单词计数,需要在集群的HDFS中查看文件,执行以下命令:

hdfs dfs -text /example/wordlengthsoutput/part-00000

结果示例:

1
1140
2
3869
3
4699
4
5651
5
3668
6
2719
7
1624
8
1062
9
855
10
317
11
189
12
95
13
35
14
13
15
9
16
6
17
3
18
1
23
1
2. Spark简介

当处理真正的大数据时,性能至关重要。Hadoop适用于基于磁盘的批处理,但许多大数据应用需要比磁盘密集型操作更好的性能。Spark就是为了解决这些问题而开发的。

2.1 Spark历史与优势

Spark最初于2009年在加州大学伯克利分校开发,并由美国国防高级研究计划局(DARPA)资助。它最初是作为高性能机器学习的分布式执行引擎而创建的。Spark使用内存架构,在处理某些工作负载时比Hadoop快达100倍,这使得许多公司开始用Spark取代Hadoop MapReduce。

2.2 Spark架构与组件

Spark可以独立运行在单台计算机上(通常用于学习和测试),也可以在集群上独立运行,或者使用各种集群管理器和分布式存储系统。它可以运行在Hadoop YARN、Apache Mesos、Amazon EC2和Kubernetes上,并支持许多分布式存储系统,如HDFS、Apache Cassandra、Apache HBase和Apache Hive。

Spark的核心是弹性分布式数据集(RDD),它允许使用函数式编程技术处理分布式数据。与Hadoop不同,RDD通过驻留在内存中(仅在数据无法容纳在内存中时才使用磁盘)并避免数据复制来消除磁盘开销。Spark通过记录创建每个RDD的步骤来处理容错问题,因此如果集群节点发生故障,它可以重建给定的RDD。

Spark还提供了Spark Streaming用于实时数据处理,Spark DataFrames类似于pandas DataFrames,可用于将RDD视为命名列的集合,以及Spark SQL用于对分布式数据执行查询,还有Spark MLlib用于执行机器学习算法。

2.3 Spark提供商

Hadoop提供商通常也提供Spark支持,此外还有像Databricks这样的Spark特定供应商。Databricks提供了一个围绕Spark构建的“零管理云平台”,其网站也是学习Spark的优秀资源。Databricks有付费平台,可运行在Amazon AWS或Microsoft Azure上,同时还提供免费的Databricks Community Edition,是开始使用Spark和Databricks环境的好方法。

3. 使用Docker和Jupyter Docker Stacks运行Spark

为了方便地运行Spark应用程序,我们可以使用Docker和Jupyter Docker Stacks。

3.1 Docker概述

Docker是一种将软件打包成容器(也称为镜像)的工具,这些容器包含了在不同平台上执行该软件所需的一切。对于一些需要复杂设置和配置的软件包,有许多预先存在的Docker容器可以免费下载并在本地桌面或笔记本电脑上执行。Docker还有助于研究和分析研究的可重复性,你可以创建自定义的Docker容器,配置好研究中使用的每个软件和库的版本,以便其他人可以重现你的环境和工作。

3.2 安装Docker

不同操作系统的安装方式如下:
- Windows 10 Pro或macOS :可以在 此链接 安装Docker。在Windows 10 Pro上,需要允许“Docker for Windows.exe”安装程序对系统进行更改,当Windows询问是否允许安装程序进行更改时,点击“是”。
- Windows 10 Home :需要使用Virtual Box,具体说明见 此链接
- Linux :应按照 此链接 的说明安装Docker Community Edition。
同时,可以阅读 此指南 了解Docker的一般概述。

3.3 Jupyter Docker Stacks

Jupyter Notebooks团队为常见的Python开发场景预配置了几个Jupyter“Docker栈”容器。我们将使用 jupyter/pyspark-notebook Docker栈,它预配置了在计算机上创建和测试Apache Spark应用所需的一切。

运行Jupyter Docker栈的步骤如下:
1. 确保JupyterLab当前未在计算机上运行。
2. 下载并运行 jupyter/pyspark-notebook Docker栈,执行以下命令,Windows用户需要将 \ 替换为 ^

docker run -p 8888:8888 -p 4040:4040 -it --user root \
  -v fullPathToTheFolderYouWantToUse:/home/jovyan/work \
  jupyter/pyspark-notebook:14fdfbf9cfc1 start.sh jupyter lab

第一次运行该命令时,Docker会下载名为 jupyter/pyspark-notebook:14fdfbf9cfc1 的Docker容器,该容器接近6GB,初始下载时间取决于你的互联网连接速度。

3.4 打开JupyterLab

容器下载并运行后,在命令提示符、终端或shell窗口中会看到类似以下的语句:

Copy/paste this URL into your browser when you connect for the first time, to login with a token:
    http://(bb00eb337630 or 127.0.0.1):8888/?token= 9570295e90ee94ecef75568b95545b7910a8f5502e6f5680

复制长十六进制字符串,然后在浏览器中打开 http://localhost:8888/lab ,将令牌粘贴到“密码或令牌”字段,点击“登录”即可进入JupyterLab界面。如果不小心关闭了浏览器,可访问 http://localhost:8888/lab 继续会话。

3.5 访问Docker容器的命令行

要访问Docker容器的命令行,可按以下步骤操作:
1. 打开一个单独的Anaconda命令提示符、终端或shell,使用以下命令列出当前运行的Docker容器:

docker ps

输出示例:

CONTAINER ID        IMAGE                                   COMMAND  
           CREATED             STATUS            PORTS             
  NAMES
f54f62b7e6d5        jupyter/pyspark-notebook:14fdfbf9cfc1   "tini -g -- /bin/bash"  2 minutes ago      Up 2 minutes      0.0.0.0:8888->8888/tcp
  friendly_pascal
  1. 执行以下命令访问容器的命令行,将 container_name 替换为运行容器的名称:
docker exec -it container_name /bin/bash

在容器中,可以安装Python包,例如安装NLTK和TextBlob:

conda install -c conda-forge nltk textblob
3.6 停止和重启Docker容器

为了保留之前安装的库,需要记录容器名称,使用以下命令停止和重启容器:
- 停止容器:

docker stop container_name
  • 重启容器:
docker restart container_name

此外,Docker还提供了一个名为Kitematic的GUI应用程序,可用于管理容器,包括停止和重启它们,可从 此链接 获取该应用程序。

4. 使用Spark进行单词计数

下面我们将使用Spark的过滤、映射和归约功能来实现一个简单的单词计数示例,统计《罗密欧与朱丽叶》中的单词数量。

4.1 加载NLTK停用词
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
stop_words = stopwords.words('english')
4.2 配置SparkContext
from pyspark import SparkConf
configuration = SparkConf().setAppName('RomeoAndJulietCounter').setMaster('local[*]')
from pyspark import SparkContext
sc = SparkContext(conf=configuration)
4.3 读取文本文件并映射为单词
from textblob.utils import strip_punc
tokenized = sc.textFile('RomeoAndJuliet.txt') \
    .map(lambda line: strip_punc(line, all=True).lower()) \
    .flatMap(lambda line: line.split())
4.4 移除停用词
filtered = tokenized.filter(lambda word: word not in stop_words)
4.5 统计每个剩余单词的数量
from operator import add
word_counts = filtered.map(lambda word: (word, 1)).reduceByKey(add)
4.6 筛选出现次数大于等于60的单词
filtered_counts = word_counts.filter(lambda item: item[1] >= 60)
4.7 排序并显示结果
from operator import itemgetter
sorted_items = sorted(filtered_counts.collect(), key=itemgetter(1), reverse=True)
max_len = max([len(word) for word, count in sorted_items])
for word, count in sorted_items:
    print(f'{word:>{max_len}}: {count}')

结果示例:

romeo: 298
thou: 277
juliet: 178
thy: 170
nurse: 146

综上所述,通过Hadoop和Spark,我们可以高效地处理大数据,实现文本分析等任务。无论是Hadoop的MapReduce作业,还是Spark的函数式编程处理方式,都为大数据处理提供了强大的工具。同时,使用Docker和Jupyter Docker Stacks可以方便地搭建和运行这些应用程序。

大数据处理:Hadoop与Spark实战

5. 技术对比与总结

在大数据处理领域,Hadoop和Spark是两款备受关注的技术,下面我们对它们进行详细对比,并总结各自的特点和适用场景。

5.1 Hadoop与Spark对比
对比项 Hadoop Spark
处理性能 基于磁盘的批处理,处理速度相对较慢,适合大规模数据的离线处理 使用内存架构,处理速度快,在某些工作负载上比Hadoop快达100倍,适合实时和近实时处理
数据存储 通过HDFS进行数据存储,并使用复制来实现容错,增加了磁盘开销 核心是弹性分布式数据集(RDD),驻留在内存中,仅在必要时使用磁盘,避免了数据复制,减少了磁盘开销
任务执行 MapReduce作业需要将任务拆分为映射和归约阶段,执行过程相对复杂 提供了函数式编程接口,如映射、过滤和归约,代码简洁,易于编写和维护
适用场景 大规模数据的离线处理,如数据仓库、数据分析等 实时数据处理、机器学习、交互式查询等场景
5.2 总结

Hadoop和Spark各有优势,在实际应用中,需要根据具体的业务需求和数据特点来选择合适的技术。如果处理的是大规模的离线数据,对处理速度要求不高,那么Hadoop是一个不错的选择;如果需要实时处理数据,或者进行机器学习等复杂计算,那么Spark更适合。

同时,Docker和Jupyter Docker Stacks为我们提供了便捷的开发和运行环境,使得我们可以快速搭建和测试大数据应用程序。通过使用这些工具,我们可以更加高效地进行大数据处理和分析。

6. 应用拓展与未来展望

随着大数据技术的不断发展,Hadoop和Spark的应用场景也在不断拓展。下面我们探讨一下它们的应用拓展方向以及未来的发展趋势。

6.1 应用拓展
  • 物联网(IoT) :随着物联网设备的普及,产生了大量的实时数据。Hadoop和Spark可以用于处理和分析这些数据,例如对传感器数据进行实时监测和预警。
  • 人工智能(AI) :Spark的机器学习库(Spark MLlib)可以用于训练和部署人工智能模型,如深度学习、自然语言处理等。结合Hadoop的大规模数据存储能力,可以处理海量的训练数据。
  • 金融科技(Fintech) :在金融领域,需要对大量的交易数据进行实时分析和风险评估。Hadoop和Spark可以用于构建实时数据分析平台,帮助金融机构做出更明智的决策。
6.2 未来展望
  • 性能优化 :未来,Hadoop和Spark可能会进一步优化性能,提高处理速度和资源利用率。例如,采用更高效的算法和数据结构,以及更好的内存管理技术。
  • 集成与融合 :随着大数据生态系统的不断发展,Hadoop和Spark可能会与其他技术进行更紧密的集成,如与云计算、容器化技术等结合,提供更加便捷和高效的大数据解决方案。
  • 智能化发展 :随着人工智能和机器学习的发展,Hadoop和Spark可能会引入更多的智能化功能,如自动调优、智能预测等,提高大数据处理的自动化程度。
7. 技术实践流程总结

为了帮助读者更好地理解和应用上述技术,下面我们总结了使用Hadoop和Spark进行大数据处理的实践流程。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B(选择技术):::process
    B --> C{Hadoop or Spark}:::decision
    C -->|Hadoop| D(配置集群):::process
    C -->|Spark| E(安装Docker和Jupyter Docker Stacks):::process
    D --> F(复制文件到HDFS):::process
    E --> G(运行Jupyter Docker栈):::process
    F --> H(运行MapReduce作业):::process
    G --> I(打开JupyterLab):::process
    H --> J(查看单词计数结果):::process
    I --> K(编写Spark代码):::process
    K --> L(加载数据和处理):::process
    L --> M(执行单词计数):::process
    J --> N([结束]):::startend
    M --> N

实践流程步骤如下:
1. 选择技术 :根据业务需求和数据特点,选择Hadoop或Spark。
2. Hadoop流程
- 配置集群,确保集群正常运行。
- 将数据文件复制到HDFS中。
- 运行MapReduce作业进行数据处理。
- 查看处理结果。
3. Spark流程
- 安装Docker和Jupyter Docker Stacks。
- 运行Jupyter Docker栈,启动Spark环境。
- 打开JupyterLab,编写Spark代码。
- 加载数据并进行处理,执行单词计数等任务。

通过以上流程,我们可以使用Hadoop和Spark完成大数据处理的基本任务。在实际应用中,可以根据具体需求进行扩展和优化。

总之,Hadoop和Spark作为大数据处理的重要技术,为我们提供了强大的工具和解决方案。通过合理选择和应用这些技术,结合Docker和Jupyter Docker Stacks等工具,我们可以更加高效地处理和分析大数据,为企业和社会创造更大的价值。未来,随着技术的不断发展,我们有理由相信大数据处理技术将在更多领域发挥重要作用。

内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了形图编程。循环小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件PLC的专业的本科生、初级通信联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境MCGS组态平台进行程序高校毕业设计或调试运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑互锁机制,关注I/O分配硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值