HDFS, Hadoop으로 데이터 살펴보기

jake·2023년 2월 22일
0

1. github에 데이터 업로드

가상머신을 사용하고 있기 때문에 putty에서 wget 명령어를 이용해 데이터를 다운받을 것이다. 그러기 위해 github에 데이터를 업로드 해야한다.

크롤링으로 직접 데이터를 수집하여 파일을 만들었다. 데이터는 8division이란 의류사이트에서 판매하는 아우터의 정보로 이루어져 있다. 이 후 github에 8division1.data라는 이름으로 데이터를 업로드했다. 업로드한 데이터를 우클릭하면 데이터의 위치가 나오고 그 위치를 wget 명령어와 함께 입력하면 된다.

근데 한가지 주의 사항이 있다!
데이터의 주소가
https://github.com/~~~/~~~~/blob/main/~~~~/8division1.data
이런 식으로 나올텐데 "blob"이란 글자를 "raw"로 바꿔야한다. "blob"을 유지하면 데이터의 html파일이 다운되기 때문이다. 따라서 밑의 주소를 사용해야 한다.
https://github.com/~~~/~~~~/raw/main/~~~~/8division1.data

wget https://github.com/~~~/~~~~/raw/main/~~~~/8division1.data

putty에서 위의 코드를 입력하면 성공적으로 github에 업로드한 데이터를 가상머신에서도 이용할 수 있게 된다.

less 8division1.data

less 명령어를 통해 데이터의 대략적인 모습을 볼 수 있다.
데이터는 브랜드명, 제품명, 가격으로 이루어져 있고 TAB으로 구분되어 있다.

2. MapReduce

이번에는 데이터들을 분석해줄 파이썬 스크립트를 만들고 가상머신에 업로드하자. 각 브랜드마다 몇개의 제품이 있는지 궁금하다.

from mrjob.job import MRJob
from mrjob.step import MRStep

class RatingsBreakdown(MRJob):
    def steps(self):
        return [
            MRStep(mapper=self.mapper_get_ratings,
                   reducer=self.reducer_count_ratings)
        ]

    def mapper_get_ratings(self, _, line):
        (brand,product_name,price) = line.split('\t')
        yield brand, 1

    def reducer_count_ratings(self, key, values):
        yield key, sum(values)

if __name__ == '__main__':
    RatingsBreakdown.run()

하둡에서의 데이터 분석은 mapper와 reducer로 이루어져 있다.
mapper를 통해 데이터를 구조화 시키고 reducer로 구조화된 데이터를 정리한다. mapper_get_ratings 함수에서는 각 줄마다 데이터를 가져와 brand, product_name, price로 쪼갠다. 쪼개는 기준은 구분자인 TAB이다. 옆에 있는 '\t'가 TAB을 의미한다.
yield brand, 1은 brand가 key, 1이 value을 의미한다. mapper은 항상 key/value를 가져온다. 파이썬에서의 dictionary와 구조가 비슷하다.

reducer_count_ratings 함수에서는 mapper_get_ratings에서는 브랜드에 값을 1씩 더하게 하였다. yield key, sum(value)는 key에 맞게 value(1)를 더하란 뜻이다.

이제 github에 업로드하고 가상머신에서 다운 받자.
이전과 똑같이 wget 파일위치를 입력하면 된다. (raw로 바꾸고)

3. HDFS에서 실행하기

python map_reduce.py 8division1.data

빠르게 결과가 나왔다.
ERL이란 브랜드는 4개의 제품이 있고, FDR이란 브랜드는 5개의 제품이 있다. 좀더 복잡하게 스크립트를 작성하면 여러 분석을 할 수 있을 것 같다.

4. Hadoop에서 실행하기

 python map_reduce.py -r hadoop --hadoop-streaming-jar /하둡이 설치된 주소/ 8division1.data

똑같은 결과가 나왔다!

0개의 댓글