Skip to content

Latest commit

 

History

History
41 lines (31 loc) · 1.4 KB

upload.md

File metadata and controls

41 lines (31 loc) · 1.4 KB

WebHDFS 업로드 API 사용

  • 공식문서에는 curl 호출방법이 다음과 같이 나와있다
# from namenode
curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE"

# from datanode
curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE"
  • 위처럼 로컬에서 도커 컨테이너에 curl을 날리면 500이 날아온다
  • namenode에서 datanode로 리디렉션을 시키는데 도커 컨테이너에서는 서로 격리된 환경이라 localhost:<PORT>식의 호출로는 서로의 호스트를 찾지 못한다
  • datanode에 직접 호출을 다음과 같이 날릴 수 있다
curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>/<LOCAL_FILE>?op=CREATE&namenoderpcaddress=namenode:9000&createflat=&createparent=true&overwrite=false"
  • javascript에서 axiosput 호출을 할 떄는 다음과 같이 해야한다
import FormData from 'form-data'

const params = new URLSearchParams()
params.append('op', 'CREATE')
params.append('namenoderpcaddress', 'namenode:9000')
params.append('createflag', '')
params.append('createparent', 'true')
params.append('overwrite', 'false')

const fileData = new FormData()
fileData.append('filename', fs.readFilySync(file))

await axios.put(`${url}/${path}/${filename}?${params.toString()}`, fileData, {
 headers: {
  'Content-Type': 'multipart/form-data'
 }
})