2017-01-13 4 views
0

hadoop-2.7.3에서 실제로 외장 (usb-thumb) 드라이브에있는 폴더를 만들고 싶습니다. 즉, -copyFromLocal이있는 파일이 상주 할 것입니다. 엄지 드라이브. 내가 하둡 로컬 폴더를 만들 경우에만 작동 ..HDFS 파일을 외장 드라이브에 매핑 할 때 오류가 발생했습니다.

mkdir /media/usb 
mount /dev/sdb1 /media/usb 
hdfs dfs -mkdir /media/usb/test 
hdfs dfs -copyFromLocal /media/source/input.data /media/usb/test 
hadoop jar share/hadoop/tools/lib/hadoop-streaming-*.jar \ 
    -input /media/usb/test/input.data \ 
    -output /media/usb/test/output.data 

하지만 위의 폴더를 만들려고 그런 파일/폴더의 오류를 얻을 : 마찬가지로 하둡에서 모든 출력 파일은 외장 드라이브로 이동합니다 :

hdfs dfs -mkdir /test 
hdfs dfs -copyFromLocal /media/source/input.data /test 

불행하게도이 거의 가득 하둡과 같은 드라이브에 입력 데이터 파일 설치를 배치합니다. hadoop 드라이브가 아닌 다른 드라이브에서 읽기/쓰기가 가능하도록 HDFS 폴더를 만들고 매핑하는 방법이 있습니까?

답변

0

당신이하려는 것은 불가능합니다! 분산 저장 및 처리에 대한 전체적인 생각을 무시합니다.

copyFromLocal을 실행하면 해당 파일이 로컬에서 HDFS 위치 (hadoop 관리)으로 이동합니다. 새 드라이브를 HDFS DataNode로 추가 할 수는 있지만 파일을 이동해야하는 것은 아닙니다.

공간이 유일한 제약 인 경우 새 드라이브를 데이터 노드로 추가하고 클러스터의 균형을 다시 조정하십시오.


새로운 노드가 추가되고 데이터 노드의 서비스가 시작되면 사용하여 클러스터의 균형 :

hdfs balancer 
     [-threshold <threshold>] 
     [-policy <policy>] 
     [-exclude [-f <hosts-file> | <comma-separated list of hosts>]] 
     [-include [-f <hosts-file> | <comma-separated list of hosts>]] 
     [-idleiterations <idleiterations>] 

참조 : 그래서 그것이 가능하다 같은 소리 HDFS Balancer

+0

을하지만, 내가 먼저해야 hdfs-site.xml에서 usb 경로를 datanode로 지정하십시오. 그것을 포맷 한 후에 (hdfs 'hdfs namenode -format),'dfs -mkdir '및'-copyFromLocal '명령은 외장 드라이브를 사용합니까? 아니면 파일 시스템 (예 : FAT32 썸 드라이브)의 차이로 인해 작동하지 않는다고 말하고 있습니까? – ben

+0

@ben 그런 식으로 작동하지 않습니다. 먼저 새 드라이브에 hadoop을 설치하십시오. (어떤 OS에서도) _ 다음 configs를 복사 한 다음 해당 데이터 노드를 시작하십시오. 그냥 클러스터의 균형을 재조정해야합니다. **주의 : OS는 중요하지 않습니다. 노드는 동일한 클러스터에 있도록 구성되어야하며 모든 문제가 있습니다. ** –