| 1 | | cp -rf Example/itri/ /tmp |
| 2 | | bin/hadoop dfs -put /tmp/itri/income/ income |
| 3 | | bin/hadoop jar ItriMenu.jar Itri1LoadFile |
| 4 | | |
| 5 | | {{{ |
| 6 | | #text |
| 7 | | create new table: itri |
| 8 | | Put data :"GunLong" to Table: itri's Detail:Name |
| 9 | | Put data :"01" to Table: itri's Detail:Locate |
| 10 | | Put data :"20" to Table: itri's Products:P1 |
| 11 | | Put data :"40" to Table: itri's Products:P2 |
| 12 | | Put data :"30" to Table: itri's Products:P3 |
| 13 | | Put data :"50" to Table: itri's Products:P4 |
| 14 | | |
| 15 | | Put data :"Esing" to Table: itri's Detail:Name |
| 16 | | Put data :"02" to Table: itri's Detail:Locate |
| 17 | | Put data :"50" to Table: itri's Products:P1 |
| 18 | | |
| 19 | | Put data :"SunDon" to Table: itri's Detail:Name |
| 20 | | Put data :"03" to Table: itri's Detail:Locate |
| 21 | | Put data :"40" to Table: itri's Products:P1 |
| 22 | | Put data :"30" to Table: itri's Products:P2 |
| 23 | | |
| 24 | | Put data :"StarBucks" to Table: itri's Detail:Name |
| 25 | | Put data :"04" to Table: itri's Detail:Locate |
| 26 | | Put data :"50" to Table: itri's Products:P1 |
| 27 | | Put data :"50" to Table: itri's Products:P2 |
| 28 | | Put data :"20" to Table: itri's Products:P3 |
| 29 | | }}} |
| 30 | | |
| 31 | | bin/hadoop jar ItriMenu.jar Itri2Count |
| 32 | | {{{ |
| 33 | | #!text |
| 34 | | 11/04/25 12:15:04 INFO input.FileInputFormat: Total input paths to process : 2 |
| 35 | | 11/04/25 12:15:04 INFO mapred.JobClient: Running job: job_201104250959_0004 |
| 36 | | 11/04/25 12:15:05 INFO mapred.JobClient: map 0% reduce 0% |
| 37 | | 11/04/25 12:15:12 INFO mapred.JobClient: map 100% reduce 0% |
| 38 | | 11/04/25 12:15:21 INFO mapred.JobClient: map 100% reduce 100% |
| 39 | | }}} |
| 40 | | |
| 41 | | bin/hadoop jar ItriMenu.jar Itri3CalculateM |
| 42 | | {{{ |
| 43 | | #!text |
| 44 | | 11/04/25 12:16:18 INFO mapred.JobClient: map 0% reduce 0% |
| 45 | | 11/04/25 12:16:27 INFO mapred.JobClient: map 100% reduce 0% |
| 46 | | 11/04/25 12:16:36 INFO mapred.JobClient: map 100% reduce 100% |
| 47 | | }}} |
| 48 | | |
| 49 | | bin/hadoop jar ItriMenu.jar Itri4SortTurnover |
| 50 | | |
| 51 | | bin/hadoop jar ItriMenu.jar Itri5ShowReport 120 |
| | 1 | {{{ |
| | 2 | #!html |
| | 3 | <div style="text-align: center; color:#151B8D"><big style="font-weight: bold;"><big><big> |
| | 4 | 案例實務 |
| | 5 | </big></big></big></div> <div style="text-align: center; color:#7E2217"><big style="font-weight: bold;"><big> |
| | 6 | ITRI 餐廳 |
| | 7 | </big></big></div> |
| | 8 | }}} |
| | 9 | |
| | 10 | [[PageOutline]] |
| | 11 | |
| | 12 | [wiki:waue/2011/0426 >> 回課程大綱] |
| | 13 | |
| | 14 | = 執行環境 = |
| | 15 | |
| | 16 | * 檢查是否有加裝 transactional 函式庫 |
| | 17 | * 加裝 tableindexed 函式庫 |
| | 18 | {{{ |
| | 19 | cp /opt/hbase/contrib/transactional/hbase-*-transactional.jar /opt/hbase/lib/ |
| | 20 | }}} |
| | 21 | * 重新啟動 hbase |
| | 22 | {{{ |
| | 23 | /opt/hbase/bin/stop-hbase.sh |
| | 24 | /opt/hbase/bin/start-hbase.sh |
| | 25 | }}} |
| | 26 | |
| | 27 | = 事先準備 = |
| | 28 | |
| | 29 | * 請先準備以下檔案 |
| | 30 | * /tmp/itri/store.txt |
| | 31 | {{{ |
| | 32 | #!text |
| | 33 | T01;GunLong; 01;20;40;30;50 |
| | 34 | T02;Esing; 02;50 |
| | 35 | T03;SunDon; 03;40;30 |
| | 36 | T04;StarBucks; 04;50;50;20 |
| | 37 | }}} |
| | 38 | |
| | 39 | * 請準備以下檔案,並將 income 資料夾上傳到hdfs |
| | 40 | * /tmp/itri/income/0202.txt |
| | 41 | {{{ |
| | 42 | #!text |
| | 43 | waue:T01:P1:xxxxx |
| | 44 | jazz:T01:P2:xxxxx |
| | 45 | lia:T01:P3:xxxxx |
| | 46 | hung:T02:P1:xxxxx |
| | 47 | lia:T04:P1:xxxxx |
| | 48 | lia:T04:P1:xxxxx |
| | 49 | hung:T04:P3:xxxxx |
| | 50 | hung:T04:P2:xxxxx |
| | 51 | }}} |
| | 52 | * /tmp/itri/income/0203.txt |
| | 53 | {{{ |
| | 54 | #!text |
| | 55 | xxx:T01:P4:xxxxx |
| | 56 | ooo:T02:P1:xxxxx |
| | 57 | oo:T03:P1:xxxxx |
| | 58 | xxx:T03:P1:xxxxx |
| | 59 | aaa:T03:P1:xxxxx |
| | 60 | }}} |
| | 61 | * 上傳到 HDFS |
| | 62 | {{{ |
| | 63 | $ /opt/hadoop/bin/hadoop fs -put /tmp/itri/income/ income |
| | 64 | }}} |
| | 65 | |
| | 66 | == 假設: == |
| | 67 | |
| | 68 | 目前有四間商店進駐 ITRI ,分別為 |
| | 69 | |
| | 70 | 位在第1區的GunLong,品項4項單價為<20,40,30,50> |
| | 71 | |
| | 72 | 第2區的ESing,品項1項單價為<50> |
| | 73 | |
| | 74 | 第3區的SunDon,品項2項單價為<40,30> |
| | 75 | |
| | 76 | 第4區的StarBucks,品項3項單價為<50,50,20> |
| | 77 | |
| | 78 | |
| | 79 | == 1. 建立商店資料 == |
| | 80 | |
| | 81 | [wiki:waue/2011/0425_Itri1LoadFile Itri1LoadFile.java ], |
| | 82 | |
| | 83 | || || Detail || Detail || Products || Products || Products || Products || Turnover || |
| | 84 | || || Name || Locate || P1 || P2 || P3 || P4|| || |
| | 85 | || T01 || Gun-Long || 01 || 20 || 40 || 30 || 50 || || |
| | 86 | || T02 || ESing || 02 || 50 || || || || || |
| | 87 | || T03 || Sun-Don || 03 || 40 || 30 || || || || |
| | 88 | || T04 || Star Bucks || 04 || 50 || 50 || || || || |
| | 89 | |
| | 90 | {{{ |
| | 91 | $ /opt/hadoop/bin/hadoop jar ItriMenu.jar Itri1LoadFile |
| | 92 | }}} |
| | 93 | |
| | 94 | {{{ |
| | 95 | create new table: Itri |
| | 96 | Put data :"GunLong" to Table: Itri's Detail:Name |
| | 97 | Put data :"01" to Table: Itri's Detail:Locate |
| | 98 | Put data :"20" to Table: Itri's Products:P1 |
| | 99 | Put data :"40" to Table: Itri's Products:P2 |
| | 100 | Put data :"30" to Table: Itri's Products:P3 |
| | 101 | Put data :"50" to Table: Itri's Products:P4 |
| | 102 | |
| | 103 | Put data :"Esing" to Table: Itri's Detail:Name |
| | 104 | Put data :"02" to Table: Itri's Detail:Locate |
| | 105 | Put data :"50" to Table: Itri's Products:P1 |
| | 106 | |
| | 107 | Put data :"SunDon" to Table: Itri's Detail:Name |
| | 108 | Put data :"03" to Table: Itri's Detail:Locate |
| | 109 | Put data :"40" to Table: Itri's Products:P1 |
| | 110 | Put data :"30" to Table: Itri's Products:P2 |
| | 111 | |
| | 112 | Put data :"StarBucks" to Table: Itri's Detail:Name |
| | 113 | Put data :"04" to Table: Itri's Detail:Locate |
| | 114 | Put data :"50" to Table: Itri's Products:P1 |
| | 115 | Put data :"50" to Table: Itri's Products:P2 |
| | 116 | Put data :"20" to Table: Itri's Products:P3 |
| | 117 | |
| | 118 | }}} |
| | 119 | |
| | 120 | == 2 計算單月每個品項的購買次數 == |
| | 121 | |
| | 122 | [wiki:waue/2011/0425_Itri2Count Itri2Count.java] , |
| | 123 | |
| | 124 | {{{ |
| | 125 | $ /opt/hadoop/bin/hadoop jar ItriMenu.jar Itri2Count |
| | 126 | }}} |
| | 127 | |
| | 128 | || || Detail ||Detail || Products || Products||Products || Products|| Turnover || Turnover || Turnover || Turnover || || |
| | 129 | || || Name || Locate || P1 || P2 || P3 || P4|| P1 || P2 || P3 || P4 || || |
| | 130 | || T01 || Gun-Long || 01 || 20 || 40 || 30 || 50 || 1 || 1 || 1 || 1 || || |
| | 131 | || T02 || ESing || 02 || 50 || || || ||2 || || || || || |
| | 132 | || T03 || Sun-Don || 03 || 40 || 30 || || ||3 || || || || || |
| | 133 | || T04 || Star Bucks || 04 || 50 || 50 || || ||2 || 1 || 1 || || || |
| | 134 | |
| | 135 | {{{ |
| | 136 | > scan 'Itri' |
| | 137 | ROW COLUMN+CELL |
| | 138 | T01 column=Detail:Locate, timestamp=1265184360616, value=01 |
| | 139 | T01 column=Detail:Name, timestamp=1265184360548, value=GunLong |
| | 140 | T01 column=Products:P1, timestamp=1265184360694, value=20 |
| | 141 | T01 column=Products:P2, timestamp=1265184360758, value=40 |
| | 142 | T01 column=Products:P3, timestamp=1265184360815, value=30 |
| | 143 | T01 column=Products:P4, timestamp=1265184360866, value=50 |
| | 144 | T01 column=Turnover:P1, timestamp=1265187021528, value=1 |
| | 145 | T01 column=Turnover:P2, timestamp=1265187021528, value=1 |
| | 146 | T01 column=Turnover:P3, timestamp=1265187021528, value=1 |
| | 147 | T01 column=Turnover:P4, timestamp=1265187021528, value=1 |
| | 148 | T02 column=Detail:Locate, timestamp=1265184360951, value=02 |
| | 149 | T02 column=Detail:Name, timestamp=1265184360910, value=Esing |
| | 150 | T02 column=Products:P1, timestamp=1265184361051, value=50 |
| | 151 | T02 column=Turnover:P1, timestamp=1265187021528, value=2 |
| | 152 | T03 column=Detail:Locate, timestamp=1265184361124, value=03 |
| | 153 | T03 column=Detail:Name, timestamp=1265184361098, value=SunDon |
| | 154 | T03 column=Products:P1, timestamp=1265184361189, value=40 |
| | 155 | T03 column=Products:P2, timestamp=1265184361259, value=30 |
| | 156 | T03 column=Turnover:P1, timestamp=1265187021529, value=3 |
| | 157 | T04 column=Detail:Locate, timestamp=1265184361311, value=04 |
| | 158 | T04 column=Detail:Name, timestamp=1265184361287, value=StarBucks |
| | 159 | T04 column=Products:P1, timestamp=1265184361343, value=50 |
| | 160 | T04 column=Products:P2, timestamp=1265184361386, value=50 |
| | 161 | T04 column=Products:P3, timestamp=1265184361422, value=20 |
| | 162 | T04 column=Turnover:P1, timestamp=1265187021529, value=2 |
| | 163 | T04 column=Turnover:P2, timestamp=1265187021529, value=1 |
| | 164 | T04 column=Turnover:P3, timestamp=1265187021529, value=1 |
| | 165 | 4 row(s) in 0.0310 seconds |
| | 166 | |
| | 167 | }}} |
| | 168 | |
| | 169 | |
| | 170 | |
| | 171 | |
| | 172 | == 3. 計算當天營業額 == |
| | 173 | |
| | 174 | [wiki:waue/2011/0425_Itri3CalculateMR Itri3CalculateMR.java], |
| | 175 | |
| | 176 | {{{ |
| | 177 | $ /opt/hadoop/bin/hadoop jar ItriMenu.jar Itri3CalculateMR |
| | 178 | }}} |
| | 179 | |
| | 180 | || || Detail || Detail || Products || Products|| Products || Products || Turnover || Turnover || Turnover || Turnover || Turnover || |
| | 181 | || || Name || Locate || P1 || P2 || P3 || P4|| P1 || P2 || P3 || P4 || Sum || |
| | 182 | || T01 || Gun-Long || 01 || 20 || 40 || 30 || 50 || 1 || 1 || 1 || 1 || 140 || |
| | 183 | || T02 || ESing || 02 || 50 || || || ||2 || || || || 100 || |
| | 184 | || T03 || Sun-Don || 03 || 40 || 30 || || ||3 || || || || 120 || |
| | 185 | || T04 || Star Bucks || 04 || 50 || 50 || || ||2 || 1 || 1 || || 170 || |
| | 186 | |
| | 187 | |
| | 188 | {{{ |
| | 189 | > scan ‘Itri’ |
| | 190 | ROW COLUMN+CELL |
| | 191 | T01 column=Detail:Locate, timestamp=1265184360616, value=01 |
| | 192 | T01 column=Detail:Name, timestamp=1265184360548, value=GunLong |
| | 193 | T01 column=Products:P1, timestamp=1265184360694, value=20 |
| | 194 | T01 column=Products:P2, timestamp=1265184360758, value=40 |
| | 195 | T01 column=Products:P3, timestamp=1265184360815, value=30 |
| | 196 | T01 column=Products:P4, timestamp=1265184360866, value=50 |
| | 197 | T01 column=Turnover:P1, timestamp=1265187021528, value=1 |
| | 198 | T01 column=Turnover:P2, timestamp=1265187021528, value=1 |
| | 199 | T01 column=Turnover:P3, timestamp=1265187021528, value=1 |
| | 200 | T01 column=Turnover:P4, timestamp=1265187021528, value=1 |
| | 201 | T01 column=Turnover:sum, timestamp=1265190421993, value=140 |
| | 202 | T02 column=Detail:Locate, timestamp=1265184360951, value=02 |
| | 203 | T02 column=Detail:Name, timestamp=1265184360910, value=Esing |
| | 204 | T02 column=Products:P1, timestamp=1265184361051, value=50 |
| | 205 | T02 column=Turnover:P1, timestamp=1265187021528, value=2 |
| | 206 | T02 column=Turnover:sum, timestamp=1265190421993, value=100 |
| | 207 | T03 column=Detail:Locate, timestamp=1265184361124, value=03 |
| | 208 | T03 column=Detail:Name, timestamp=1265184361098, value=SunDon |
| | 209 | T03 column=Products:P1, timestamp=1265184361189, value=40 |
| | 210 | T03 column=Products:P2, timestamp=1265184361259, value=30 |
| | 211 | T03 column=Turnover:P1, timestamp=1265187021529, value=3 |
| | 212 | T03 column=Turnover:sum, timestamp=1265190421993, value=120 |
| | 213 | T04 column=Detail:Locate, timestamp=1265184361311, value=04 |
| | 214 | T04 column=Detail:Name, timestamp=1265184361287, value=StarBucks |
| | 215 | T04 column=Products:P1, timestamp=1265184361343, value=50 |
| | 216 | T04 column=Products:P2, timestamp=1265184361386, value=50 |
| | 217 | T04 column=Products:P3, timestamp=1265184361422, value=20 |
| | 218 | T04 column=Turnover:P1, timestamp=1265187021529, value=2 |
| | 219 | T04 column=Turnover:P2, timestamp=1265187021529, value=1 |
| | 220 | T04 column=Turnover:P3, timestamp=1265187021529, value=1 |
| | 221 | T04 column=Turnover:sum, timestamp=1265190421993, value=170 |
| | 222 | 4 row(s) in 0.0460 seconds |
| | 223 | |
| | 224 | }}} |
| | 225 | |
| | 226 | == 4. 建立索引資料表 == |
| | 227 | [wiki:waue/2011/0425_Itri4SortTurnover Itri4SortTurnover.java] |
| | 228 | |
| | 229 | {{{ |
| | 230 | $ /opt/hadoop/bin/hadoop jar ItriMenu.jar Itri4SortTurnover |
| | 231 | }}} |
| | 232 | |
| | 233 | {{{ |
| | 234 | > scan 'Itri-Sum' |
| | 235 | ROW COLUMN+CELL |
| | 236 | 100T02 column=Turnover:Sum, timestamp=1265190782127, value=100 |
| | 237 | 100T02 column=__INDEX__:ROW, timestamp=1265190782127, value=T02 |
| | 238 | 120T03 column=Turnover:Sum, timestamp=1265190782128, value=120 |
| | 239 | 120T03 column=__INDEX__:ROW, timestamp=1265190782128, value=T03 |
| | 240 | 140T01 column=Turnover:Sum, timestamp=1265190782126, value=140 |
| | 241 | 140T01 column=__INDEX__:ROW, timestamp=1265190782126, value=T01 |
| | 242 | 170T04 column=Turnover:Sum, timestamp=1265190782129, value=170 |
| | 243 | 170T04 column=__INDEX__:ROW, timestamp=1265190782129, value=T04 |
| | 244 | 4 row(s) in 0.0140 seconds |
| | 245 | |
| | 246 | }}} |
| | 247 | |
| | 248 | == 4.b 產生最終報表 == |
| | 249 | |
| | 250 | [wiki:waue/2011/0425_Itri5ShowReport Itri5ShowReport.java] |
| | 251 | |
| | 252 | {{{ |
| | 253 | $ /opt/hadoop/bin/hadoop jar ItriMenu.jar Itri5ShowReport 130 |
| | 254 | }}} |
| | 255 | |