python操作hdfs

3 篇文章 0 订阅
2 篇文章 0 订阅
from pyhdfs import HdfsClient
import time
from config import config


class OperaHdfs(object):
    def __init__(self):
        self.hosts = 'nn1.example.com:50070,nn2.example.com:50070'
        self.fs = HdfsClient(hosts=self.hosts, user_name='hdfs')

    def jug(self, file):
        """
        判断路径/文件是否存在
        :param file:
        :return:
        """
        return self.fs.exists(file)

    def mkpath(self, path):
        """
        创建路径
        :param path:
        :return:
        """
        if not self.jug(path):
            return self.fs.mkdirs(path)

    def delpath(self, path):
        """
        删除文件夹
        :param path:
        :return:
        """
        if self.jug(file=path):
            return self.fs.delete(path, recursive=True)

    def get_file_path(self, hdfs_path, partition_dict):
        """
        获取目标文件存储的路径(文件前一级)
        :param hdfs_path:
        :param partition_dict:
        :return:
        """
        if partition_dict:
            for partition_name, partition_value in partition_dict.items():
                hdfs_path += '/{}={}'.format(partition_name, partition_value)
        self.mkpath(path=hdfs_path)
        return hdfs_path

    def write_hdfs(self, info, hdfs_path, file_name, partition_dict=None, write_mode='append'):
        """
        :param info: 即将写入hdfs的数据
        :param hdfs_path:  the path of file on hdfs
        :param file_name:  the file name on hdfs
        :param partition_dict:  hive table partition
        :param write_mode:  write mode
        :return:
        """
        file_path = self.get_path(hdfs_path, file_name, partition_dict)
        file = '{}/{}'.format(file_path, file_name)

        if self.jug(file=file):
            if write_mode == 'append':
                timestamp = round(time.time() * 1000)
                if '.' in file_name:
                    file_name_name, file_name_tail = file_name.split('.')
                    file_name_name = '{}_{}'.format(file_name_name, timestamp)
                    file_name = '{}.{}'.format(file_name_name, file_name_tail)
                else:
                    file_name = '{}_{}'.format(file_name, timestamp)
                file = '{}/{}'.format(file_apth, file_name)

            if write_mode == 'nonConflict':
                raise Exception('file {} is exists'.format(file))

            if write_mode == 'overwrite':
                self.delpath(path=file_path)
                file_path = self.get_path(hdfs_path, file_name, partition_dict)
                file = '{}/{}'.format(file_path, file_name)

        self.fs.create(file, info.encode('utf-8'))


opera_hdfs = OperaHdfs()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFSHadoop Distributed File System)是Apache Hadoop生态系统中的一部分,是一个分布式文件系统,用于存储和管理大规模数据集。HDFS旨在运行在低成本硬件上,并具有高容错性、高可扩展性和高吞吐量等优点。Python是一种流行的编程语言,可以用于操作HDFS系统文件。 Python操作HDFS系统文件的背景: 随着大数据技术的发展,越来越多的企业和组织开始使用HadoopHDFS来存储和管理大规模数据集。而Python作为一种广泛使用的编程语言,对于许多数据科学家和工程师来说是必不可少的工具。因此,Python操作HDFS系统文件的需求也越来越大。 Python操作HDFS系统文件的研究意义: 1. 提高工作效率:使用Python操作HDFS系统文件可以帮助数据科学家和工程师更快地处理和管理大规模数据集,提高工作效率。 2. 扩展应用场景:Python的广泛应用和HDFS的高可扩展性使得Python操作HDFS系统文件的应用场景更加广泛,可以应用于各种类型的数据处理和分析。 3. 降低技术门槛:使用Python操作HDFS系统文件可以降低技术门槛,使得更多的人可以轻松地处理和管理大规模数据集。 4. 促进技术创新:Python操作HDFS系统文件的应用可以促进技术创新,鼓励开发人员开发更多的工具和库来简化数据处理和管理。 总之,Python操作HDFS系统文件是一个有意义的研究方向,可以帮助我们更好地处理和管理大规模数据集,促进数据科学和工程的发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值