Hive 파티션 – Sellkart 사례 연구 - 데이터를 전략적으로 사용

게시 됨: 2015-08-14

Sellkart는 인도의 주요 전자 상거래 웹사이트이자 소매점이며 다른 모든 전자 상거래 웹사이트와 마찬가지로 판매하는 모든 항목의 사용자 데이터와 인벤토리를 저장해야 합니다. 그것은 주요 데이터 저장 선택 중 하나인 MySQL 데이터베이스를 사용합니다. MySQL은 안전하고 신뢰할 수 있는 데이터 저장소입니다. 그러나 Sellkart가 성장함에 따라 점점 더 많은 고객이 이 전자 상거래 포털에 뛰어들기 시작했습니다. 이제 Sellkart는 위치, 행동, 인구 통계 로그, 구매 항목 및 반품 항목, COD, 신용 카드/직불 카드와 같은 지불 옵션과 같은 사용자 데이터를 수집합니다. 분석가는 이 데이터를 사용하여 고객 가치, 더 나은 지불 옵션을 예측하고 더 나은 광고 캠페인을 사용하여 비즈니스를 확장하여 프로세스를 간소화합니다.

수집된 데이터를 전략적으로 사용하는 방법을 설명하기 위해 사용자 이름, 도시, 직업, 총 번호로 구성된 가짜 소비자 데이터 세트를 여기에서 고려할 것입니다. 구매한 품목의 총 개수 결함으로 인해 반환된 항목의.

여기 가짜 데이터 세트(data.csv)에는 25개 이상의 항목을 구매한 고객의 데이터가 있습니다.

data.csv의 필드

  • 사용자 이름(문자열)
  • 도시(문자열)
  • 직업(문자열)
  • 구매함(정수)
  • 반환됨(정수)
  • Sellkart는 여러 열과 수 기가바이트가 넘는 상당히 큰 데이터 세트가 있는 이 데이터를 사용하여 다음과 같은 시스템의 주요 통찰력을 예측하고 이해합니다.

  • 고객의 평생 가치
  • 제품 성공
  • 제품의 인구통계학적 구매
  • 관심 지역
  • 제품의 실시간 가격 책정
  • 고객을 끌어들이는 상향 판매

이제 우리는 하둡에서 소규모 분석이 어떻게 일어나는지 보여줄 것입니다. 데이터를 사용하여 알아낼 사항:

) 구매한 제품의 양을 기준으로 최고 소비자를 찾습니다.

용도: 일반 고객을 상향 판매하여 베스트 바이어에게 특별 권한을 부여합니다.

b) 대부분의 제품을 구매하는 직업 부문을 찾습니다.

용도: 베스트셀러 범위의 제품을 더 많이 유지, 유사한 유형의 제품에 권장합니다.

c) 대부분의 제품이 구매되는 도시를 찾습니다.

용도: 지역 현명한 타겟팅 구매자, 고객이 적은 지역에 초점, 좋은 시장에서 신제품 시도.

1. 데이터를 HDFS에 복사합니다.

a) hadoop HDFS에 디렉토리를 만듭니다.

[training@localhost ~]$ hadoop fs -mkdir /user/training/case1

[training@localhost ~]$ hadoop fs -ls

Found 3 items

drwxr-xr-x - training supergroup 0 2015-07-21 16:48 /user/training/case1

-rw-r--r-- 1 training supergroup 44009445 2015-07-20 12:39 /user/training/crime

drwxr-xr-x - training supergroup 0 2015-07-20 14:21 /user/training/csvfile

b) 추가 사용을 위해 파일 복사

[training@localhost ~]$ hadoop fs -copyFromLocal ~/Desktop/case1/data.csv /user/training/case1

[training@localhost ~]$ hadoop fs -ls /user/training/case1

Found 1 items

-rw-r--r-- 1 training supergroup 2489638 2015-07-21 16:49 /user/training/case1/data.csv

이 파일을 복사한 후 Hive를 사용하여 처리하여 다른 결과를 얻습니다.

2. 하이브를 사용하여 데이터 처리.

a) 이 데이터를 저장하는 데 사용할 테이블을 하이브에 생성합니다.

[training@localhost ~]$ hive

creatHive history file=/tmp/training/hive_job_log_training_201507211652_319213433.txt

hive> create table shopping (username string,city string,occupation string,purchaseditem,int,returneditem int) row format delimited fields

terminated by ',' stored as textfile

OK

Time taken: 2.892 seconds

hive> show tables;

OK

crimes

shopping

Time taken: 0.171 seconds

b) 파일을 하이브 테이블 쇼핑에 로드

Hive>load data inpath '/user/training/case1/data.csv' overwrite into table shopping;

Loading data to table default.shopping

Deleted hdfs://localhost/user/hive/warehouse/shopping

OK

Time taken: 2.798 seconds

c) 테이블의 통찰력을 알고 있습니다.

hive> 형식화된 쇼핑을 설명합니다.

좋아요

 # col_name data_type 주석             

사용자 이름 문자열 없음                
도시 문자열 없음                
직업 문자열 없음                
구매 항목 정수 없음                
반환된 항목 정수 없음                

# 상세 테이블 정보             
데이터베이스: 기본값                  
소유자: 교육                 
CreateTime: 2015년 7월 21일 화요일 16:56:38 IST     
LastAccessTime: 알 수 없음                  
보호 모드: 없음                     
보유: 0                        
위치: hdfs://localhost/user/hive/warehouse/shopping    
테이블 유형: MANAGED_TABLE            
테이블 매개변수:                
        transient_lastDdlTime 1437478210          

# 보관정보            
SerDe 라이브러리: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe    
입력 형식: org.apache.hadoop.mapred.TextInputFormat         
출력 형식: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat     
압축: 아니요                       
버킷 수: -1                       
버킷 열: []                       
열 정렬: []                       
스토리지 설명 매개변수:             
        field.delim ,                   
        직렬화.형식,                   
소요 시간: 0.302초

3. 이제 이 데이터가 어떻게 사용될 수 있는지 확인해야 합니다.

) 그들에게 더 많은 할인을 제공할 최고의 고객을 찾는 것. 먼저 주문한 최고 수량을 찾은 다음 해당 수량을 모든 레코드와 일치시키고 최고 고객을 찾습니다.

hive> select * from shopping limit 5;

OK

Seattle Podiatric doctor 187 5

Detroit Lakes Engineering and natural sciences manager 168 11

Jackson Map editor 187 17

Miami Clinical manager 193 5

Santa Fe Springs Radiographer 207 20

Time taken: 0.335 seconds

hive> select max(purchaseditem) from shopping;

Total MapReduce jobs = 1

Launching Job 1 out of 1

Number of reduce tasks determined at compile time: 1

In order to change the average load for a reducer (in bytes):

set hive.exec.reducers.bytes.per.reducer=

In order to limit the maximum number of reducers:

set hive.exec.reducers.max=

In order to set a constant number of reducers:

set mapred.reduce.tasks=

Starting Job = job_201507212155_0001, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507212155_0001

Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507212155_0001

2015-07-21 23:16:01,887 Stage-1 map = 0%, reduce = 0%

2015-07-21 23:16:06,988 Stage-1 map = 100%, reduce = 0%

2015-07-21 23:16:16,075 Stage-1 map = 100%, reduce = 100%

Ended Job = job_201507212155_0001

OK

250

Time taken: 18.794 seconds

hive> select * from shopping where purchaseditem = 250;

Total MapReduce jobs = 1

Launching Job 1 out of 1

Number of reduce tasks is set to 0 since there's no reduce operator

Starting Job = job_201507212155_0002, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507212155_0002

Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507212155_0002

2015-07-21 23:18:31,586 Stage-1 map = 0%, reduce = 0%

2015-07-21 23:18:33,598 Stage-1 map = 100%, reduce = 0%

2015-07-21 23:18:34,608 Stage-1 map = 100%, reduce = 100%

Ended Job = job_201507212155_0002

OK

Ablay1993 Seattle Ergonomist 250 7

Ablent71 Sugar Land Professional property manager 250 10

Affew1942 Alquippa Human resources consultant 250 13

Agar1976 Bell Oak Zookeeper 250 5

Akeem Manchester Marine 250 11

Alat1954 Columbus Assembler 250 7

Albertha Baton Rouge Mixing and blending machine operator 250 21

Amelia.Skiles Westfield Mediator 250 0

Amir_Spencer Polk City Epidemiologist 250 11

Angel.Thiel Hamilton Keying machine operator 250 21

Annalise_Langosh East Northport Fitness director 250 24

그래서 목록이 계속됩니다. 이제 회사는 최고의 고객을 찾을 수 있습니다. 이 단계는 MySQL에서 쉽게 수행할 수 있지만 데이터가 기가비트일 때 데이터가 매우 작은 경우에만 Hadoop이 도움이 됩니다.

b) 이제 분석가는 어떤 직업 부문이 최고의 고객인지 찾을 수 있습니다. 즉, 가장 많이 구매하는 사람들의 작업을 분석하여 해당 부문의 제품을 늘릴 수 있습니다.

hive> select distinct occupation from shopping where purchaseditem = 250;;

Total MapReduce jobs = 1

Launching Job 1 out of 1

Number of reduce tasks not specified. Estimated from input data size: 1

In order to change the average load for a reducer (in bytes):

set hive.exec.reducers.bytes.per.reducer=

In order to limit the maximum number of reducers:

set hive.exec.reducers.max=

In order to set a constant number of reducers:

set mapred.reduce.tasks=

Starting Job = job_201507220045_0006, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507220045_0006

Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507220045_0006

2015-07-22 01:09:52,904 Stage-1 map = 0%, reduce = 0%

2015-07-22 01:09:54,914 Stage-1 map = 100%, reduce = 0%

2015-07-22 01:10:01,968 Stage-1 map = 100%, reduce = 100%

Ended Job = job_201507220045_0006

OK

Account clerk

Accounting clerk

Actuarie

Administrative assistant.

등등.

이제 회계 담당자가 사람들이 물건을 구매하는 최고의 직업 분야 중 하나라는 것을 알았기 때문에 이 부서의 매출을 늘릴 수 있습니다.

4. 돼지 사용하기

이제 우리는 pig를 사용하여 특정 도시에서 사용자 이름 그룹을 수집하는 것과 같은 다른 기능을 수행할 것이며 이 도시는 최고 소비자입니다.

a) pig에 데이터 로드

grunt> fulldata = load '/user/training/case1/' using PigStorage(',') as

(username:chararray,city:chararray,occupation:chararray, purchaseditem:int,returneditem:int);
grunt>dump fulldata;

(username:chararray,city:chararray,occupation:chararray, purchaseditem:int,returneditem:int);
grunt>dump fulldata;

b) 이제 도시에 따라 상위 소비자의 사용자 이름을 그룹화합니다.

상위 소비자의 기록을 분리하기 위해

Hive>top = filter fulldata by purchaseditem==250;

사용자 이름을 컬렉션으로 얻기 위해 최고의 소비자 도시를 지금 그룹화합니다.

데이터는 그룹화되지만 순서가 지정되지 않습니다.

그래서 지금 주문해야 합니다.

따라서 이러한 방식으로 최종 데이터가 정렬됩니다.

이제 이 데이터를 사용할 수 있습니다. 마찬가지로 소비자가 가장 적은 도시를 추출할 수 있습니다. 이러한 도시에서 회사는 더 많은 사람들이 포털과 상호 작용할 수 있도록 광고 및 홍보 캠페인에 더 많은 예산을 정의할 수 있습니다.

그리고 소비율이 높은 도시와 소비자를 위해 기업은 신제품을 출시하고 영역을 확장할 수 있습니다.

의문 사항이나 질문이 있는 경우 아래 의견란에 언급하십시오.