[HADOOP] 나는 파일을 업로드 HDFS REST API를 호출 할
HADOOP나는 파일을 업로드 HDFS REST API를 호출 할
나는 HTTPLIB을 사용하여 파일을 업로드 할 HDFS REST API를 호출하고 싶습니다.
내 프로그램은 파일을 만든 있지만 내용은 거기에 없다.
=====================================================
여기 내 코드는 다음과 같습니다
import httplib
conn=httplib.HTTPConnection("localhost:50070")
conn.request("PUT","/webhdfs/v1/levi/4?op=CREATE")
res=conn.getresponse()
print res.status,res.reason
conn.close()
conn=httplib.HTTPConnection("localhost:50075")
conn.connect()
conn.putrequest("PUT","/webhdfs/v1/levi/4?op=CREATE&user.name=levi")
conn.endheaders()
a_file=open("/home/levi/4","rb")
a_file.seek(0)
data=a_file.read()
conn.send(data)
res=conn.getresponse()
print res.status,res.reason
conn.close()
==================================================
여기 반환은 다음과 같습니다
=========================================================
OK, 파일이 생성되었지만, 내용이 전송되지 않았습니다.
나는 #의 conn.send (데이터)를 언급 할 때, 결과는 동일, 아직 아무 내용도 없다.
아마 파일을 읽거나 전송은 물론, 잘못이 아니다.
이 일이 어떻게 알아?
해결법
-
==============================
1.코드가 두 번째 PUT 요청에서 (307)에서 "위치"헤더를 사용하지 않는 것 같습니다.
코드가 두 번째 PUT 요청에서 (307)에서 "위치"헤더를 사용하지 않는 것 같습니다.
https://github.com/carlosmarin/webhdfs-py/blob/master/webhdfs/webhdfs.py : 내가 사용 될 수있는 파이썬 WebHDFS 래퍼의 포크에 일한지, 당신은 여기에 전체 코드를 볼 수 있습니다
당신이에 관심이있을 것입니다 방법은 다음과 같습니다
def copyfromlocal(self, source_path, target_path, replication=1, overwrite=True): url_path = WEBHDFS_CONTEXT_ROOT + target_path + '?op=CREATE&overwrite=' + 'true' if overwrite else 'false' with _NameNodeHTTPClient('PUT', url_path, self.namenode_host, self.namenode_port, self.username) as response: logger.debug("HTTP Response: %d, %s" % (response.status, response.reason)) redirect_location = response.msg["location"] logger.debug("HTTP Location: %s" % redirect_location) (redirect_host, redirect_port, redirect_path, query) = self.parse_url(redirect_location) # Bug in WebHDFS 0.20.205 => requires param otherwise a NullPointerException is thrown redirect_path = redirect_path + "?" + query + "&replication=" + str(replication) logger.debug("Redirect: host: %s, port: %s, path: %s " % (redirect_host, redirect_port, redirect_path)) fileUploadClient = HTTPConnection(redirect_host, redirect_port, timeout=600) # This requires currently Python 2.6 or higher fileUploadClient.request('PUT', redirect_path, open(source_path, "r").read(), headers={}) response = fileUploadClient.getresponse() logger.debug("HTTP Response: %d, %s" % (response.status, response.reason)) fileUploadClient.close() return json.loads(response.read())
from https://stackoverflow.com/questions/15870381/i-want-to-call-hdfs-rest-api-to-upload-a-file by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡 2.6.0은 - 스타트 업 스크립트를 실행하는 동안 사용자의 암호를 물어? (0) | 2019.09.26 |
---|---|
[HADOOP] 클래스에 실패 하둡 항아리 실행을 찾을 수 없습니다 (0) | 2019.09.26 |
[HADOOP] 하둡 : 클러스터 크기에 따라 사용할 수지도 슬롯의 수 (0) | 2019.09.26 |
[HADOOP] 32 비트 Windows 용 하둡 2.6.0에 대한 winutils.exe을 찾을 수 없습니다 (0) | 2019.09.26 |
[HADOOP] HDFS-site.xml 파일에 구성 등록 하둡 네임 노드에 적용합니까? (0) | 2019.09.26 |