pycurl实现hadoop的客户端功能Word下载.docx
- 文档编号:19720339
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:18
- 大小:21.36KB
pycurl实现hadoop的客户端功能Word下载.docx
《pycurl实现hadoop的客户端功能Word下载.docx》由会员分享,可在线阅读,更多相关《pycurl实现hadoop的客户端功能Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
从上面可以看出命令提供的功能还是挺强大的。
包括了文件和对目录的各种操作。
举个例子:
要列出hadoop的根目录下面的文件,具体命令如下:
#hadoopfs
-lshdfs:
//192.168.0.112:
50081/
drwx---r-x
-testtest
02013-03-0811:
20/static
-testtest
02013-02-1915:
40/system
drwxrwxrwx
-
test
02013-01-2218:
42/video
其他的命令功能就不一一介绍了,相信看帮组文档自己也可以看懂。
这样会有一个问题,每执行一个命令都会新生成一个jvm,对运行命令的机器造成很大的负担,在命令多的情况下,查看top可以看到java的进程会跑到99%,严重影响到的使用。
于是有了下面的实现方法。
二,hadoop提供的web方式
在网上查看官方的客户端API,发现hadoop提供一个webRESTAPI,既采用curl的方式可以轻松实现。
官方文档连接为:
http:
//hadoop.apache.org/docs/stable/webhdfs.html
上面对使用方式进行充分的说明。
curl的方式可以进行对hadoop中的文件和目录进行一些基本的操作。
目前官网上提供的有
1,创建并写入文件
2,追加文件
3,打开并读入文件
4,创建目录
5,重命名文件或者目录
6,删除文件或者目录
7,列出文件或者目录状态
8,列出目录列表
下面提供一些具体的使用例子:
a,列出目录的状态
#curl-ihttp:
50071/webhdfs/v1/?
op=GETFILESTATUS
HTTP/1.1200OK
Content-Type:
application/json
Transfer-Encoding:
chunked
Server:
Jetty(6.1.26)
{"
FileStatus"
:
accessTime"
0,"
blockSize"
group"
"
TEST"
"
length"
modificationTime"
1362812718704,"
owner"
pathSuffix"
permission"
705"
replication"
type"
DIRECTORY"
}}
b,重命名目录
#curl-i-XPUThttp:
50071/webhdfs/v1/test?
op=RENAME&
destination=/test1
boolean"
true}
其他的功能就不一一介绍了。
具体的实现方式请看官方文档
三,由curl的方式想到的
因为我的程序是用python跑的,那么采用curl命令行的方式同样是调用底层命令,python的模块那么多,那么我如果使用python的curl库那不是可以轻松实现python对hadoop中文件和目录的操作。
在经过查资料后,写了一个基本的webhadoop的class,基本的功能大概完成了,其他的东西以后再加吧。
具体的代码如下:
1.#!
/usr/bin/env
python
2.#
-*-
encoding:
utf-8
3."
A
library
to
access
Hadoop
HTTP
REST
API,
4.
make
sure
you
hadoop
cluster
open
the
http
.
5."
6.'
'
7.author
liran
8.data
2013-03-11
9.
10.致谢:
xwu
11.
武汉云雅科技有限公司
12.
13.'
14.import
StringIO
15.import
pycurl
16.import
re
17.import
sys
18.import
logging
19.import
os
20.
21.class
WebHadoop(object):
22.
def
__init__(self,host,port,username,logger,prefix="
/webhdfs/v1"
):
23.
self.host
=
host
24.
self.port
port
25.
self.user
username
26.
self.logger
logger
27.
self.prefix
prefix
28.
self.status
None
29.
self.url
//%s:
%s"
%
(host,port)
30.
selfself.url_path
+
31.
32.
33.
34.
checklink(self):
35.
try:
36.
b
StringIO.StringIO()
37.
c
pycurl.Curl()
38.
checkurl
/dfsnodelist.jsp?
whatNodes=LIVE"
39.
c.setopt(pycurl.URL,
checkurl)
40.
c.setopt(pycurl.HTTPHEADER,
["
Accept:
])
41.
c.setopt(pycurl.WRITEFUNCTION,
b.write)
42.
c.setopt(pycurl.FOLLOWLOCATION,
1)
43.
c.setopt(pycurl.MAXREDIRS,
5)
44.
c.perform()
45.
c.getinfo(c.HTTP_CODE)
46.
bbody
b.getvalue()
47.
self.Write_Debug_Log(self.status,checkurl)
48.
p
pile(r'
Live
Datanodes
(.*)<
/a'
)
49.
results
p.findall(body)
50.
b.close()
51.
if
results[0]
==
0"
52.
self.logger.error("
Sorry,
There
are
not
live
datanodes
in
Cluster!
!
53.
self.curlObj.close()
54.
sys.exit(255)
55.
return
56.
except
pycurl.error,e:
57.
can
get
link
.Erros:
e)
58.
c.close()
59.
60.
61.
finally:
62.
63.
64.
65.
66.
lsdir(self,path):
67.
68.
69.
put_str
[{"
op"
LISTSTATUS}]'
70.
71.
72.
73.
lsdir_url
self.url_path
path
?
op=LISTSTATUS"
74.
lsdir_url)
75.
76.
77.
78.
79.
80.
81.
82.
Exception,e:
83.
e
84.
85.
86.
87.
88.
89.
200:
90.
data_dir
eval(body)
91.
data_dir['
FileStatuses'
]['
FileStatus'
]
92.
93.
else:
94.
Sorry,can
list
dir
or
file
status!
95.
self.Write_Debug_Log(self.status,lsdir_url)
96.
False
97.
98.
99.
lsfile(self,path):
100.
101.
102.
103.
104.
op=GETFILESTATUS"
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
type'
122.
Sorry,this
%s
is
a
actually!
(path))
123.
124.
125.
126.
127.
128.
129.
130.
131.
mkdir(self,path,permission="
755"
132.
133.
yes
mkdir
function"
134.
135.
136.
mkdir_str
MKDIRS"
=permission}]'
137.
mkdir_url
%s%s?
op=MKDIRS&
permission=%s"
(self.url_path,path,permission)
138.
mkdir_url)
139.
c.setopt(pycurl.HTTPHEADER,['
application/json'
'
Content-Length:
+str(len(mkdir_str))])
140.
c.setopt(pycurl.CUSTOMREQUEST,"
PUT"
141.
c.setopt(pycurl.POSTFIELDS,mkdir_str)
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
200
157.
true"
body:
158.
self.logger.info("
Great,Successfully
Create
cluster!
159.
True
160.
elif
false"
161.
Sorry,can'
t
create
this
1!
162.
163.
164.
165.
166.
1"
167.
self.Write_Debug_Log(self.status,mkdir_url)
168.
169.
170.
remove(self,path,recursive="
True"
171.
172.
173.
174.
remove_str
DELETE"
recursive"
=recursive}]'
175.
remvoe_url
op=DELETE&
recursive=%s"
(self.url_path,path,recursive)
176.
remvoe_url)
177.
+str(len(remove_str))])
178.
179.
c.setopt(pycurl.POSTFIELDS,remove_str)
180.
181.
c.setopt(pycurl.FOLLOWLOCATION,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pycurl 实现 hadoop 客户端 功能