2012-10-01 4 views
1

각 데이터 노드가 스토리지에 대해 다른 디렉토리를 사용하도록 Hadoop을 구성하는 방법은 무엇입니까?각 데이터 노드가 다른 디렉토리를 사용하도록 Hadoop을 구성하는 방법은 무엇입니까?

모든 데이터 노드는 저장 공간을 공유합니다. 나는 dir2를 사용하기 위해 datanode1에 dir1을, datanode2를 사용하고 싶습니다. 처음에는 공유 스토리지에서 동일한 디렉토리를 사용하도록 모든 데이터 노드를 구성했으며 실행중인 데이터 노드가 하나 뿐인 것으로 나타났습니다.

+1

은 일회성 테스트 설정의 일종인가 네임 노드에서 쉬 파일은 각 데이터 노드에 대해 서로 다른 디렉토리 구조의 구현을 달성하기 위해? 하둡 성능은 CPU에 근접한 데이터에 크게 의존합니다. – Olaf

+0

클러스터가 NFS와 같은 분산 파일 시스템을 실행하고 각 데이터 노드가 분산 파일 시스템의 다른 디렉토리에 로컬 데이터를 저장하도록 하시겠습니까? –

+0

@MattD 클러스터에는 모든 DataNode가 공유하는 저장소가 있습니다. 그래서 실제로 datanode2는 dir1에 액세스 할 수 있습니다. 하지만 dfs.data.dir을 "/ dir1,/dir2"로 설정하면 모든 컴퓨터가 엉망이됩니다. – HZhang

답변

2

데이터 디렉토리 속성 (dfs.data.dir)이 적절하게 구성된 클러스터의 각 노드에 대해 사용자 정의 hdfs-site.xml 파일이 있어야합니다. 현재 hadoop 설정을 위해 공유 디렉토리를 사용하고 있다면, 어떻게해야 하는지를 수정해야합니다.

다소 고통스러운

, 난 당신이 시도하고 파일, 또는 인형이나 요리사 같은 도구를 생성하는 일부 쉘 스크립트를 사용할 수있는 것 같아요.

NFS를 사용하는 이유는 데이터 지역성을 다소 상실하기 때문입니다. Hadoop은 코드를 데이터가있는 위치로 이동 시키도록 설계되었습니다. 자료.

데이터 중복성이있는 일부 SAN 어레이가 NFS를 지원하므로 NFS를 사용하는 경우 사용자 자신의 작업을 어렵게 만듭니다. 구성된 경우 HDFS가 데이터 복제를 관리합니다 (충분한 클러스터가 있다고 가정). 제대로 구성되었습니다. 그것은 이론적으로도 고가의 SAN과 백업보다 덜 사용하는 범용 하드웨어 비용을해야

0

내가하고 자사의 경우 원유 방법을 알고하지 않습니다 (내가 생각 셋업/상황에 따라 다름) 그러나 이것은 내가 노예를 정의하는 방법입니다.

편집 $HADOOP_HOME/bin/slaves.sh 각 데이터 노드에서 실행되는 SSH 원격 명령 :

for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do 
# If the slave node is ap1001 (first datanode), 
# Then use a different directory path for SSH command. 
if [ $slave == "ap1001" ] 
then 
     input=`/bin/echo $"${@// /\\ }"` >/dev/null 2>&1 
     # If the command type is start-dfs (start the datanodes) 
     # Then construct the start command for remote execution on datanode through ssh 
     /bin/echo $input | grep -i start 
     if [ $? -eq 0 ] 
     then 
      inputArg="cd /app2/configdata/hdp/hadoop-1.2.1 ; /app2/configdata/hdp/hadoop-1.2.1/bin/hadoop-daemon.sh --config /app2/configdata/hdp/hadoop-1.2.1/libexec/../conf start datanode" 
     else 
      # If the command type is stop-dfs (stop the datanodes) 
      # Then construct the stop command for remote execution on datanode through ssh 
      inputArg="cd /app2/configdata/hdp/hadoop-1.2.1 ; /app2/configdata/hdp/hadoop-1.2.1/bin/hadoop-daemon.sh --config /app2/configdata/hdp/hadoop-1.2.1/libexec/../conf stop datanode" 
     fi 
     ssh $HADOOP_SSH_OPTS $slave $inputArg 2>&1 & 
else 
     # Use default command for remaining slaves. 
     ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \ 
     2>&1 | sed "s/^/$slave: /" & 
fi 
if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then 
    sleep $HADOOP_SLAVE_SLEEP 
fi 
done 
관련 문제