使用Python访问HDFS
最近接触到大数据,对于Skpark和Hadoop的料及都停留在第一次听到这个名词时去搜一把看看大概介绍免得跟不上时代的层次。
在实际读了点别人的代码,又自己写了一些之后,虽然谈不上理解加深,至少对于大数据技术的整体布局有了更清晰的认识。
HDFS主要用来存储文件系统,虽然Spark有自己的RDD,但是似乎并未被启用。我需要的数据,是通过Spark服务启动的计算程序,写入HDFS中的。
#这结构怎么看都感觉有点怪。
Spark支持Java、Scala和Python开发,对我来说是个好事。唯一的问题就是如何从HDFS中读取我需要的数据。
Python的HDFS相关包有很多,我使用的是hdfs,根据官方文档的说法,同时支持hdfs和WebHDFS,默认创建client的方式好像是WebHDFS,
需要通过datanode进行文件操作,而HDFS则是通过namenode进行文件操作,在这里卡了很久,也换过snakebite等包,直到把端口换成datanode,才正常连接。
※参照文档:http://fatkun.com/2014/11/httpfs-and-webhdfs.html
hdfs包的安装命令:
sudo pip install hdfs
启动hdfs:
>>> from hdfs.client import Client
>>> client = Client("http://localhost:50070") # 50070: Hadoop默认namenode
>>> dir(client)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__registry__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_append', '_append_1', '_create', '_create_1', '_delete', '_get_content_summary', '_get_file_checksum', '_get_file_status', '_get_home_directory', '_list_status', '_mkdirs', '_open', '_rename', '_request', '_session', '_set_owner', '_set_permission', '_set_replication', '_set_times', '_timeout', 'checksum', 'content', 'delete', 'download', 'from_options', 'list', 'makedirs', 'parts', 'read', 'rename', 'resolve', 'root', 'set_owner', 'set_permission', 'set_replication', 'set_times', 'status', 'upload', 'url', 'walk', 'write']
>>>
其中用到的方法有:
walk() 类似os.walk,返回值也是包含(路径,目录名,文件名)元素的数组,每层迭代。
read() 类似file.read,官方文档的说法是client.read必须在with块里使用:
with client.read(filepath) as fs:
content = fs.read()
write() 写文件,同样需要在with块中使用:
client.write(filepath, data=data_str, encoding='utf-8')
还有一种写法:
from hdfs.hfile import Hfile
hfile = Hfile(hostname, port, path, mode='w')
hfile.write(data)
hfile.close()
hfile = Hfile(hostname, port, path)
data = hfile.read()
hfile.close()
在filepath中,如果有不存在的路径,会被直接创建出来。
目前用到的只有这些,后面如果涉及新的方法或者模块,会继续增加。
※ 关于Spark部署任务
Spark部署任务的命令,是spark-submit,语法是
./bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
默认可以直接使用Java程序的jar包,Scala是基于Java的,同样可以打包成jar,对于python文件,需要在<application-jar>处使用--py-files定义,单个文件可以直接写出,多个文件的话可以打包成.zip或.egg。
参考:http://spark.apache.org/docs/latest/submitting-applications.html
使用Python访问HDFS的更多相关文章
- 【转】Python 访问 HDFS
1.前言 hdfs , Hadoop Distributed File System.Hadoop的分布式文件系统,安全行和扩展性没得说. 访问HDFS的方式有以下几种: 命令行方式:FS Shell ...
- python读取hdfs上的parquet文件方式
在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊.从hdfs上使用python获取parquet格式数据的方法(当然也 ...
- 2.如何使用python连接hdfs
总所周知,python是一门很强大的语言,主要在于它有着丰富的第三方模块,当然连接hdfs的模块也不例外. 在python中有一个模块也叫hdfs,可以使用它连接hadoop的hdfs.直接pip i ...
- windows通过thrift访问hdfs
thirift是一个支持跨种语言的远程调用框架,通过thrift远程调用框架,结合hadoop1.x中的thriftfs,编写了一个针对hadoop2.x的thriftfs,供外部程序调用. 1.准备 ...
- Python访问sqlite3数据库取得dictionary的正路!
[引子] 很多人都知道,Python里是内置了很好用的sqlite3的.但这个库有个缺陷,在执行fetchall()/fetchone()等方法后,得到的是一个tuple.以前吧,做自己的小项目,tu ...
- 通过Thrift访问HDFS分布式文件系统的性能瓶颈分析
通过Thrift访问HDFS分布式文件系统的性能瓶颈分析 引言 Hadoop提供的HDFS布式文件存储系统,提供了基于thrift的客户端访问支持,但是因为Thrift自身的访问特点,在高并发的访问情 ...
- 利用JavaAPI访问HDFS的文件
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- Hadoop(五)搭建Hadoop与Java访问HDFS集群
前言 上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat ...
- Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
前言 我们知道HDFS集群中,所有的文件都是存放在DN的数据块中的.那我们该怎么去查看数据块的相关属性的呢?这就是我今天分享的内容了 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 我 ...
随机推荐
- [19/04/01-星期一] IO技术_字节流分类总结(含字节数组(Array)流、字节数据(Data)流、字节对象(Object)流)
一.字节流分类概括 -->1.ByteArrayInputStream /ByteArrayOutputStream(数组字节输入输出) InputStream/OutputStr ...
- SpringMVC关于请求参数乱码问题
String names =request.getParameter("name") request主要接收的参数是form提交 form提交有的时候会伴随着乱码,该乱码的格式为I ...
- idea中ssm自动配置
自动生成 只需要创建好maven项目,然后创建一个类Test,复制代码粘贴即可 使用注意: 代码 import java.io.*; public class Test { //包名格式 //列如配置 ...
- [转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題
今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會 ...
- Python 学习笔记(九)Python元组和字典(二)
什么是字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 键必须是唯 ...
- HTML如何禁止input输入
第一种方法: 在input元素上加readonly="readonly"属性 <input type="text" readonly="read ...
- js 单引号和双引号的使用注意事项
前言: 刚入行时,对单双引号没有过研究,使用时也是碰到什么用什么,后来慢慢遇到引号嵌套时报错,才了解问题.因之前的文章稍显混乱,现重新编辑,帮助需要的人儿. 正文: 1.一般情况下(没有嵌套)在js中 ...
- meven 配置
配置meven 自定义文件[User Settings] D:\java\apache-maven-3.5.3\conf\settings.xml settings.xml 新增两端配置信息 < ...
- Java中常见的比较
一.StringBuffer.StringBuilder.String 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBu ...
- 解决gradle下载慢的问题(转)
问题一:新建项目下载gradle慢的问题 解决方法: 打开用户主目录 linux平台/home/用户名/.gradle windows平台c:\Users\用户名\.gradle macos平台/Us ...