自律 加 专注
自律即自由
专注是魔道
笔记 | Xamarin
阿里云ECS 云翼计划已经关闭,无法再用学生优惠价续费ECS,因此选择购买更便宜的轻量应用服务器,
本文通过创建阿里云ECS的镜像,再在购买轻量应用服务器时选择保存的自定义镜像从而到达快速迁移目的。
失败告终:轻量应用服务器 无法使用 从阿里云ECS创建的镜像
在直线 y = 5x + 3 附近生成服从正态分布的随机点(0,10) 50个,作为拟合直线的样本点
利用最小二乘法(least square)原理,自定义拟合实现这些随机点的一元线性拟合方程y=ωx+b
调用函数库完成随机点的一元线性拟合方程y=ωx+b
绘图描绘随机点、两种方法得到的拟合方程直线
(1)掌握在Linux虚拟机中安装Hadoop和Spark的方法;
(2)熟悉HDFS的基本使用方法;
(3)掌握使用Spark访问本地文件和HDFS文件的方法。
操作系统:Ubuntu 20.04;
Spark版本:3.0.2;
Hadoop版本:2.7.3。
TODO: Python版本:3.4.3。
进入Linux系统,参照本教程官网“实验指南”栏目的“Hadoop的安装和使用”,完成Hadoop伪分布式模式的安装。完成Hadoop的安装以后,再安装Spark(Local模式)。
参考:
1 | FROM ubuntu:20.04 AS base |
1 | # 2. 安装 Java |
1 | # 3. 安装 Hadoop |
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。
Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
接下来,准备 core-site.xml 文件,内容如下:
1 | <configuration> |
hdfs-site.xml 文件,内容如下:
1 | <configuration> |
Hadoop配置文件说明
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),
因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),
不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,
而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。
所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
注意:
core-site.xml, hdfs-site.xml 均放于与 Dockerfile 同级目录
配置文件:
1 | # 3.1 Hadoop伪分布式配置 |
配置完成后,执行 NameNode 的格式化:
1 | # 3.2 配置完成后,执行 NameNode 的格式化 |
1 | # 3.3 配置 ssh 免密登录 |
hadoop-env.sh
1 | # Licensed to the Apache Software Foundation (ASF) under one |
1 | # 3.4 Java环境变量 |
构建镜像
1 | docker build -t spark-python-2 . |
构建过程出现如上图,说明成功格式化。
从镜像中启动,并将宿主机50070端口 映射到 容器内50070端口,最后进入容器内bash终端
1 | docker run -it --name spark-python-2-container -p 50070:50070 -p 4040:4040 spark-python-2 bash |
注意:
50070
为Hadoop WebUI
端口,
4040
为Spark WebUI
端口
启动ssh
1 | /etc/init.d/ssh start |
接着开启 NameNode 和 DataNode 守护进程
1 | start-dfs.sh |
1 | jps |
补充:
停止 hadoop
1 stop-dfs.sh
由于我们已经自己安装了Hadoop,所以这里选择 spark-3.0.2-bin-without-hadoop.tgz
Spark部署模式主要有四种:
Local模式(单机模式)
Standalone模式(使用Spark自带的简单集群管理器)
YARN模式(使用YARN作为集群管理器)
Mesos模式(使用Mesos作为集群管理器)
这里介绍Local模式(单机模式)的 Spark安装。
1 | # 4. 安装 Spark |
spark-env.sh
1 | #!/usr/bin/env bash |
spark-env.sh :
有了上面的配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。
如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。 配置完成后就可以直接使用,不需要像Hadoop运行启动命令。 通过运行Spark自带的示例,验证Spark是否安装成功。
1 | $SPARK_HOME/bin/run-example SparkPi 2>&1 | grep "Pi is" |
安装 Python 是为了 运行
pyspark
1 | RUN apt-get install -y python |
使用hadoop用户名登录进入Linux系统,启动Hadoop,参照相关Hadoop书籍或网络资料,或者也可以参考本教程官网的“实验指南”栏目的“HDFS操作常用Shell命令”,使用Hadoop提供的Shell命令完成如下操作:
(1) 启动Hadoop,在HDFS中创建用户目录“/user/hadoop”;
(2) 在Linux系统的本地文件系统的“/home/hadoop”目录下新建一个文本文件test.txt,并在该文件中随便输入一些内容,然后上传到HDFS的“/user/hadoop”目录下;
(3) 把HDFS中“/user/hadoop”目录下的test.txt文件,下载到Linux系统的本地文件系统中的“/home/hadoop/下载”目录下;
(4) 将HDFS中“/user/hadoop”目录下的test.txt文件的内容输出到终端中进行显示;
(5) 在HDFS中的“/user/hadoop”目录下,创建子目录input,把HDFS中“/user/hadoop”目录下的test.txt文件,复制到“/user/hadoop/input”目录下;
(6) 删除HDFS中“/user/hadoop”目录下的test.txt文件,删除HDFS中“/user/hadoop”目录下的input子目录及其子目录下的所有内容。
(1)在pyspark中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;
(2)在pyspark中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;
(3)编写独立应用程序,读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过 spark-submit 提交到 Spark 中运行程序。
《Spark编程基础》实验报告 | ||
---|---|---|
题目: | 姓名: | 日期: |
实验环境: | ||
实验内容与完成情况: | ||
出现的问题: | ||
解决方案(列出遇到的问题和解决办法,列出没有解决的问题): |
# 补充
进入 Python Spark Shell
1 | ${SPARK_HOME}/bin/pyspark |
补充:
PATH
配置好,也可以直接pyspark
![]()
sc
即默认在 PySpark Shell 中创建的Sparkcontext
Ctrl+D 退出pyspark shell
使用以下命令运行 Python Spark Shell脚本 (script.py)
1 | ${SPARK_HOME}/bin/pyspark script.py |
在
Python Spark Shell 中
运行 script.py
1 | execfile('script.py') |
注意:
当在 pyspark 中运行 py 时,不要再次创建 SparkContext,应当直接 使用
sc
,它会在 pyspark 中默认被创建存在,否则会报错:
1 ValueError: Cannot run multiple SparkContexts at once
TODO: 运行 pyspark 例子
1 | root@a8878d819a6a:/# ${SPARK_HOME}/bin/pyspark |
解决:
方法一:
1 | apt-get install -y python |
方法二:
参考:
注意:
此方法未测试,
Dockerfile
中使用apt-get install -y python
解决此问题
感谢帮助!
Spark MLlib 笔记