当前位置: 首页 / 技术干货 / 正文
Python操作HDFS

2023-02-23

   文件 hdfs

Python操作HDFS

  三方库的安装

  Python原生并没有对HDFS的支持,如果想要使用Python来操作HDFS,需要我们安装第三方库 hdfs

  pip install hdfs

  安装完毕后,我们就可以使用python来操作HDFS咯。

  客户端的获取

  在操作HDFS的时候,第一步我们要做的就是获取到HDFS的客户端,建立与HDFS的连接。

  在hdfs模块中有两个类,都是HDFS的客户端:Client和InsecureClient

  ●Client: HDFS客户端类,其中定义了对HDFS的操作,但是不能指定操作的用户

  ●InsecureClient: Client的子类,可以指定操作的用户

  from hdfs import InsecureClient

  """

  1. 创建客户端对象,需要设置两个参数

  url: 连接到的HDFS的namenode,需要设置的是webui的地址

  user: 设置操作HDFS的用户

  """

  client = InsecureClient(url="http://qianfeng01:9870", user="root")

  增操作

  # 1. 创建一个新的文件夹

  client.makedirs("/py_dir")

  # 2. 上传本地文件

  client.upload("/py_dirs", "./1. Python操作HDFS.py", )

  # 3. 直接创建文件

  client.write("/py_dir/test.file", data="this is a py file", overwrite=True, enco

  删操作

  # 1. 删除文件

  client.delete("/py_dir/test.file")

  # 2. 删除文件夹,默认只能删除空的文件夹

  # 如果需要删除非空的文件夹,需要设置recursive为True,实现递归删除

  client.delete("/py_dir", recursive=True)

  改操作

  # 1. 重命名文件、文件夹

  client.rename("/py_dir", "/py_dirs")

  查操作

  # 1. 列举一个文件夹下有什么文件,返回一个list

  sub = client.list("/")

  print(type(sub), sub)

  # 2. 查看文件属性

  # strict:

  # True: 严格模式,如果指定的文件/文件夹不存在,则会抛异常。默认。

  # False: 非严格模式,如果指定的文件/文件夹不存在,不会抛异常,返回None。

  # 返回值是一个字典:

  # blockSize: 块大小

  # accessTime: 访问时间

  # childrenNum: 子文件的数量,对于文件来说就是0

  # fileId: 文件ID

  # group: 所属用户组

  # length: 文件大小(字节)

  # modificationTime: 文件修改时间

  # owner: 所属用户

  # permission: 文件权限

  # replication: 副本数量

  # type : 文件类型 DIRECTORY|FILE

  print(client.status("/py_dirs"))

  # 3. 查看文件中的内容,返回_GeneratorContextManager

  res = client.read("/py_dirs/1. Python操作HDFS.py")

  print(res)

  res.close()

  with client.read("/py_dirs/1. Python操作HDFS.py") as file:

  # read会将读取到的数据存储到data中,用utf8解码即可

  print(file.data.decode("utf8"))

  # 4. 对于大型的文件,如果直接读取到内存中,可能会造成内存溢出的情况。因此需要分段读取

  file_path = "/py_dirs/1. Python操作HDFS.py"

  offset = 0

  length = 128

  file_length = client.status(file_path).get("length")

  while offset < file_length:

  with client.read(file_path, offset=offset, length=length) as reader:

  print(reader.data.decode("utf8"))

  offset += length

  # 5. 下载文件到本地

  client.download("/py_dirs", "./")

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号