实现功能:vscode远程连接ubuntu调用Anaconda-jypyter+使用python的hdfs包调用hadoop的HDFS
安装Anaconda:
虚拟机:Python-vscode
1.下载Anconda安装包
安装Anaconda之前需要先下载安装包,这里提供两种下载方式:网页手动下载、wget命令下载。两种方式均可,我自己使用的是wget命令行下载。因为wget命令非常稳定。
网页手动下载:在Ubuntu系统里面使用firefox浏览器进入Anaconda官网:https://www.anaconda.com/
点击Download下载到本地(PS:Anaconda会根据访问网页所使用的系统,推荐对应的Anaconda版本,用户无需担心版本错误。如果有特定版本需要的朋友,则可以根据需要自行下载对应版本的Anaconda)。
2. 安装A’nconda
STEP1:使用bash命令安装Anaconda
Control +Alt +T 打开新的命令行窗口,使用bash
命令安装Anaconda
bash ~/Downloads/Anaconda3-2021.11-Linux-x86_64.sh
注意bash
指令后面~/Downloads/Anaconda3-2021.11-Linux-x86_64.sh
包含了安装包所在路径~/Downloads/
和安装包名Anaconda3-2021.11-Linux-x86_64.sh
。
STEP2:阅读并接受安装协议
在STEP1中已经执行了安装命令。指令执行结果首先让我们审阅安装协议,这里一直按Enter直到出现 Do you accept the license terms? [yes|no] ,表示协议阅读完毕输入yes即可继续安装,如下:

STEP3:确认安装位置
在STEP2输入yes后会提示确认安装位置,这里点击Enter,默认即可,界面如下:

接下来Anaconda就会开始安装。
STEP4:初始化Anaconda(包含环境变量的设置)
执行完STEP3Anaconda在Ubuntu系统里面的安装基本完毕了,但是还需要最后一步 初始化Anaconda,这一步只需要根据提示输入yes即可,界面如下:

如果出现以下界面,那么恭喜你已经成功在Ubuntu系统里面安装上Anaconda啦,鼓掌撒花👏👏🎉🎉~,那么接下来就是进一步的学习和使用了。

PS:Anaconda安装完成以后出现的个提示解读
1️⃣For changes to take effect, close and re-open your current shell.,翻译过来就是:关闭当前命令行,并重新打开,刚刚安装和初始化Anaconda设置才可以生效,重新打开一个命令行后直接就进入了conda的base环境,如下:

2️⃣If you’d prefer that conda’s base environment not be activated on startup, set the auto_activate_base parameter to false: ,翻译过来就是:如果您希望 conda 的基础环境在启动时不被激活,请将 auto_activate_base 参数设置为 false,命令如下:
conda config --set auto_activate_base false
当然这一条命令执行完毕后,想要再次进入conda的base环境,只需要使用对应的conda指令即可,如下:
conda activate base
效果如下:

3.conda常见命令
参见博主另一篇博文:conda常用指令
2.安装jupyter:
虚拟机:Python-vscode
安装 jupyter notebook
conda install jupyter notebook
配置文件进行配置
创建密码
ipython
from jupyter_server.auth import passwd
passwd()

输入密码生成字符串
类似这种字符串即可用密码
argon2:argon2idargon2idargon2idv=19$m=
执行退出
exit()
创建配置文件
jupyter notebook --generate-config
根据显示路径找 jupyter_notebook_config.py

打开文件 jupyter_notebook_config.py
vim ~/.jupyter/jupyter_notebook_config.py
vim 使用 按下英文大写 G 快速到最后一行
在配置文件中的关键配置
添加到文件最后即可 配置上面密码和自己端口号
c.ServerApp.allow_remote_access = True #允许远程连接
c.ServerApp.ip='*' # 设置所有ip皆可访问
c.ServerApp.password = '这里写上面生成的密码argon2.......' #之前复制的密码,或者输入的字符
c.ServerApp.open_browser = False # 禁止自动打开浏览器
c.ServerApp.port =8888 #任意指定一个端口

wq 保存退出
启动 jupyter
jupyter notebook --allow-root

输入服务器地址 0.0.0.0:8888
即可访问

最终成果:

编写python文件以调用hadoop的HDFS
虚拟机:Hadoop(Ubuntu)
在hadoop上添加文件user等,并启动hadoop

此次使用python的hdfs库操作HDFS,首相安装该库:pip install hdfs
其次,要保证HDFS可用,如下图就代表可用,当然你列出的文件和我的不同

为了正常运行,本次远程连接调用InsecureClient类。
连接操作
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong') # 指定远程地址,和用户名
print(lian.list('/')) # 列出根目录下的所有文件
增加文件夹
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.makedirs('/niubi') # 在根目录下创建一个文件夹,名字叫做niubi
print(lian.list('/'))
增加文件/写文件
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.write(hdfs_path='/niubi/shang', overwrite=True, data='世界你好,我来了'.encode('utf-8')) # 在/niubi/目录下面创建名字为shang的文件,里面写入数据“世界你好,我来了”。注意,数据要使用utf-8编码才行,该方法还有一个要注意的参数,append参数用于说明要不要覆盖已有的内容,默认为False,即在尾部添加。overwrite参数指明如果文件已经存在时的操作,True表示覆盖,False时如果文件已存在就抛异常
print(lian.list('/niubi'))
上传文件
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.upload(hdfs_path='/', local_path='C:/Users/gzsqy/Desktop/Git.md') # 注意目录使用的是正斜杠/,而不是反斜杠\
print(lian.list('/'))
查文件夹
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print(lian.list('/')) # 查看根目录下的所有文件夹
查看文件是否存在
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print(lian.status(hdfs_path='/Git.mds', strict=False)) # strict如果设置为True时,文件不存在就会抛出异常,如果为False文件不存在就会返回None。如果文件存在,不管设置了什么都会返回改文件的block信息
查看文件的内容
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
with lian.read('/niubi/shang') as f: # read方法返回的是上下文管理器对象,所以要使用with调用
print(f.data.decode('utf-8')) # 返回的数据放在read函数的data变量里面,并且存储的是utf-8的编码,所以要转码才能看到中文,当然,英文不用转码
read函数有几个参数要注意
offset:指定开始读取的偏移量
length:指定读取的长度,默认读取文件所有内容。如果文件内容太大,比如几个G的大小,后果你懂得。
buffer_size:缓冲区大小
chunk_size:该值有三种情况(也可以说是两种)
该值默认为0,执行函数后返回的结果是一个上下文管理器对象。
如果设置为正值如1,那么就会在结果的上下文管理器对象中使用生成器的方式返回文件内容
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
with lian.read('/xiaomi.txt', chunk_size=1) as f:
for i in f:
print(i)
第三情况要参考另一个参数delimiter,在上下文管理器中将返回结果切
delimiter:用于指定分隔符。比如csv格式的文件使用半角的逗号作为分隔符
删除文件
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print('删除前:', lian.list('/niubi'))
lian.delete('/niubi/shang') # 指定要删除的文件位置
print('删除后:', lian.list('/niubi'))
删除文件夹
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print('删除前:', lian.list('/'))
lian.delete('/niubi') # 指定要删除的文件夹位置
print('删除后:', lian.list('/'))
重命名文件夹
from hdfs import InsecureClient
lian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.makedirs('/niubi') # 上一步删除了文件夹,这里再新建回来
print('重命名前:', lian.list('/'))
lian.rename('/niubi', '/niniubi') # 旧文件夹名称位置,新文件夹名称位置
print('重命名后:', lian.list('/'))
效果展示:
编写python文件,导包hdfs,并运用其方法

输出展示:
