总所周知,python是一门很强大的语言,主要在于它有着丰富的第三方模块,当然连接hdfs的模块也不例外。

在python中有一个模块也叫hdfs,可以使用它连接hadoop的hdfs。直接pip install hdfs即可。我们使用python的hdfs可以达到和hadoop shell一样的效果

import hdfs
# 1.如何连接hadoop上的hdfs
'''
参数:
def __init__(self, url, root=None, proxy=None, timeout=None, session=None):
    url:这里的url就是我们在浏览器查看hdfs时的连接,也就是ip:端口
    root:指定hdfs的根目录
    proxy:指定用户的登录身份
    timeout:设定的超时时间
    session:requests模块里面的session类的实例,用来发出请求
'''
client = hdfs.Client("http://ubuntu:50070")

# 2.查看路径的具体信息
'''
参数:
def status(self, hdfs_path, strict=True):
    hdfs_path:路径,这里我们指定/,也就是根目录
    strict:严格模式,默认为True,表示路径不存在就会抛出异常,为False路径不存在则返回None
'''
client.status(hdfs_path="/")

# 3.查看指定目录里的文件或目录
'''
参数:
def list(self, hdfs_path, status=False):
    hdfs_path:路径
    status:默认为False,如果为True,则不仅显示有哪些文件或目录,还显示具体的信息
'''
client.list("/")

# 4.创建目录
'''
参数:
def makedirs(self, hdfs_path, permission=None):
    hdfs_path:创建的目录,值得一提的是,这个是可以递归创建的
    permission:设置权限,比如777,可读可写可执行
'''
client.makedirs("/古明地觉/hello.txt")

# 5.重命名
'''
参数:
def rename(self, hdfs_src_path, hdfs_dst_path):
    hdfs_src_path:源文件
    hdfs_dst_path:新文件
'''
client.rename("/古明地觉/hello.txt", "/古明地觉/hello_satori.txt")

# 6.删除
'''
参数:
def delete(self, hdfs_path, recursive=False):
    hdfs_path:路径
    recursive:表示是否递归,默认为False
'''
client.delete("/古明地觉/hello_satori.txt", recursive=True)

# 7.上传文件
'''
参数:
def upload(self, hdfs_path, local_path, overwrite=False, n_threads=1,
    temp_dir=None, chunk_size=2 ** 16, progress=None, cleanup=True, **kwargs):
    hdfs_path:hdfs路径
    local_path:本地文件路径,仔细一看这和hdfs dfs -put 本地 hdfs,刚好是相反的。表示从本地上传文件到hdfs
    overwrite:就是遇见同名的,是否覆盖
    n_threads:启动的线程数
    temp_dir:当overwrite=true时,远程文件一旦存在,则会在上传完之后进行交换
    chunk_size:文件上传的大小区间
    progress:回调函数来跟踪进度,为每一chunk_size字节。它将传递两个参数,文件上传的路径和传输的字节数。一旦完成,-1将作为第二个参数
    cleanup:如果在上传任何文件时发生错误,则删除该文件
'''
client.upload("/", "/home/satori/Desktop/diary")

# 8.下载文件
'''
参数:
def download(self, hdfs_path, local_path, overwrite=False, n_threads=1,
    temp_dir=None, **kwargs):
    hdfs_path:hdfs文件路径
    local_path:本地文件路径,表示从hdfs下载文件到本地
'''
client.download("/hello.txt", "/home/satori/Desktop/hello.txt")

  

但当我们想创建文件的时候,却出现了如下错误

不要怕,这个只需要修改一下配置文件core-site.xml即可。

然后重启hadoop集群

HDFS文件读写流程

HDFS的优点

数据冗余,硬件容错

  解决了数据存储的丢失问题,一个节点挂掉了,还可从其他的节点读取数据。尽管这个一定程度增加了数据存储的浪费,但是更加安全

处理流式的数据访问

  这个流式并不是流式处理,而是一次写入,多次读取的操作

适合存储大文件

  可以存储大文件,即使数据量很大,也可以通过扩展机器来解决

可以部署在廉价的机器上

  可以使用廉价的机器进行部署,相比于使用小型机和刀片机,可以大幅度的降低价格

HDFS的缺点

低延迟的数据访问

  数据可能会比较大,要在秒级别对想要的数据进行检索是不现实的

不适合小文件的存储

  不管文件是127M还是1M,都是有对应的元数据存放在对应的namenode上面。如果小文件很多,意味着元数据所占用的内存信息也会很大,对namenode的压力也越大

2.如何使用python连接hdfs的更多相关文章

  1. python读取hdfs并返回dataframe教程

    不多说,直接上代码 from hdfs import Client import pandas as pd HDFSHOST = "http://xxx:50070" FILENA ...

  2. 使用Python访问HDFS

    最近接触到大数据,对于Skpark和Hadoop的料及都停留在第一次听到这个名词时去搜一把看看大概介绍免得跟不上时代的层次. 在实际读了点别人的代码,又自己写了一些之后,虽然谈不上理解加深,至少对于大 ...

  3. 【初学python】使用python连接mysql数据查询结果并显示

    因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...

  4. python连接mysql的驱动

    对于py2.7的朋友,直接可以用MySQLdb去连接,但是MySQLdb不支持python3.x.这是需要注意的~ 那应该用什么python连接mysql的驱动呢,在stackoverflow上有人解 ...

  5. paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误

    paip. 解决php 以及 python 连接access无效的参数量.参数不足,期待是 1"的错误 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源 ...

  6. python 连接sql server

    linux 下pymssql模块的安装 所需压缩包:pymssql-2.1.0.tar.bz2freetds-patched.tar.gz 安装: tar -xvf pymssql-2.1.0.tar ...

  7. paip.python连接mysql最佳实践o4

    paip.python连接mysql最佳实践o4 python连接mysql 还使用了不少时间...,相比php困难多了..麻烦的.. 而php,就容易的多兰.. python标准库没mysql库,只 ...

  8. python连接字符串的方式

    发现Python连接字符串又是用的不顺手,影响速度 1.数字对字符进行拼接 s=""  #定义这个字符串,方便做连接 print type(s) for i in range(10 ...

  9. python连接zookeeper的日志问题

    用python连接zookeeper时,在终端里,一直会有zookeeper的日志冒出来,这样会很烦. -- ::,:(: Exceeded deadline by 11ms 解决方法是在连接后设置一 ...

随机推荐

  1. 去西交大考PAT认证

    这周六去了西交大去考浙大PAT认证,为什么要写这个博客呢.因为...我不是西交大的学生,找考场就花了我很多时间,各种搜都找不到PAT的考场在哪. 在此记录一下,希望有有缘人再去西交大考试,可以少走点弯 ...

  2. SQLAlchemy 学习笔记(二):ORM

    照例先看层次图 一.声明映射关系 使用 ORM 时,我们首先需要定义要操作的表(通过 Table),然后再定义该表对应的 Python class,并声明两者之间的映射关系(通过 Mapper). 方 ...

  3. Hash表 算法的详细解析

    http://xingyunbaijunwei.blog.163.com/blog/static/76538067201111494524190/ 什么是HashHash,一般翻译做“散列”,也有直接 ...

  4. 《SQL入门经典》总结

    <SQL入门经典>这本书从考试前就开了个头,一直到前两天才看完,拉的战线也够长的.放假来了,基本上什么内容都不记得了.好不容易看完了,就赶紧总结一下吧! 该书分为两大部分,第一部分是第1~ ...

  5. 【EasyNetQ】- 控制队列名称

    在为队列生成名称时,EasyNetQ的默认行为是使用消息类型名称并将其附加到订阅ID.例如PartyInvitation,命名空间中的消息类型EasyNetQ.Tests.Integration将使用 ...

  6. To Chromium之浏览器外框UI

    先不去管那些webkit,V8 engine, Parser, security,IPC... 先来看看Chromium的外框UI是那些code负责的,如果自己可以定制化一下,应该蛮好玩的. TBD. ...

  7. elementUI中的el-form怎么使用正则进行验证

    http://element.eleme.io/#/zh-CN/component/form里给出了一个form验证的例子,但是都是使用el-form带有的验证规则,怎么使用自己定义的规则进行验证呢? ...

  8. delphi数据库进行增加操作时,怎么判断插入的这个值是否已经存在?

    //增 procedure TForm1.btnAddClick(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQu ...

  9. 左右躲避障碍-神手ts版本

    TypeScript-左右躲避障碍-神手 学习typescript,第一步应该是学习官方文档,理解最基础的语法.第二步开始用typescript实现一些js+css 或者canvas类型的游行.现在开 ...

  10. 【bzoj1806】[Ioi2007]Miners 矿工配餐 dp

    题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入 ...