ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ""
각 서버의 퍼블릭 키(id_rsa.pub) 파일을 모아서 마스터 노드의 ~/.ssh/authorized_keys 파일에 덧붙여야 함
게이트웨이 호스트에서 각 (마스터/데이터) 노드 호스트로부터 퍼블릭 키 파일을 복사해 와서 합침
rcp terzeron@데이터노드호스트:~/.ssh/id_rsa.pub 데이터노드호스트.pub
cat 데이터노드호스트.pub >> total.pub
게이트웨이 호스트에서 각 (마스터/데이터) 노드 호스트에 합쳐진 퍼블릭 키 파일을 복사하고 authorized_keys 파일에 덧붙임
rcp total.pub terzeron@마스터노드호스트:~/.ssh/total.pub
rsh -l 마스터노드호스트 "cd .ssh; cat total.pub >> authorized_keys; rm -f total.pub"
패스워드 입력없이 노드 간 ssh 로그인이 되는지 확인할 것
하둡 실행 전에 미리 known_hosts에 등록하기
for f in `cat apps/hadoop-2.7.1/etc/hadoop/slaves`; do ssh -oStrictHostKeyChecking=no $f "exit"; done
<property>
<name>fs.defaultFS</name>
<value>hdfs://네임노드IP:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/terzeron/hdfs/tmp</value>
</property>
reboot 후에 /tmp 하위 디렉토리의 데이터가 삭제될 수 있으므로 지정 필요함
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
bin/hdfs namenode -format - sbin/start-dfs.sh
sbin/stop-dfs.sh
jps
NameNode와 DataNode, SecondaryNameNode가 실행되고 있는 것을 확인할 것
9000: DataNode
sbin/start-yarn.sh
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/terzeron
hdfs dfs -put etc/hadoop input
hdfs dfs -ls input
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'
hdfs dfs -get output output
hdfs dfs -cat output/*
1.7까지만 권장
HADOOP_HEAPSIZE, YARN_HEAPSIZE 환경변수 이용
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.24.12.202:59000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/terzeron/hdfs/tmp</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/terzeron/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/terzeron/hdfs/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
bin/hdfs namenode -format 클러스터이름
reformat시에, 같은 클러스터에 속한 datanode가 내려가고 데이터가 삭제될 수 있음
sbin/hadoop-daemon.sh -script hdfs start namenode
sbin/hadoop-daemons.sh -script hdfs start datanode
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemons.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
sbin/hadoop-daemon.sh -script hdfs stop namenode
sbin/hadoop-daemons.sh -script hdfs stop datanode
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemons.sh stop nodemanager
sbin/mr-jobmistory-daemon.sh stop historyserver
ls: '.': No such file or directory
사용자 홈디렉토리가 없어서 생기는 문제임
hadoop fs -mkdir -p /home/terzeron/
WARN util.NativeCodeLoader: Unable to load native-hadoop library for our platform… using builtin-java classes where applicable ls: '.': No such file or directory
비트가 맞지 않아서 생기는 문제임
소스 컴파일을 할 것
maven 설치
mvn package -Pdist,native -DskipTest=true -Dtar
ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
네임노드 접속 url을 설정 파일에 지정하지 않아서 생긴 문제임
core-site.xml의 fs.default.name 항목의 값을 지정할 필요가 있음
java.net.BindException: Problem binding to 0.0.0.0:50010
java.net.BindException: 주소가 이미 사용 중입니다; For more details see: http://wiki.apache.org/hadoop/BindException
해당 포트번호가 다른 프로세스에 의해 사용되고 있음 - lsof -i:포트번호 - 어떤 프로세스가 해당 포트를 점유했는지 확인하고 필요하면 core-site.xml의 포트를 변경해야 함
java.io.IOException: Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
위 에러 항목 참고
WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /home/terzeron/hdfs/datanode: namenode clusterID = CID-6b2568db-1a8e-455f-b6e1-2a725d3bfbe4; datanode clusterID = CID-6a708635-eecc-40af-a054-189f317bb482 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool (Datanode Uuid unassigned) service to localhost/127.0.0.1:9000. Exiting. java.io.IOException: All specified directories are failed to load.
hdfs 디렉토리의 datanode/current/VERSION 파일에 기록된 clusterID 값을 네임노드가 알고 있는 값으로 일치시켜야 함