Hadoop의 HDFS 학습

17558 단어 데이터 발굴

실험 환경


서버 목록


서버 용도
IP 주소
호스트 이름
NameNode
192.168.3.69
namenode.abc.local
DataNode 1
192.168.3.70
datanode1.abc.local
DataNode 2
192.168.3.71
datanode2.abc.local

환경 준비


세 서버 모두 CentOS 6.6 설치를 최소화하고 호스트 이름, 정적 IP 주소를 설정합니다.
CentOS 6.6은 설치를 최소화합니다. 기본적으로 Java 환경이 없으므로 Java 환경을 설치해야 합니다.
Java 실행 환경의 설치 미디어 다운로드: jre-7u80-linux-x64.tar.gz
# tar xvfz jre-7u80-linux-x64.tar.gz
# mv jre1.7.0_80/ /opt

/etc/profile에서 Java 환경 변수 설정
export JAVA_HOME=/opt/jre1.7.0_80
PATH=$JAVA_HOME/bin:$PATH
export PATH

콘솔을 종료하고 서버에 다시 로그인하여 Java 운영 환경 보기
[root@namenode ~]# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

다른 두 서버에도 Java 운영 환경을 설치합니다.
세 서버 간 SSH 암호 없는 로그인 설정
CentOS 최소화 설치는 scp와 ssh 클라이언트 프로그램을 설치하지 않았습니다.rpm 패키지를 통해 다음과 같이 설치합니다.
# rpm -ivh libedit-2.11-4.20080712cvs.1.el6.x86_64.rpm
# rpm -ivh openssh-clients-5.3p1-104.el6.x86_64.rpm
libedit openssh 

참고: SSH 서비스를 통해 리눅스 서버에 원격으로 액세스할 때 연결이 매우 느리므로 SSH의 DNS 반해상도를 해제하고 다음 줄을 추가해야 합니다.
UseDNS no

구성 파일에 [UseDNS yes]가 주석으로 표시되지만 기본 스위치는 yes입니다.(SSH 서비스는 기본적으로 DNS 역방향 분석 기능을 사용합니다.)
또한 SSH 클라이언트에서 로컬 DNS 해석을 설정하고/etc/hosts 파일을 편집하여 다음 구성을 추가합니다.
192.168.3.69    namenode namenode.abc.local
192.168.3.70    datanode1 datanode1.abc.local
192.168.3.71    datanode2 datanode2.abc.local

주: 이 컴퓨터에openssh-clients를 설치한 후 scp를 이용하여 로컬 파일을 원격으로 전송하려고 합니다. 이때 오류가 발생했습니다. - bash: scp:command not found.원격에서도openssh-client를 설치해야 하고 scp 프로그램이 있어야 하기 때문이다.
namenode에서 조작하여 이 컴퓨터의 공개 키, 암호 파일을 생성합니다.
[root@namenode ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): # 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): # Enter, 
Enter same passphrase again: # Enter, 
Your identification has been saved in /root/.ssh/id_rsa. # 
Your public key has been saved in /root/.ssh/id_rsa.pub. # 
The key fingerprint is:
02:e0:5b:d0:53:19:25:48:e2:61:5a:a3:14:9e:d0:a6 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|.+Xo.o++.        |
|+B+*+ ..         |
|o=o o.           |
|E  o .           |
|  .   . S        |
|       .         |
|                 |
|                 |
|                 |
+-----------------+

이 컴퓨터에서 ssh 로그인을 실현하려면 비밀번호가 필요 없습니다
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
authorized_keys , ssh 

SSH 서비스의 구성 파일 수정/etc/ssh/sshd_config.
RSAAuthentication yes   #  , RAS 
PubkeyAuthentication yes    #  
AuthorizedKeysFile      .ssh/authorized_keys    #  

SSH 서비스를 다시 시작합니다.
/etc/init.d/sshd restart

원격 로그인을 실현하려면 비밀번호가 필요 없습니다. 공개 키 파일을datanode1에 업로드하고namenode의/root/.ssh/id_rsa.pub를 datanode1의/tmp 디렉터리에 업로드합니다.
# scp /root/.ssh/id_rsa.pub [email protected]:/tmp
 , ssh , , 。

datanode1에서 namenode의 공개 키를 SSH 인증 파일에 가져옵니다.
[root@datanode1 ~]# cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
authorized_keys , ssh 

datanode1의 SSH 서비스 프로필 수정/etc/ssh/sshd_config.
RSAAuthentication yes   #  , RAS 
PubkeyAuthentication yes    #  
AuthorizedKeysFile      .ssh/authorized_keys    #  

SSH 서비스를 다시 시작합니다.
/etc/init.d/sshd restart

namenode에서 ssh 암호 없는 로그인 검증
[root@namenode ~]# ssh [email protected]
The authenticity of host '192.168.3.70 (192.168.3.70)' can't be established.
RSA key fingerprint is c4:1f:56:68:f8:44:c7:d9:cc:97:b9:47:1c:37:bb:a7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.3.70' (RSA) to the list of known hosts.
Last login: Mon Aug 10 18:47:02 2015 from 192.168.3.64
[root@datanode1 ~]# 

namenode의 공개 키 파일을 datanode2에 업로드한 후 같은 동작을 합니다.
마찬가지로,datanode1의 키도namenode,datanode2에,datanode2의 키도namenode,datanode1에 올려야 한다.세 서버 사이에는 ssh가 비밀번호 없이 로그인할 수 있어야 한다.

Hadoop 설치


Hadoop의 설치 미디어 다운로드:hadoop-2.7.1.tar.gz. namenode에 업로드하고/opt 디렉터리에 압축 풀기
# tar xvfz hadoop-2.7.1.tar.gz -C /opt/

/opt/hadoop-2.7.1 디렉터리에 데이터를 저장하는 폴더를 만듭니다. tmp,hdfs,hdfs/data,hdfs/name.
[root@namenode hadoop-2.7.1]# mkdir tmp
[root@namenode hadoop-2.7.1]# mkdir hdfs
[root@namenode hadoop-2.7.1]# cd hdfs/
[root@namenode hdfs]# mkdir data
[root@namenode hdfs]# mkdir name

hadoop의 운행 환경 설정/opt/hadoop-2.7.1/etc/hadoop/hadoop-env.sh

# The java implementation to use.
export JAVA_HOME=/opt/jre1.7.0_80

namenode의 실행 매개 변수 /opt /hadoop-2.7.1 / etc /hadoop /core-site를 설정합니다.xml


    
        fs.defaultFS
        hdfs://namenode.abc.local:9000
    
    
        hadoop.tmp.dir
        file:/opt/hadoop-2.7.1/tmp
    
    
        io.file.buffer.size
        131702
    


fs.defaultFS가 NameNode로 설정된 URI, io.file.buffer.size 는 순서 파일에서 읽기와 쓰기의 캐시 크기로 설정됩니다.

hdfs의 운행 매개 변수 /opt/hadoop-2.7.1 / etc/hadoop/hdfs-site를 설정합니다.xml


    
        dfs.namenode.name.dir
        file:/opt/hadoop-2.7.1/hdfs/name
    
    
        dfs.datanode.data.dir
        file:/opt/hadoop-2.7.1/hdfs/data
    
    
        dfs.replication
        2
    
    
        dfs.webhdfs.enabled
        true
    
    
        dfs.namenode.secondary.http-address
        datanode1.abc.local:9000
    


namenode의hdfs-site.xml은 dfs를webhdfs.enabled 속성은true로 설정됩니다. 그렇지 않으면 웹 hdfs의 LIST STATUS, LIST FILE STATUS 등 파일, 폴더 상태를 표시하는 명령을 사용할 수 없습니다. 이 정보는namenode에서 저장하기 때문입니다.hadoop 2.7.1은namenode 단점 고장 문제를 해결했습니다. 두 번째namenode를 설정해야 합니다. dfs를 통해.namenode.secondary.http-address를 설정합니다.

mapred의 운행 매개 변수 /opt /hadoop-2.7.1 / etc /hadoop /mapred-site를 설정합니다.xml


    
        mapreduce.framework.name
        yarn
    


yarn의 운행 매개 변수 /opt/hadoop-2.7.1/etc/hadoop/yarn-site를 설정합니다.xml


    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
        yarn.resourcemanager.hostname
        namenode.abc.local
    


Datanode에hadoop 설치


scp 도구를 통해namenode의hadoop을datanode에 업로드합니다.
# cd /opt/
# scp -r hadoop-2.7.1 [email protected]:/opt/
# scp -r hadoop-2.7.1 [email protected]:/opt/

hadoop을 시작하는hdfs 환경


namenode에서hadoop 명령을 실행합니다
# cd /opt/hadoop-2.7.1/sbin
# ./start-dfs.sh 
15/08/12 03:15:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [namenode.abc.local]
namenode.abc.local: starting namenode, logging to /opt/hadoop-2.7.1/logs/hadoop-root-namenode-namenode.abc.local.out
datanode2.abc.local: starting datanode, logging to /opt/hadoop-2.7.1/logs/hadoop-root-datanode-datanode2.abc.local.out
datanode1.abc.local: starting datanode, logging to /opt/hadoop-2.7.1/logs/hadoop-root-datanode-datanode1.abc.local.out
Starting secondary namenodes [datanode1.abc.local]
datanode1.abc.local: starting secondarynamenode, logging to /opt/hadoop-2.7.1/logs/hadoop-root-secondarynamenode-datanode1.abc.local.out
15/08/12 03:15:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

HDFS 작업


HDFS 포맷


명령을 집행하다
# cd /opt/hadoop-2.7.1/bin
# ./hdfs namenode -format
..........................
15/08/12 03:48:58 INFO namenode.FSImage: Allocated new BlockPoolId: BP-486254444-192.168.3.69-1439322538827
15/08/12 03:48:59 INFO common.Storage: Storage directory **/opt/hadoop-2.7.1/hdfs/name** has been successfully formatted.
15/08/12 03:48:59 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
15/08/12 03:48:59 INFO util.ExitUtil: Exiting with status 0
15/08/12 03:48:59 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at namenode.abc.local/192.168.3.69
************************************************************/
 namenode hadoop , datanode1,datanode2 hadoop 。 stop-dfs.sh datanode 。

명령을 실행한 후namenode의/opt/hadoop-2.7.1/hdfs/name 디렉터리에서 파일을 생성합니다.
[root@namenode name]# tree
.
└── current
    ├── fsimage_0000000000000000000
    ├── fsimage_0000000000000000000.md5
    ├── seen_txid
    └── VERSION

hdfs 시스템을 다시 시작합니다.
namenode의/opt/hadoop-2.7.1/hdfs/name 디렉터리에서 파일 보기
[root@namenode name]# tree
.
├── current
│   ├── edits_0000000000000000001-0000000000000000002
│   ├── edits_0000000000000000003-0000000000000000004
│   ├── edits_0000000000000000005-0000000000000000006
│   ├── edits_0000000000000000007-0000000000000000008
│   ├── edits_0000000000000000009-0000000000000000010
│   ├── edits_0000000000000000011-0000000000000000012
│   ├── edits_0000000000000000013-0000000000000000014
│   ├── edits_0000000000000000015-0000000000000000016
│   ├── edits_0000000000000000017-0000000000000000018
│   ├── edits_0000000000000000019-0000000000000000020
│   ├── edits_0000000000000000021-0000000000000000022
│   ├── edits_0000000000000000023-0000000000000000024
│   ├── edits_0000000000000000025-0000000000000000026
│   ├── edits_0000000000000000027-0000000000000000028
│   ├── edits_0000000000000000029-0000000000000000030
│   ├── edits_0000000000000000031-0000000000000000032
│   ├── edits_0000000000000000033-0000000000000000034
│   ├── edits_0000000000000000035-0000000000000000036
│   ├── edits_0000000000000000037-0000000000000000038
│   ├── edits_0000000000000000039-0000000000000000040
│   ├── edits_0000000000000000041-0000000000000000042
│   ├── edits_0000000000000000043-0000000000000000044
│   ├── edits_0000000000000000045-0000000000000000046
│   ├── edits_0000000000000000047-0000000000000000047
│   ├── edits_inprogress_0000000000000000048
│   ├── fsimage_0000000000000000046
│   ├── fsimage_0000000000000000046.md5
│   ├── fsimage_0000000000000000047
│   ├── fsimage_0000000000000000047.md5
│   ├── seen_txid
│   └── VERSION
└── in_use.lock # , NameNode 

datanode1, datanode2의/opt/hadoop-2.7.1/hdfs/data 디렉터리에서 파일을 보십시오.
[root@datanode1 data]# tree
.
├── current
│   ├── BP-486254444-192.168.3.69-1439322538827
│   │   ├── current
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   ├── rbw
│   │   │   └── VERSION
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock # , DataNode 

datanode1이 두 번째namenode로 설정되어 있기 때문에/opt/hadoop-2.7.1/tmp 디렉터리에서 파일을 생성합니다.
[root@datanode1 tmp]# tree
.
└── dfs
    └── namesecondary
        ├── current
        │   ├── edits_0000000000000000001-0000000000000000002
        │   ├── edits_0000000000000000003-0000000000000000004
        │   ├── edits_0000000000000000005-0000000000000000006
        │   ├── edits_0000000000000000007-0000000000000000008
        │   ├── edits_0000000000000000009-0000000000000000010
        │   ├── edits_0000000000000000011-0000000000000000012
        │   ├── edits_0000000000000000013-0000000000000000014
        │   ├── edits_0000000000000000015-0000000000000000016
        │   ├── edits_0000000000000000017-0000000000000000018
        │   ├── edits_0000000000000000019-0000000000000000020
        │   ├── edits_0000000000000000021-0000000000000000022
        │   ├── edits_0000000000000000023-0000000000000000024
        │   ├── edits_0000000000000000025-0000000000000000026
        │   ├── edits_0000000000000000027-0000000000000000028
        │   ├── edits_0000000000000000029-0000000000000000030
        │   ├── edits_0000000000000000031-0000000000000000032
        │   ├── edits_0000000000000000033-0000000000000000034
        │   ├── edits_0000000000000000035-0000000000000000036
        │   ├── edits_0000000000000000037-0000000000000000038
        │   ├── edits_0000000000000000039-0000000000000000040
        │   ├── edits_0000000000000000041-0000000000000000042
        │   ├── edits_0000000000000000043-0000000000000000044
        │   ├── edits_0000000000000000045-0000000000000000046
        │   ├── edits_0000000000000000048-0000000000000000049
        │   ├── fsimage_0000000000000000047
        │   ├── fsimage_0000000000000000047.md5
        │   ├── fsimage_0000000000000000049
        │   ├── fsimage_0000000000000000049.md5
        │   └── VERSION
        └── in_use.lock

HDFS에 파일 넣기


새 테스트 파일
# mkdir -p /root/input_data
# cd /root/input_data/
# echo "This is a test." >> test_data.txt

hadoop 명령을 실행하여 파일을 넣습니다.
# cd /opt/hadoop-2.7.1/bin/
# ./hadoop fs -put /root/input_data/ /input_data
15/08/13 03:16:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

/root/input_데이터 디렉토리에 있는 파일, HDFS로 복사된/input_데이터 디렉토리 아래
hadoop 명령을 실행하고 파일 보기
# ./hadoop fs -ls /input_data
15/08/13 03:20:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
-rw-r--r--   2 root supergroup         16 2015-08-13 03:20 /input_data/test_data.txt

HDFS용 작업 명령
# ./hadoop fs 
Usage: hadoop fs [generic options]
[-appendToFile  ... ]
[-cat [-ignoreCrc]  ...]
[-checksum  ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R]  PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l]  ... ]
[-copyToLocal [-p] [-ignoreCrc] [-crc]  ... ]
[-count [-q] [-h]  ...]
[-cp [-f] [-p | -p[topax]]  ... ]
[-createSnapshot  []]
[-deleteSnapshot  ]
[-df [-h] [ ...]]
[-du [-s] [-h]  ...]
[-expunge]
[-find  ...  ...]
[-get [-p] [-ignoreCrc] [-crc]  ... ]
[-getfacl [-R] ]
[-getfattr [-R] {-n name | -d} [-e en] ]
[-getmerge [-nl]  ]
[-help [cmd ...]]
**[-ls [-d] [-h] [-R] [ ...]]**
[-mkdir [-p]  ...]
[-moveFromLocal  ... ]
[-moveToLocal  ]
[-mv  ... ]
**[-put [-f] [-p] [-l]  ... ]**
[-renameSnapshot   ]
**[-rm [-f] [-r|-R] [-skipTrash]  ...]**
[-rmdir [--ignore-fail-on-non-empty]  ...]
[-setfacl [-R] [{-b|-k} {-m|-x } ]|[--set  ]]
[-setfattr {-n name [-v value] | -x name} ]
[-setrep [-R] [-w]   ...]
[-stat [format]  ...]
[-tail [-f] ]
[-test -[defsz] ]
[-text [-ignoreCrc]  ...]
[-touchz  ...]
[-truncate [-w]   ...]
[-usage [cmd ...]]

Generic options supported are
-conf      specify an application configuration file
-D             use value for given property
-fs       specify a namenode
-jt     specify a ResourceManager
-files     specify comma separated files to be copied to the map reduce cluster
-libjars     specify comma separated jar files to include in the classpath.
-archives     specify comma separated archives to be unarchived on the compute machines.

The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]

좋은 웹페이지 즐겨찾기