Hive 파티션 – Sellkart 사례 연구 - 데이터를 전략적으로 사용
게시 됨: 2015-08-14Sellkart는 인도의 주요 전자 상거래 웹사이트이자 소매점이며 다른 모든 전자 상거래 웹사이트와 마찬가지로 판매하는 모든 항목의 사용자 데이터와 인벤토리를 저장해야 합니다. 그것은 주요 데이터 저장 선택 중 하나인 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;
사용자 이름을 컬렉션으로 얻기 위해 최고의 소비자 도시를 지금 그룹화합니다.
데이터는 그룹화되지만 순서가 지정되지 않습니다.
그래서 지금 주문해야 합니다.
따라서 이러한 방식으로 최종 데이터가 정렬됩니다.
이제 이 데이터를 사용할 수 있습니다. 마찬가지로 소비자가 가장 적은 도시를 추출할 수 있습니다. 이러한 도시에서 회사는 더 많은 사람들이 포털과 상호 작용할 수 있도록 광고 및 홍보 캠페인에 더 많은 예산을 정의할 수 있습니다.
그리고 소비율이 높은 도시와 소비자를 위해 기업은 신제품을 출시하고 영역을 확장할 수 있습니다.
의문 사항이나 질문이 있는 경우 아래 의견란에 언급하십시오.