现阶段在学习大数据处理相关的项目,先通过厦门大学林子雨老师的案例教程学习Spark+Kafka构建实时分析Dashboard案例学习Kafka和Spark的处理, 地址:http://dblab.xmu.edu.cn/post/8274/
通过博客记录一下学习过程中遇到的各种问题,由于在一个小任务下可能有很多问题,因此记录的顺序是按照完成案例任务的顺序来写的。
为了完全匹配案例的环境,重新下载了Ubuntu16.04,因此所有环境都得重装一遍。已有的分辨率并不能完全符合我的电脑,于是自定义分辨率1920*1080,参考博客设置好并成功开机生效。
其它问题参考如下:
出现Error of failed request: BadName (named color or font does not exist
安装好增强之后分辨率无法自动调整
安装增强时出错,未能加载虚拟光驱 VBoxsGuestAdditions.iso到虚拟电脑
此时再次出现了老问题,虚拟机桥接模式连不上网了…基本处理思路就是要设置把虚拟机上面的网关、DNS、掩码、都要和实际主机一致,虚拟机的IP要和主机在同一网段,参考博客,其中注意如果连的是WiFi,主机的IP地址是看WLAN后的地址。
也可以对照一下virtualbox网络设置里桥接网络选择的界面名称,和主机wlan的名称是否是一样的,当然在我这里wireless已经说明了一切…
win10查看DNS,只需要1)在右下角网络图标右键打开网络和Internet设置 2)在状态里查看硬件和连接属性 3)查看所需网络(此时是wlan)的dns。
设置好后通过sudo service networking restart
重启网络。
由于想让Spark和Hadoop一起安装使用,因此在安装Spark前先按照教程安装Hadoop。
林子雨老师给了Hadoop网盘链接,而我为了偷懒也懒得从官网下了,但是试了几次后发现,似乎网页版百度网盘里的大文件必须通过客户端下载。
根据提示下载好百度网盘linux版本deb格式的安装包后,通过sudo dpkg -i
安装Debian软件包,然而下载完成后,不管点几次百度云的图标,它都没有除了消失以外的任何反应!查了一下,估计是因为Ubuntu 16.04版本太低不支持百度网盘,从18.04之后应该就能用了。但为了和要求的环境一模一样(防止安装过程中出现意料之外的问题… ),需要一个能在16.04上下载百度网盘大文件的方法,这里使用了aria2+网盘直链
(只考虑传输文件可以直接用FTP软件向Ubuntu系统上传文件,详情参考林子雨老师教程,桥接模式保证主机向虚拟机能ping通,如果用户名啥的都正确,能ping通但依然连不上,可能是没安装ssh,安装ssh。)
aria2最简单的配置下载过程参考
https://blog.csdn.net/kudou1994/article/details/87648558
https://blog.csdn.net/wudi1107/article/details/80728891
配置过程中,vi打开文件后按方向键出现ABCD,通过卸载原有的vim-common组件sudo apt-get remove vim-common
,安装新的vimsudo apt-get install vim
解决了问题。
网上找到的大部分教程直链里都用的是baiduexporter,但是现在这个插件在官方商店已经没有了,作者GitHub还能下载https://github.com/acgotaku/BaiduExporter/releases,但是我太蠢了最后也没弄好,可用的话可参考作者博客https://blog.icehoney.me/posts/2015-01-31-aria2-download/配合使用。
如果不能用的话,有几个试过当前还可用的工具。油小猴网盘直链下载助手,可用在包括谷歌、火狐、360等主流浏览器下,且给出了详细的在各个系统下,使用各种下载工具的详细使用教程,可直接参考这个完成下载;在找可用直链的时候还看到一个刚更新的直链下载助手,只限Chrome,亲测可用。
附上其他参考过的aria2+网盘直链配置使用方法,可能这些组合起来就能解决你的某个问题:
aria2+Chrome插件baiduexporter
Ubuntu16.04+Tampermonkey+uget+aria2+baiduexporter
ubuntu18.04 Aria2的安装及使用问题详解
简单明了的aria2+baiduexporter安装使用
简单的Ubuntu16.04aria2下载百度云大文件
1)E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) ,参考以下博客和评论
https://blog.csdn.net/jdy_lyy/article/details/90453856
2)sudo apt-get update
时,大部分包都忽略了。参考https://www.jianshu.com/p/e0c45265a2ff
换源时出现“下载软件仓库信息失败,检查您的网络连接”,参考了以下,第二个解决的是“细节”里的报错,不知道哪个起作用了。
https://blog.csdn.net/nanhuaibeian/article/details/86330330
https://blog.csdn.net/u012798683/article/details/102596829
hadoop有三种shell命令方式。
启动时,若没有配置hadoop的PATH环境变量,则先cd到hadoop的安装目录下。
直接将本地磁盘中的文件作为输入输出。
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'`
代码运行grep例子,将input文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中)
部署时,改变/usr/local/hadoop/etc/hadoop/目录下的2个配置文件 core-site.xml 和 hdfs-site.xml(从伪分布式模式切换回非分布式模式,要删除 core-site.xml 中的配置项)。
core-site.xml中在configuration之间加上
<configuration>
<property>
<name>hadoop.tmp.dirname>
<value>file:/usr/local/hadoop/tmpvalue>
<description>Abase for other temporary directories.description>
property>
<property>
<name>fs.defaultFSname>
<value>hdfs://localhost:9000value>
property>
configuration>
hdfs-site.xml中在configuration之间加上
<configuration>
<property>
<name>dfs.replicationname>
<value>1value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:/usr/local/hadoop/tmp/dfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/usr/local/hadoop/tmp/dfs/datavalue>
property>
configuration>
执行 NameNode 的格式化:
cd /usr/local/hadoop
./bin/hdfs namenode -format
开启 NameNode 和 DataNode 守护进程:
cd /usr/local/hadoop
./sbin/start-dfs.sh #start-dfs.sh是个完整的可执行文件,中间没有空格
jps
查看当前用户下的java进程的pid及基本信息,可用来判断是否成功启动。
成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息及hdfs文件。
运行实例时,伪分布式读取的是 HDFS 上的数据,先要在 HDFS 中创建用户目录:
./bin/hdfs dfs -mkdir -p /user/hadoop
将文件用-put
复制到分布式文件系统中的 /user/hadoop/input 中,用-ls
查看文件列表。因使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input。
在伪分布式下运行:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
注意区别 ./input 和 input,./output 和 output。
Hadoop 默认不会覆盖结果文件,因此再次运行同一个实例会提示出错,需要先将之前的输出文件 ./output(本地)或 output(hdfs)用
rm -r
删除。
记录部分介绍。参考博客。
spark部署模式包括单机的本地模式、伪分布式模式,集群中的spark自带standalone模式、Spark On yarn模式、Spark On Mesos模式。
在Spark Shell中是交互式执行环境,编程代码调试方便,启动./spark-shell
。
但Spark Shell需要逐行运行,因此一般情况下,会选择将调试后代码打包成独立的Spark应用程序,提交到Spark中运行。打包工具使用SBT,编写好的Spark程序一般通过Spark-submit指令的方式提交给Spark集群进行具体的任务计算,指令详解。
Spark Streaming的原理是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业使用面向批处理的Spark Core进行处理,通过这种方式变相实现流计算,而不是真正实时的流计算,因而通常无法实现毫秒级的响应。因此,对于需要毫秒级实时响应的企业应用而言,仍然需要采用流计算框架(如Storm)。
Kafka常用命令
启动PyCharm:
cd /usr/local/pycharm
./bin/pycharm.sh #启动PyCharm
由于安装了anaconda(具体见下篇(二)),因此相关依赖安装在anaconda的python环境中。
安装kafka-python时,在当前channels找不到包PackagesNotFoundError: The following packages are not available from current channels
,在终端输入
anaconda search -t conda kafka-python
查找包,选择了conda-forge/kafka-python,输入查看详情
anaconda show conda-forge/kafka-python
根据提示安装
conda install --channel https://conda.anaconda.org/conda-forge kafka-python
参考博客
其中,在后期可视化,app文件运行打开网页时,出现The client is using an unsupported version of the Socket.IO or Engine.IO pro
的问题,原因是flask和socketio的engine各种包版本有问题,参考博客修改版本为
Flask-SocketIO==3.0.2,python-engineio==3.13.2, python-socketio==4.2.0
后能正常连接上了。最终python版本依然是3.7(scala版本里不要求python3.5,且3.7更兼容),kafka-python版本与要求一致为1.3.3。