• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

rack

21.07.22 12:29 작성 조회수 100

0

rack이 여러개인데...하나의  파일이 여러 rack에 분산저장될수있는건지...

아니면 하나의 rack으로만 저장되는건지..나중에 찾을때는 어떤 rack에 있는건지...어떻게 찾나요? 

답변 1

답변을 작성해보세요.

1

odark 님에게

하나의 파일을 맵리듀스가 자동으로 분산처리합니다. 사용자나 프로그래머가 하나의 렉(Rack)이나 여러 개의 렉을 나누지는 않습니다.  다만 하둡 개발하는 팀 내에서 네임노드를 어느 서버에 둘지만 정하여 그 서버에 네임노드를 넣어 두면 곧 인스톨하게 되어 맵리듀스나 기타 하둡 에코시스템을 실행시키면 네임노드가 렉의 아이디 곧 Replica(레플리카들)을 만들어 넣은 것이죠. 개발자가 찾는 것이 아닌 네임노드 곧 네임노드 서버가 자동으로 분산처리하여 넣고 그들이 자동으로 찾아 내는 것이고요. 다만 용량만 지정한다는 의미입니다.

만약 하둡을 관리자 입장에서 수동으로 하려면 스크립트를 해야 하고 복잡한 절차를 거쳐야 한다는 의미에서 하둡 경력을 쌓아야 될 실력이죠.,

머 이런 형식인 것이죠.

네트워크 아이피를 뒤져서 렉 파일을 찾아내는 형식입니다. 프로그램 형식보다는 네트워크 형식인 것이죠.

심풀 하드 코드 된 매핑(simple hard-coded mapping)을 따져야 합니다. 깊은 이해는 네트워크나 하둡 소스를 뒤져서 찾아가야 합니다. 긴 시간을 투자 해야 하죠... 대학 과정인 셈이죠..

답변이 되었으면 합니다.

#!/usr/bin/python
# this script makes assumptions about the physical environment.
#  1) each rack is its own layer 3 network with a /24 subnet, which
# could be typical where each rack has its own
#     switch with uplinks to a central core router.
#
#             +-----------+
#             |core router|
#             +-----------+
#            /             \
#   +-----------+        +-----------+
#   |rack switch|        |rack switch|
#   +-----------+        +-----------+
#   | data node |        | data node |
#   +-----------+        +-----------+
#   | data node |        | data node |
#   +-----------+        +-----------+
#
# 2) topology script gets list of IP's as input, calculates network address, and prints '/network_address/ip'.

import netaddr
import sys
sys.argv.pop(0)                                                  # discard name of topology script from argv list as we just want IP addresses

netmask = '255.255.255.0'                                        # set netmask to what's being used in your environment.  The example uses a /24

for ip in sys.argv:                                              # loop over list of datanode IP's
address = '{0}/{1}'.format(ip, netmask)                      # format address string so it looks like 'ip/netmask' to make netaddr work
try:
   network_address = netaddr.IPNetwork(address).network     # calculate and print network address
   print "/{0}".format(network_address)
except:
   print "/rack-unknown"                                    # print catch-all value if unable to calculate network address