=====================================================================================
写在前边的话:
之前做的Hadoop集群,组合了Hive,Hbase,sqoop,Spark等开源工具,现在要对他们做一个Web的可视化操作,由于本小白只懂如何使用Python做一个交互的web应用,所以这里就选择了python的Django
Django教程参考:Django从manage.py shell 到项目部署
hadoop集群操作请参考:三台PC服务器部署高可用hadoop集群
言归正传:
使用python操作hdfs本身并不难,只不过是把对应的shell 功能“翻译”成高级语言,网上大部分使用的是
pyhdfs:官方文档
hdfs:官方文档
libhdfs(比较狗血)
我这里选用的是hdfs,下边的实例都是基于hdfs包进行的
1:安装
由于我的是windows环境(Linux其实也一样),只要有pip或者setup_install安装起来都是很方便的
2:Client——创建集群连接
其他参数说明:
classhdfs.client.
Client
(url, root=None, proxy=None, timeout=None, session=None)
url:ip:端口
root:制定的hdfs根目录
proxy:制定登陆的用户身份
timeout:设置的超时时间
seesion:requests.Session instance, used to emit all requests.(不是太懂,应该四用户发出请求)
这里我们着重看一下proxy这个,首先我们指定root用户连接
看起来一切正常的样子,接下来我们指定一个别的用户,比如说gamer再看 这时候就抛出异常了
3:dir——查看支持的方法
4:status——获取路径的具体信息
其他参数:status
(hdfs_path, strict=True)
hdfs_path:就是hdfs路径
strict:设置为True时,如果hdfs_path路径不存在就会抛出异常,如果设置为False,如果路径为不存在,则返回None
从例子中可以看出,当设置为false时,路径不存在,什么也不输出
5:list——获取指定路径的子目录信息
其他参数:list
(hdfs_path, status=False)
status:为True时,也返回子目录的状态信息,默认为Flase
6:makedirs——创建目录
其他参数:makedirs
(hdfs_path, permission=None)
permission:设置权限
如果想在远程客户端通过脚本给hdfs创建目录,需要修改hdfs-site.xml,一般我么需要指定permission,否则容易报错,可以指定为755
1
2
3
4
|
<property>
<name>dfs.permissions</name>
<value>
false
</value>
</property>
|
可以看出该文件夹的权限是777
7:rename—重命名
格式说明:rename
(hdfs_path, local_path)
8:delete—删除
其他参数:delete
(hdfs_path, recursive=False)
recursive:删除文件和其子目录,设置为False如果不存在,则会抛出异常,默认为False
9:upload——上传数据
=======================分割线==========================
为什么这里需要分割线?因为在做web平台可视化操作hdfs的时候遇到了问题!错误如下:
对错误的理解:看其大意是Http连接太多,没有及时关闭,导致错误 (PS:网上对hdfs操作的资料比较少,大部分都只停留在基础语法层面,但对于错误的记录及解决办法少之又少)
解决办法:暂无
由于我是在windows上操作集群的,而我的集群是在服务器上部署的,所以我考虑是否在服务器上尝试下载和上传数据,果断ok
其他参数:
upload
(
hdfs_path
,
local_path
,
overwrite=False
,
n_threads=1
,
temp_dir=None
,
chunk_size=65536,progress=None, cleanup=True, **kwargs)
overwrite:是否是覆盖性上传文件
n_threads:启动的线程数目
temp_dir:当overwrite=true时,远程文件一旦存在,则会在上传完之后进行交换
chunk_size:文件上传的大小区间
progress:回调函数来跟踪进度,为每一chunk_size字节。它将传递两个参数,文件上传的路径和传输的字节数。一旦完成,-1将作为第二个参数
cleanup:如果在上传任何文件时发生错误,则删除该文件
10:download——下载
其他参数:
download
(
hdfs_path
,
local_path
,
overwrite=False
,
n_threads=1
,
temp_dir=None
,
**kwargs
)
参考上传 upload
11:read——读取文件
同样在windows客户端上执行依旧报错,在hadoop的节点服务器上执行
其他参数:read
(
*args
,
**kwds
)
hdfs_path:hdfs路径
offset:设置开始的字节位置
length:读取的长度(字节为单位)
buffer_size:用于传输数据的字节的缓冲区的大小。默认值设置在HDFS配置。
encoding:制定编码
chunk_size:如果设置为正数,上下文管理器将返回一个发生器产生的每一chunk_size字节而不是一个类似文件的对象
delimiter:如果设置,上下文管理器将返回一个发生器产生每次遇到分隔符。此参数要求指定的编码。
progress:回调函数来跟踪进度,为每一chunk_size字节(不可用,如果块大小不是指定)。它将传递两个参数,文件上传的路径和传输的字节数。称为一次与- 1作为第二个参数。
附:在对文件操作时,可能会提示错误
解决办法是:在配置文件hdfs-site.xml中加入 重启集群即可
基本常用的功能也就这些了,如果需要一些特殊的功能,可以自己执行help(client.method)进行查看
=====================================================================================
写在前边的话:
之前做的Hadoop集群,组合了Hive,Hbase,sqoop,Spark等开源工具,现在要对他们做一个Web的可视化操作,由于本小白只懂如何使用Python做一个交互的web应用,所以这里就选择了python的Django
Django教程参考:Django从manage.py shell 到项目部署
hadoop集群操作请参考:三台PC服务器部署高可用hadoop集群
言归正传:
使用python操作hdfs本身并不难,只不过是把对应的shell 功能“翻译”成高级语言,网上大部分使用的是
pyhdfs:官方文档
hdfs:官方文档
libhdfs(比较狗血)
我这里选用的是hdfs,下边的实例都是基于hdfs包进行的
1:安装
由于我的是windows环境(Linux其实也一样),只要有pip或者setup_install安装起来都是很方便的
2:Client——创建集群连接
其他参数说明:
classhdfs.client.
Client
(url, root=None, proxy=None, timeout=None, session=None)
url:ip:端口
root:制定的hdfs根目录
proxy:制定登陆的用户身份
timeout:设置的超时时间
seesion:requests.Session instance, used to emit all requests.(不是太懂,应该四用户发出请求)
这里我们着重看一下proxy这个,首先我们指定root用户连接
看起来一切正常的样子,接下来我们指定一个别的用户,比如说gamer再看 这时候就抛出异常了
3:dir——查看支持的方法
4:status——获取路径的具体信息
其他参数:status
(hdfs_path, strict=True)
hdfs_path:就是hdfs路径
strict:设置为True时,如果hdfs_path路径不存在就会抛出异常,如果设置为False,如果路径为不存在,则返回None
从例子中可以看出,当设置为false时,路径不存在,什么也不输出
5:list——获取指定路径的子目录信息
其他参数:list
(hdfs_path, status=False)
status:为True时,也返回子目录的状态信息,默认为Flase
6:makedirs——创建目录
其他参数:makedirs
(hdfs_path, permission=None)
permission:设置权限
如果想在远程客户端通过脚本给hdfs创建目录,需要修改hdfs-site.xml,一般我么需要指定permission,否则容易报错,可以指定为755
1
2
3
4
|
<property>
<name>dfs.permissions</name>
<value>
false
</value>
</property>
|
可以看出该文件夹的权限是777
7:rename—重命名
格式说明:rename
(hdfs_path, local_path)
8:delete—删除
其他参数:delete
(hdfs_path, recursive=False)
recursive:删除文件和其子目录,设置为False如果不存在,则会抛出异常,默认为False
9:upload——上传数据
=======================分割线==========================
为什么这里需要分割线?因为在做web平台可视化操作hdfs的时候遇到了问题!错误如下:
对错误的理解:看其大意是Http连接太多,没有及时关闭,导致错误 (PS:网上对hdfs操作的资料比较少,大部分都只停留在基础语法层面,但对于错误的记录及解决办法少之又少)
解决办法:暂无
由于我是在windows上操作集群的,而我的集群是在服务器上部署的,所以我考虑是否在服务器上尝试下载和上传数据,果断ok
其他参数:
upload
(
hdfs_path
,
local_path
,
overwrite=False
,
n_threads=1
,
temp_dir=None
,
chunk_size=65536,progress=None, cleanup=True, **kwargs)
overwrite:是否是覆盖性上传文件
n_threads:启动的线程数目
temp_dir:当overwrite=true时,远程文件一旦存在,则会在上传完之后进行交换
chunk_size:文件上传的大小区间
progress:回调函数来跟踪进度,为每一chunk_size字节。它将传递两个参数,文件上传的路径和传输的字节数。一旦完成,-1将作为第二个参数
cleanup:如果在上传任何文件时发生错误,则删除该文件
10:download——下载
其他参数:
download
(
hdfs_path
,
local_path
,
overwrite=False
,
n_threads=1
,
temp_dir=None
,
**kwargs
)
参考上传 upload
11:read——读取文件
同样在windows客户端上执行依旧报错,在hadoop的节点服务器上执行
其他参数:read
(
*args
,
**kwds
)
hdfs_path:hdfs路径
offset:设置开始的字节位置
length:读取的长度(字节为单位)
buffer_size:用于传输数据的字节的缓冲区的大小。默认值设置在HDFS配置。
encoding:制定编码
chunk_size:如果设置为正数,上下文管理器将返回一个发生器产生的每一chunk_size字节而不是一个类似文件的对象
delimiter:如果设置,上下文管理器将返回一个发生器产生每次遇到分隔符。此参数要求指定的编码。
progress:回调函数来跟踪进度,为每一chunk_size字节(不可用,如果块大小不是指定)。它将传递两个参数,文件上传的路径和传输的字节数。称为一次与- 1作为第二个参数。
附:在对文件操作时,可能会提示错误
解决办法是:在配置文件hdfs-site.xml中加入 重启集群即可
基本常用的功能也就这些了,如果需要一些特殊的功能,可以自己执行help(client.method)进行查看