一个人要是长时间一直做一件事,思维容易固化。

就像那些从太空回来的宇航员,吃饭时容易丢开拿在手里的勺子。当勺子掉在地上时,哦,我已经回到地球了^_^。

所以,适当尝试新鲜事物,既是对大脑的放松,也是开阔思路的好机会,好方法。

那这次,博主尝试的新事物是什么呢?我们知道,大、物、移、智、云是近些年比较火的技术,具体来讲就是大数据、物联网、移动5G、人工智能、云计算。每一个都显得高大上。

所以,博主决定在其中选择一个来学习学习。其实,这些技术并不是割裂的,而是有内在的本质联系的,具体可参考博主的另一篇博文

一文将大数据、云计算、物联网、5G(移动网)、人工智能等最新技术串起来_wwwyuewww的专栏-CSDN博客

那么,选择哪一个方向来尝试一下呢?

这不,一年一度的诗词大会又开始了。

现在人工智能技术非常火,很多人就想着,要是让AI来写诗,会是什么样的。还有人真的做了这件事。

这里,博主就不尝试那么复杂的了,能力和时间都不允许。我们来个简单的,选择大数据方向,来分析分析唐诗三百首里,各个汉字出现的频率。

需要补充说明一下,就唐诗三百首而言,说实话,还不至于用大数据技术,简单写个程序就可以搞定。但是,如果有更多的数据,那么使用大数据技术,还是可以提升效率的。

好了,闲话少说,我们简单看看怎么做。我们使用Hadoop完成数据分析。

整个过程分为三个部分

第一部分 先作为分布式文件系统来使用

1 下载安装Hadoop。这里,我用了老版本2.8
  因为Hadoop依赖Java,需要准备Java环境,导出Java环境变量

解压Hadoop安装包,然后在/etc/profile文件中导出Hadoop环境变量

同时,在Hadoop env中也导出Java环境变量

2 按照官方示例,格式化分布式文件系统,启动HDFS

Hadoop namenode -format
hdfs namenode -format上述两个命令都可以,不过后续都推荐第二个命令
关停之前的服务
stop dfs  和yarn 重启服务
start dfs 和 yarn
使用jps命令查看java进程
23232 Jps
20977 ResourceManager
20373 NameNode
20806 SecondaryNameNode
21147 NodeManager
20571 DataNode

为啥要查看java进程呢,因为一个基本的Hadoop集群中的节点主要有:
  NameNode:负责协调集群中的数据存储
  DataNode:存储被拆分的数据块
  JobTracker:协调数据计算任务
  TaskTracker:负责执行由JobTracker指派的任务
  SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息

要确定上述关键节点进程成功运行,否则,不利于后续错误的排除判断:倒地是程序问题还是环境问题。所以,最好检查一下。
  
  实际中,发现缺少DataNode,将java JDK版本从10切换到8

删除/root/hadoop目录下的日志和临时文件(目录由配置文件中指定),重新启动服务,问题解决

但也有说《重新格式化名称节点之前需要清空DFS下的名称和数据文件夹以解决数据节点无法启动的问题。》可能不是JDK版本的问题
  
  相对之前输出,也没有an illegal错误提示了,这个应该是java版本的原因

但是还是仍然有如下错误

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

其实把native目录下的库拷贝到上一层lib目录下,即可通过检测

但是会提示snappy库没有,这个需要下载源代码,编译安装

3 用命令方式,测试HDFS文件系统

查看目录
Hadoop fs -ls /
创建一个新的目录,创建后可以在web界面查看当前操作的结果。web界面的端口为50070
hdfs dfs -mkdir /user

对于文件系统操作命令,可以用Hadoop fs 和hdfs dfs两个命令,根据网上资料,第一个命令可以操作更多格式的文件系统,不止hdfs文件系统
  
  命令的基本使用可以这样理解,将Hadoop fs看做一个整体,带选项,比如 -ls -mkdir等,然后指定操作目录即可。

注意,这里的目录是针对的hdfs分布式文件系统,不是电脑本地目录

本地和hdfs文件系统中文件相互拷贝命令选项如下:
[-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]

第二部分,作为数据分析平台使用

4 执行一个MapReduce任务

创建一个input 和output 文件目录
  将Hadoop配置文件拷贝到input目录,作为分析的源文件
  执行grep 任务

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar grep /user/input /user/output 'dfs[a-z.]+'

提示无法连接8032端口
  
  修改yarn的配置文件,增加如下内容,

<property>  <name>yarn.resourcemanager.address</name>  <value>master:8032</value>
</property>
<property>  <name>yarn.resourcemanager.scheduler.address</name>  <value>master:8030</value>
</property>
<property>  <name>yarn.resourcemanager.resource-tracker.address</name>  <value>master:8031</value>
</property>

提示无法连接master:8032,意思貌似无法解析该地址
  修改配置文件,将master替换为localhost
  再次执行任务,提示
  mapreduce.Job: Task Id : attempt_1578829933099_0001_m_000005_0, Status : FAILED
  
  该问题同样在java版本退回到JDK8后未再出现,map-reduce任务通过。之前许多错误可能是java版本不兼容导致。
  
  通过8088端口可以查看这类任务的执行情况及执行日志
  
  第一次执行提示output目录已存在错误,修改为

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar grep /user/input /user/output/grepresult 'dfs[a-z.]+'

执行成功。将执行结果拷贝到本地

hdfs dfs -copyToLocal /user/output/ test/

查看本地中的执行结果,跟在本地单独执行命令检查,结果基本一致

root@ubuntu:/home/work/hadoop-2.8.5/test/output/grepresult# cat part-r-00000 1       dfs.replication1       dfs.permissions1       dfs.name.dir1       dfs.data.dir

本地单独命令执行结果

root@ubuntu:/home/work/hadoop-2.8.5/etc/hadoop# cat hdfs-site.xml | grep dfs[a-z.]<name>dfs.name.dir</name><name>dfs.data.dir</name><name>dfs.replication</name><name>dfs.permissions</name>

第三部分,通过Java编程,使用Hadoop提供的接口,执行MapReduce任务,完成古诗分析

5 编写MapReduce任务,分析古诗

  现在可以编写程序,来进行分析统计了。程序很简单,读入古诗的每一个字符,然后统计它们出现的频率。

我们使用Windows环境的idea来编辑和编译Java库。

参考网上的例子,主要有三个文件,分别是WordCountDriver.java,WordCountMapper.java以及WordCountReducer.java。


  第一个是框架文件,将后两个管理起来,第二是做Map操作,第三个是做Reduce操作。

具体统计操作写的很简陋,没有做过多的处理。

最后编译生成一个jar库HadoopApi.jar。
  
6 上传待分析古诗文件

我们将从网络下载的含有唐诗三百首的文本文件传到HDFS中。古诗格式如下图所示。

7 执行分析程序,进行分析

hadoop jar /home/share/com/HadoopApi.jar com.xxx.hadoop.Test.WordCountDriver

8 将分析结果从Hadoop的分布式文件系统中拷贝出来

分析结果是一个文本文件,打开可以看到如下图所示

如前所述,这里没有对结果排序。所以,对这个数据,还需要再处理一次。

我们将数据拷贝到Excel中,进行一下排序,结果就出来了,如下图所示:

可以看到,最高频字是“不”,其次是“人”,再次是“山”。有没有出乎你的意料?

如果我们统计所有的古诗,就可以得到古人写诗最喜欢用的字了。
  
后记:

不得不说,兴趣才是最好的老师。当你想要做感兴趣的事情时,主动学习就不是什么困难的事情了。

唐诗三百首出现最多的字是什么?大数据分析告诉你相关推荐

  1. HTML写一首简单的居中唐诗,《唐诗三百首》最简单一首诗,只28字却成压轴之作,誉为诗中绝品...

    品味唐诗对于当今的现代人来说,是一种精神享受,一种消遣休闲.在品读诗的时候,我们无须了解更深的背景,无须探究隐藏的意义.只要用心去阅读就能感受诗的无穷魅力,让压抑的情感随之抒发,让荡漾的心潮随之起伏, ...

  2. 你可能不了解的《唐诗三百首》

    这是学习笔记的第 2189 篇文章 读完需要 9 分钟 速读仅需3分钟 对于唐诗,自己其实是一种复杂的心情,好像会背些,但是用的时候却都想不起.<唐诗三百首>算是重温古诗的一种方式,借着让 ...

  3. python+jieba分析唐诗三百首

    python+jieba分析唐诗三百首 代码及源文件地址:poem_300 代码保证符合命名规范.遵循PEP8规则.导包顺序清晰.尽量做到复用性和不罗嗦 记得修改文件路径哟(^U^)ノ~YO 如果有帮 ...

  4. HTML5唐诗三百首,《唐诗三百首》中王维5首五言绝句,代表了盛唐绝句的最高成就!...

    王维(701年?-761年),字摩诘,唐代山水田园诗派代表人物之一,人称"诗佛".<唐诗三百首>中王维5首五言绝句,代表了盛唐绝句的最高成就. 1/<鹿柴> ...

  5. python唐诗分析综合_Python利器之胎教《唐诗三百首》文本分析

    事情是这样的,你们听我讲: 有一天,孕妈妈在家庭群里对准爸爸说,在某猫上买本<唐诗三百首>吧,每天给宝宝读一首唐诗,作为胎教.有图有真相: 作为好吃懒做的准爸爸,听到这个消息的瞬间,表情是 ...

  6. 唐诗三百首-免费无广告版-iPhone,iPad通用

    熟读唐诗三百首,不会作诗也会吟.<唐诗三百首>是一部流传很广的唐诗选集.唐朝(618年-907年)二百九十年间,是中国诗歌发展的黄金时代,云蒸霞蔚,名家辈出,唐诗数量多达五万首.孙琴安&l ...

  7. 唐诗三百首微电影合集(300集)

    诗词是最美的语言,是迷醉心怀的智慧.古典诗词,寥寥数语,却四两拨千斤,字字千锤百炼,就这么几个字,或勾勒出恢弘清雅的画卷,或传递出幽咽情愫.苍茫之志.以下是我们推荐给大家的古诗词微电影合集,大家可以收 ...

  8. 用C#来学习唐诗三百首和全唐诗

    Begin 最近把项目做完了,闲来无事,就想做点好玩的事情,刚好前几天下载了[唐诗三百首]和[全唐诗]这两个txt文件,正好用C#来整理一下. 然后导出QData格式,可以给其他软件读取. 以后弄个开 ...

  9. 【Elasticsearch】es 7.8.0 唐诗三百首写入 Elasticsearch 会发生什么

    1.概述 本文参考 项目实战 01:将唐诗三百首写入 Elasticsearch 会发生什么? 并且进行实战,对其进行一点修改. 1.实战项目 将唐诗三百首写入Elasticsearch会发生什么? ...

最新文章

  1. 卷积核输出特征图大小的计算 深度学习
  2. 改善AI性别偏见的4种方法 | CSDN博文精选
  3. android 保存textview,为什么没有TextView(带ID)会自动保存它的状态?
  4. LeetCode 316 Remove Duplicate Letters(删除重复字符)
  5. 案例:图书管理——补充知识(数组相关API)||补充知识(数组响应式变化)
  6. 【活动预告】数据资产化论坛
  7. oracle分布式数据库中间件,分布式数据库中间件设想
  8. B+树 范围查询_为什么 MySQL 使用 B+ 树,而不是 B 树或者 Hash?
  9. linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效...
  10. 数据结构PTA期末复习题集
  11. 如何去追女生,看了你就成功了一半
  12. php采集cms有哪些,phpcms v9自带采集模块功能体验
  13. Graph Anomaly Detection with Deep Learning——基于属性图的节点异常检测
  14. windriver 自动生成pcie驱动
  15. 【论文阅读笔记】Beamforming Optimization for Wireless Network Aided by IRS with Discrete Phase Shifts
  16. 对于刺头,怎么办?9个套路支招
  17. 指针变量占用的内存空间大小说明
  18. php的vget方法,ext_lanzou.php
  19. 在天堂与地狱之间——清华浪子梦断中关村[推荐]
  20. 大脑神经网络图高清,图神经网络 图像

热门文章

  1. SpringBoot 直接返回 Json格式对象(报错:返回对象为空{})
  2. 既然选择了Java便只顾风雨兼程
  3. 记录学习Android基础的心得00
  4. 用python给老师排课表_用自动排课表软件生成课程表 从此告别排课烦恼
  5. python 命令行解析模块_【Python模块】命令行解析--argparse
  6. c语言选择结构程序设计报告,《C语言程序设计》实验报告选择结构程序设计.doc...
  7. autojs之选择文件
  8. 【2023年的就业形势依旧严峻】
  9. 设计模式1-工厂模式
  10. 听说你的SAP GUI会崩溃闪退?