租用AutoDL容器
- 注意:结束实验时记得将数据库数据转移存储
使用Docker实现本地IDEA连接AutoDL
- @后为ssh服务器地址
- 用户名为@前的
- 端口号
- ssh密码为用户密码
安装基础工具
- 更新apt
apt-get update
- 更新vim/gedit
apt-get install vim
- 安装sudo
apt-get install sudo
- 安装
sudo apt-get install coreutils
创建新用户
- 不能使用root用户启动Hadoop集群
- 创建hadoop用户
useradd -m hadoop -s /bin/bash
- 设置用户密码
sudo passwd hadoop
- 增加管理员权限
adduser hadoop sudo
安装ssh、配置ssh无密码登录
- Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server
sudo apt-get install openssh-server
使用命令登陆本机
ssh localhost
- 如果有提示,按照提示输入yes回车
- 退出刚才的 ssh,回到原先的终端窗口,利用 ssh-keygen 生成密钥,并将密钥加入到授权中
exit # 退出刚才的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
- 此时再用 ssh localhost 命令,无需输入密码就可以直接登陆
安装JDK
压缩包安装
-
Java下载地址:Oracle Java Download(hadoop不指定特定版本java)
-
解压安装
这里安装的是1.8完整版(jdk1.8.0_381)
cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
cd ~ #进入hadoop用户的主目录
cd Downloads #注意区分大小写字母,刚才已经通过FTP软件把JDK安装包jdk-8u162-linux-x64.tar.gz上传到该目录下
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下
- 配置环境变量
cd ~
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_351 # 自己安装java的位置
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.bashrc
- 查看是否生效
java -version
安装Hadoop
Hadoop常见基本操作
- hadoop下载地址
- 解压安装
sudo tar -zxf ~/下载/hadoop-3.3.4.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.3.4/ ./hadoop # 将文件夹名改为hadoop
# 修改文件权限
sudo chown -R hadoop ./hadoop
sudo chmod -R 777 ./hadoop # 常用这个命令改变权限
- 检查是否可用
cd /usr/local/hadoop
./bin/hadoop version
hadoop伪装分布式
- Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中
- 伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml
- 修改配置文件 core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
- 修改配置文件 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 配置hadoop环境变量
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:$HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
- 在hadoop-env.sh中重新声明JAVA_HOME
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:$HOME/bin
- 配置完成后,执行 NameNode 的格式化
cd /usr/local/hadoop
./bin/hdfs namenode -format
- 开启 NameNode 和 DataNode 守护进程
cd /usr/local/hadoop
./sbin/start-dfs.sh #start-dfs.sh是个完整的可执行文件,中间没有空格
安装MySQL
MySQL常见基本操作
安装Spark
Spark常见基本操作
-
解压安装
sudo tar -zxf ~/下载/spark-1.6.2-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-1.6.2-bin-without-hadoop/ ./spark
sudo chown -R hadoop:hadoop ./spark # 此处的 hadoop 为你的用户名
- 修改~/.bashrc中的配置文件
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
- 修改Spark的配置文件spark-env.sh
cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
# 编辑spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
- 通过运行Spark自带的示例,验证Spark是否安装成功
cd /usr/local/spark
bin/run-example SparkPi
# 可以通过 grep 命令进行过滤
bin/run-example SparkPi 2>&1 | grep "Pi is"
简单项目开发–物流管理系统
前端设计
后端开发
数据处理
数据清洗
数据来源网上,主要利用爬虫方式进行处理数据,对于这些数据则可能发生,字段丢失,或者重复爬取等情况。需要针对于数据进行处理。
本次项目中选用spark进行数据简单处理
准备工作:
- 启动hadoop中分布式文件系统
start-dfs.sh
- 启动spark-shell
spark-shell
- 上传初始化源文件
Hadoop的基本指令
hadoop fs -mkdir -p /douban/input
hadoop fs -put /soft/movie_info.csv /douban/input/
hadoop fs -put /soft/movie_rating.csv /douban/input/
- 查看文件
- 启动spark-shell进行数据处理
scala> val movieInfo=sc.textFile("hdfs://192.168.91.199:9000/douban/input/movie_info.csv")
scala> val movieRating=sc.textFile("hdfs://192.168.91.199:9000/douban/input/movie_rating.csv")
- 数据的去重工作:
scala> val rdd1 = movieInfo.distinct()
scala> val rdd2 = movieRating.distinct()
- 保存到文件中:
scala> rdd1.repartition(1).saveAsTextFile("hdfs://192.168.91.199:9000/douban/output/out1")
scala> rdd2.repartition(1).saveAsTextFile("hdfs://192.168.91.199:9000/douban/output/out2")
- 数据清洗:去除无效数据------每个数据文件中标头
scala> val rdd3 = movieInfo.filter(!_.contains("电影"))
rdd3: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[23] at filter at <console>:26
scala> val rdd4 = movieRating.filter(!_.contains("电影"))
rdd4: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[24] at filter at <console>:26
- 保存本地文件
scala> rdd3.repartition(1).saveAsTextFile("hdfs://192.168.91.199:9000/douban/output/out3")
scala> rdd4.repartition(1).saveAsTextFile("hdfs://192.168.91.199:9000/douban/output/out4")
虚拟机常见错误
- 基础指令无法使用
# 暂时恢复正常
export PATH=/usr/bin:/usr/sbin:/bin:/sbin
补充操作
本地Python通过paramiko对云服务器操作
- 列出hadoop上的文件
import paramiko
# 云服务器的SSH连接信息
host = 'connect.bjb1.seetacloud.com'
port = 40180
username = 'hadoop'
password = '123'
# 创建SSH客户端
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到云服务器
client.connect(host, port, username, password)
# 执行HDFS命令(例如,列出根目录)
hdfs_command = 'hdfs dfs -ls /'
stdin, stdout, stderr = client.exec_command(hdfs_command)
# 输出命令执行结果
print(stdout.read().decode())
# 关闭SSH连接
client.close()
- 文件传输
import paramiko
from scp import SCPClient
# 云服务器的SSH连接信息
host = 'your_server_ip'
port = 22
username = 'your_ssh_username'
password = 'your_ssh_password'
# 创建SSH客户端
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到云服务器
client.connect(host, port, username, password)
# 通过SCP传输本地文件到云服务器上的HDFS
local_file_path = 'path/to/local/file.txt'
remote_hdfs_path = '/path/in/hdfs/'
# 使用SCPClient传输文件
with SCPClient(client.get_transport()) as scp:
scp.put(local_file_path, remote_hdfs_path)
# 关闭SSH连接
client.close()