频道栏目
首页 > 网络 > 云计算 > 正文

基于HBase的冠字号查询系统2--实现部分

2016-06-06 09:03:31           
收藏   我要投稿

1. 软件版本和部署

maven:3.3.9,jdk:1.7 ,Struts2:2.3.24.1,hibernate:4.3.6,spring:4.2.5,MySQL:5.1.34,Junit:4,Myeclipse:2014;

Hadoop2.6.4,HBase1.1.2

源码下载:https://github.com/fansy1990/ssh_v3/releases

数据下载:http://download.csdn.net/detail/fansy1990/9540865 或 http://pan.baidu.com/s/1dEVeJz7

请先参考上篇Blog:基于HBase的冠字号查询系统1--理论部分;

2. 系统功能&核心实现

2.1 系统首页

\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tW4fzzz+/pbGTgHa9ZegoDGPrcO9KTIrNUmPa/Sx3PDv+Sqsz2bnSzhjHSwIkQAIkQAIkQAIkQAIkQAIkQAIkQAJrjICZvFxjU+d0hyTAZ3YOCYzmJEACJEACJEACJEACJEACJEACJEACJEACJEACJyYBJjtPzPPCUZEACZAACZAACZAACZAACZAACZAACZAACZAACQxJgMnOIYHRnARIgARIgARIgARIgARIgARIgARIgARIgARI4MQkwGd2npjnhaMiARIgARIgARIgARIgARIgARIgARIgARJYBgIzMzN9o0xNTfW1ocHKIMBk58o4TxwlCZAACZAACZAACZAACZAACZAACZAACZDAIglMTa0HcB2Au7rkzMxzkIToMAnPkZGRwLeq2212fZFTCHQbNL7YBR2r6Y3uvI096CxTTwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIksIoISKJTDlsCU5ev9xKeTYMOIUlC+yMGtk6TiZI41LIGctmqTVCbS6/xTOnqz2w3y2Jrf8z21VBmsnM1nEXOgQRIgARIgARIgARIgARIgARIgARIgARIoA8B2dkphy2Bma8+57W4bnk3k4NiJHVbqo3XYNhIwlLbbKm2Gstut+tqH5QEDdKr31qRvI19rZxpzpMESIAESIAESIAESIAESIAESIAESIAE1jSBuyC3rAP6DE+5dX2991EsfrvWOqUmLk2tJCRderFRvUj7ED89NIZZ17JKjaV10191tnT169LZfiu9zmTnSj+DHD8JkAAJkAAJkAAJkAAJkAAJkAAJkAAJkMAABK7D1FT3Mzv7OWqCMCjBaCYr7bLGNn01nraJNNtVb9tJXexctupjStvOrpu2q6nMZOdqOpucCwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQACB7p2daui/wEhrnVKThK7ko1qqjdSlbNuq3TDSjKmJTtO/Vx+2r+nXq2z69bI7kduY7DyRzw7HRgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIksEwEFrez0+zclQzslXRU3142rjbpR/Su/jSmq83lY9q52jXeapFMdq6WM8l5kAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ9CCwuJ2dZkBXYtJsDyrbCUfTTto0CalS2k29aR9UNn1dNv3aXT4rUcdk50o8axwzCZAACZAACZAACZAACZAACZAACZA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k5+K40YsESIAESIAESIAESIAESIAESIAESIAESGBFEVjczk5NTmrCU6VO3axLktOsq43KXklQtaFcGgEmO5fGj94kQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIrgkCfnZ2PuidhJyjNuiQ2zbpEMOuudncv1C4XASY7l4sk45AACZAACZAACZAACZAACZAACZAACZAACZzABHrs7Lx8PbAZwFeXZ/h2klPrtlye3hjFJMBkp0mDZRIgARIgARIgARIgARIgARIgARIgARIggVVKIGBnp+zolERnwM7OYWFoQtP0k92eoudx9AmcdPS7YA8kQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkcLwJ3NUcwF3NxGZTLjLRGZS81NvYXe3axuTn0bsWuLPz6LFlZBIgARIgARIgARIgARIgARIgARIgARIggROAwMzMc92j0FvWVXZbdGg0UalKu656lXZ7v7r6US6NAJOdS+NHbxIgARIgARIgARIgARIgARIgARIgARIggROYwNTU1Ak8Og5tuQnwNvblJsp4JEACJEACJEACJEACJEACJEACJEACJEACJEACx4UAk53HBTs7JQESIAESIAESIAESIAESIAESIAESIAESIAESWG4CTHYuN1HGIwESIAESIAESIAESIAESIAESIAESIAESIAESOC4E+MzO44KdnZIACZAACZAACZAACZAACZAACZAACZAACRwLAjMzM3274XM9+yJaMQZrKtk5MjIC881Xdt08a73aTDstD2svfraP1lVq7OWQZkyzrLFdOtcY1X4lyKA5mWMfxMa0H6ZsxjbLGsOlk7YgvfqtFHk05mHGNMvKxKU7mkxd/bl0Oj7XWHrZ92ozYw5atuOZdbM8zDjVT6VrLL3a1N5l49KpvS2HsbV9h60P2pfaiQw6Bv03Kchf9dqX1vvLErIjFwMPLSAT7289rEW/8bjaXTqzX2kPOkyOQTZL1x9dZksfnx/B5mjWl4uhGXO5xh0UZyl9LcU3aDzD6pcyhqX4Bo3zaMQ0+1pK/KX4mmPQ8rDxxL7fsdS1xhyTWdZ+XTppC9Kr3yDSjmHWpRx0DDNnM6bE61cP6tPUawyVZtuxLEv//Q6blTlms6xxXDppC9Kr32KlK65LZ8a32+16L1uzrVe5V0zbz7SVsnnY/KXNtHfVVadxJIYdV9tEah92XI2j7aY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b2R55Loti4YOsmsdx0teLwNOnf7050B8uTZA3I5IWvC8gEbTsHnUklyPw4C87l8OjbBEQAREQAREQAREQAREQAREQAREQAREQgftMoOzX0u/z2TT7TQIP/g8U3TyyLCIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAg+RgD7Z+RCfqs4kAiIgAiIgAiIgAiIgAiIgAiIgAiIgAssS+L//fdkKyheBN0zgP5k+2fmGkaudCIiACIiACIiACIiACIiACIiACIiACIiACIjA7RDQJztvh6uqioAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIrIDA03/9f6VVPvuHvyuNUcDbQUCXnW/Hc9YpRUAEREAEREAEREAEREAEREAEREAERODeEvjss++Y2U/N7Hc3pP+ldb8QLbrwfPQf/qu9/j//fO38Kdu1ANrME0tpUu+AgC477wC6WoqACIiACIiACIiACIiACIiACIiACIiACMxLwC86fUVp9tnff8ee/utfSy88LwtcXXz6JSaveCHKPun3g4C+s/N+PCdNKQIiIAIiIAIiIAIiIAIiIAIiIAIiIAJvOQH/ZKevKM2e/uGvU0/qV97xqUxcZLpM2eC/6DH7J2LjxegsQto6EfjWOg2jWURABERABERABERABERABERABERABERABEQgTeB35r+ybvb00v3U/NfbL37F/cJ04b+eHS83cWkJ6dGupy472c51rnfQbp0IfGudhtEsIiACIiACIiACIiACIiACIiACIiACIiACIpAm8FP77LOb39mZjr1u5YvK3KXm9Yz0BSjXifHarwcBXXaux3PQFCIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAoUEbn6yE+H86U7YosRFZcrONv80p6/UpSjsZTFcT/qbJaDLzjfLW91EQAREQAREQAREQAREQAREQAREQAREQAQWIrD4Jzv9chKXl5A+Ai4teZzoT+3ZxrnS756ALjvv/hloAhEQAREQAREQAREQAREQAREQAREQAREQgVICy32yE+VTF5zwSd5/ArrsvP/PUCcQAREQAREQAREQAREQAREQAREQAREQgbeAQMknO/9cDQF/KlMXn9WY3acoXXbep6elWUVABERABERABERABERABERABERABETgrSVQ8MnOv/+O2Q/M7A/lcKpecHocX4yWV1bEOhDQZec6PAXNIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiUEIg88lO/0SnX3RW+GSnLi9LED8Aty47H8BD1BFEQAREQAREQAREQAREQAREQAREQARE4OET+N3lEX93cbH5A8hqF50pPrlPeepTnSla98Omy86S5/To0SN7/fp1SZSZx+VWWX5Rj+iL+1zPeey3URP9Y+24R5ykCIiACIiACIiACIiACIiACIiACIiACOQIPH3615su/Mo65M2IK0vuE52rsl81knLnBB78ZadfrlVdqUtJt1W9oEvlx/5xj9lSdq+X6p+K9TpX/c+ObWd72z5//r/t/R//wg4PD6zTQKf5ZWm/UDLGx30I11YEREAEREAEREAEREAEREAEREAEREAEsgQ++4e/y/rkEIFI4N9Fw0Pc49KwSOLcfjEXX+6LtkUv8HgGr4sLSpaIwUzweU/4okSs2cSO939iZ73hNPa4e2o/2T+2ySzgxlnclTofzoj+6OnxrscctEBczMOe85AjKQIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIALLEnjwn+zEpRxA4cINe5d++cZ21jmOdVwEltnYz3rs6T7MmuqP+FTf6/Hndj4xq9fr03Yuv7tRsxo153jUJXdlleeNc/EeOvpCwl65oQJFQAREQAREQAREQAREQAREQAREQATeHIF//1/eXC91EoFVEPhfY7sXn+wcDAb2/e9/3773ve+Z6/Muv1zDC7l+0YaX23Dxhos4xOVkjEP9lOQa6BnzEeN2xLgNOsdzD+TNZN26+7+3852Obe3u2M6gZcd77WuXnYj12qiLPiwRBwkf9kWSZ4Qe+6F3UR35REAEREAEREAEREAEREAEREAEREAEREAERKAqgXtx2bmzs2Oj0cjOzs7sn/7pn6qerTAOF3C4cINEEi72UhIxLlP+nM3j0ZdjYh3EIN7lPOvs9Nhsa9vak5GdNTetWTMb97vW7Y+zZdATHCA5ATFsy+l8Puhck/VcDdlFQAREQAREQAREQAREQAREQAREQAREQAREYB4C9+7X2Oe9JPOLtri8htuLaqV8qRyOS/ljb95zLuypeeGDLIyZDGxvt2k7o55tWsvq21u2dXRouzaxen32y+y5GkVnyOVgLpaps8Ff1AMxkiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIwL4F78cnOg4MD++CDD+z999+3vb29uc6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96nPmq1uzs21H8J2fWn+nYw3/tGujYzvHs6tTcID0MaFD8uh8rty5Ec9+t3Fuao+8qjJXD/lFfswW52A76qxKxnm8LhhD5mzRHvfIh3S/L/SMuu9j7DSB7OyHDhnzYQc/9IVEbUkREAEREAEREAEREAEREAEREAEREIH1IKDLzhU8h48++mh60emXna4vsvzyxC9WfOEihSXXxAUMy5iPWshDLexzEnlcD308BzricnWK7RMbnQztR087tjkNnNjpuGX7J+Np/ZM9s73OgZ247+zItj8+t+2pb2wn+207H0/M7NyGu207qO/ZyH9tfLhl461tO5rdd17j6KXAwGVqxbPFPXJwdpaI9Rjo8CMPEmzL5kA86iEPdVmyHvN8jxrwzSt5Vtex55kwA2ojjmNhQwxL1HIb4lhyLM7DMubHeTh/Xh21uN+8NRQvAiIgAiIgAiIgAiIgAiIgAiIgAiJw+wR02bkkY7/gfPfdd+2LL76Yvlxf5BOePEa8UMFFC2L4Agg6x7COnHmk15x3ffXkvWsXVO89+epGiVnMO/b9f5xYc+PcLj6/WbfOds82Ny5SGu2utb4+sTP/ws/JxPzzn+OzyTR2Y7Nn25262WRo/c+7trfdsmlao2c7W89tcDL77tAUR9huDLekYRFmRS29Hp4javseelEufB6LeNbhryo9F7N4DjNke6yHOMTEfYznfYxFDcTgPCw5hvVUDmyQXkdLBERABERABERABERABERABERABETg/hPQZecaPMPcRYvbU5c2bosvHCNXC/GIy8lcz1w87Px9nN7r5bPHcF3JazGv+tYZdq13+VHM89OB7W+1re2/yv7eE7u6Kt3ctv6zhg16Tfv2o7o1ewd2Mv1gp1+C/tZ+8s7sDzZ9+MuLVn6G+HJPtPl+mYV8l35mXujFtqp6rOe10ausBsfxM2cdNarOGM+G/JxEXZYey3voqOH71HJ7qj/OwxL5uVqIRZykCIiACIiACIiACIiACIiACIiACIjAwyOgy84ln+knn3xi33zzjX366afTl+tuq7riZY7v8fIa0F3GPfvgr9o3F5e6WEIf7p/Lr2yvNazdbdnz8dhscmw77T0b945sMBrb65fPbHZVWptecB6fju31q5Ed1I/sw0P/Bfea1ewX9uLV9YvfQa+evAjGuXDhBcnz4pxgGfeIhR81YWeZ83kufC5RK5UbYzmGdY9DHdR2P9tZ59zb0H0GfnkPzMV22Hw26Dw3zoTZU3v2wT/vmTyP+8+br3gREAEREAEREAEREAEREAEREAEREIH1IaDLzhU8ixcvXkwvOP2S0/V5Vrxk8T1eXgc64sr2ud64FMr5i+zoyfMUxVfyTUY26H9ljxsNs/Nzm3zdsFazYRs1s/HoZPZX2kdHtj88u/h191rNajWz71rNrN62rZ/1bXfv+OqPHI1PDu1gMPs1dp+j6CIrXo7hnDnWOBf82KNP0Z59ZTo/K9ZzeZg75YcvNXPKlqqRs3k+M2QdOW7L9UF89PseL68DHXFle/Quk16H58M8nOc2vNCf/dJFQAREQAREQAREQAREQAREQAREQATWi4AuO1f0PPyic55PdC7TNl7KYO8SFzjL1L+t3Nl3dj6yemvXTnt/saNe3azesd3f1GyvdfFX1fdHdvE9nD5IvWF21LPm9NJp0/bPd22443/WaMM6B0PbOT+wdt0vpJrWPZxYE1/8eXnRyWdhNmAFf9lF1rz+VHzs6b15pjiL+2IdxEc7cl2m+rAfetU4xKck5kn5vD4vjl22d6yNPepiz/1dZ3su1u3w+cxFrGN97UVABERABERABERABERABERABERABO6WwKNfHb98/fMf1+92CnW/ulxhFLhwydnY77ovXCgte0HDtdE/ZYNvnWSKBc/Oem7ushj2u55beA4cn4pN+VEXNTwPcZBcCzaW7Heda0Vf2R51U3Hu8+X1ow4beufqpOxlNva7zjOgn9s4LrdHrkteMRe+nB1+SREQAREQAREQAREQAREQARG4DwR+/XxsH//wnRuj/v5PfzPdF93AIsOaE/D387fWfMa3djxc3EQAuMBJ+eFzuaqLmNiH9+gXZ7zrfZwrsgAfnzPGVpmdGSA+VQdxsT9yWGImSPehJvIh4eO9677YhripI3yqEbZVydTcqJ2aCfPijIhliRi2uY6clB8+zMMSdeI8qJmql4pFHHqhrqQIiIAIiIAIiIAIiIAIiIAIiIAIiMDdE9Bl590/g+kE8eIk7uOY0V+2j/lle9SDLItfV39u/pwd5yjyR1/cxxo5P+IgEQdZ1e5xMSdlS8WgRxVZlp/yp2yp2VK2XC5mjf7cPmdHHcgYl5opZ0MNSREQAREQAREQAREQAREQAREQAREQgbsloO/svFv+6i4CIiACIiACIiACIiACIiACIiACIiACIiACIrAiArrsXBFIlREBERABERABERABERABERABERABERABERABEbhbArrsvFv+S3XHdweiSNzDvqjkeqwvWu8u88rmL/K7L+XP2YvOGevEPecW+ThuGZ17QIcsqlslpig/54t14z6X53bEQhbFcnxZnPwiIAIiIAIiIAIiIAIiIAIiIAIiIAL3h4AuO+/4WfnFTOqVG4tjPSbuc3nz2r0uf4eh6267ucbW7z6ybn98zTXud+1Rt28X1osYnrXR2bH+6fm1nHXa8Kx+dmaBOWFPc0HUhYwxcX89+uaO52H9ZuTylvyzrlab52M9lx1j4j6Xl7MvO3+uruwiIAIiIAIiIAIiIAIiIAIiIAIiIALrT0CXnXf8jHCJhoszHweXNalLH8TFPOxTOfMe0WugHuembOwv0x8/ezmt63WGvTN7st23s7KkO/L7jFXP63HOrGjFWnFflAuf5/AL9kVl7jl7vTgfv69w1pSNczErbEXxMZb3nIezsg26+6LONvhcaomACIiACIiACIiACIiACIiACIiACDxMArrsXNFz/fLLL81fq1q4bILkuri0cRvrvudLIs6pqns99MSlEHpEWbVmKq7RbJn9cXz5yc9zOxvsWKdZn56n3uzZ4Wj2qc+Zr27NzrYdwXd+av2djjX807GNju0cz65OU7OmbD6b26NELOy8nwbP8Q/kch/oqfqIhw+tYIeEfdUS9V1i4X0F6XbokIjNSY9DXoxBT7ezjnjkch76QnJsysZ+nA29ILm+dBEQAREQAREQAREQAREQAREQAREQgftHQJedK3hmH3300fSi0y87XV9kzXPZgosclp7ve1+sY5aq9VM10MdrQUcc6s8nJzY6GdqPnnZsc5o4sdNxy/ZPxtP6J3tme50DO3Hf2ZFtf3xu21Pf2E7223Y+npjZuQ1323ZQ37ORf+JxuGXjrW07mt133pg1NzvOwhKxPgJ0+ONZwdtlaiEfPuyRh7osWY95vkcN+OaVPKvr2PNMmAG1EcexsCGGZZGP41zHeVh6PmZgPeYuskdd7rdIHeWIgAiIgAiIgAiIgAiIgAiIgAiIgAisFwFddi75PPyC891337Uvvvhi+nJ9kU944tKlyji4RGKJyxvPZ71KvRjjdeddXz157+oTeZ7/3pOvbpSYxbxj3//HiTU3zu3i85t162z3bHPjIqXR7lrr6xM78y/8nEzMP/85PptMYzc2e7bdqZtNhtb/vGt72y2bpjV6trP13AYn17879MYQFQ2LMCgq7fXwXFDb99CLcuHzWMSzDn9V6bmYxXNcxx4yVQtxiIn7mAN/tKf2OA9L9PF41pHPsbBBuk9LBERABERABERABERABERABERABETg7SOgy841eea4uKkyDi6RWCIvd8mDWMTlpOenLpZy8bDz93F6/stnj+G6ktdiXvWtM+xa7/KjmOenA9vfalvbf5X9vSd2dVW6uW39Zw0b9Jr27Ud1a/YO7GT6wU6/BP2t/eSd2R94+vCXV60WUsAuxcBt8M9bPNZzPlVrcRw/Q9Yxj8dyPOxReu48C3VZej7voXPdlI39rOM8LOH3OqmF2JRPNhEQAREQAREQAREQAREQAREQAREQgbeTgC47l3zun3zyiX3zzTf26aefTl+uu23eVfXiBhdIKTlvz1S8zxEXermd9Rg3177WsHa3Zc/HY7PJse2092zcO7LBaGyvXz6z2VVpbXrBeXw6ttevRnZQP7IPD/0X3GtWs1/Yi1fX/2jPoFe/GgOzuvQV9wiEP3V2xOR8ngufS9RCnkv4YyzHsO5xqINc97Oddc69Dd1n4Jf3wFxshw0zwId9TuIsKZnLKbJ7nThLUbx8IiACIiACIiACIiACIiACIiACIiACD4eALjtX8CxfvHgxveD0S07Xl11+WePLL2zixQ0ukHCZE/e53rhIyvmL7OiBmdC7KKfUNxnZoP+VPW40zM7PbfJ1w1rNhm3UzMajk9lfaR8d2f7w7OLX3Ws1q9XMvms1s3rbtn7Wt92946s/cjQ+ObSDwezX2DE35o17zAg/9i7xDGCLe9irSGbPei4Xc6b88KVmTtlSNXI2z+dzso4ct+X6pOI5z3X04Bqu44UY3qNGmfQcni81j9vw8ngtERABERABERABERABERABERABERCBh0VAl50rep5+0bnIJzpxIYMLGB+n7BIGORgde5e48IFvneTsOzsfWb21a6e9v9iRfxKz3rHd39Rsr3XxV9X3R3bxPZw+fL1hdtSz5vSSatP2z3dtuON/1mjDOgdD2zk/sHbdL7Ca1j2cWPPyiz/LGM7rT8WDNzNO8UeuS+jIQXy0w+8y1Yf90KvGIT4lMU/K5/V5cSz3RpxL6EXn85qIQ33sXXIf+CERhxqpWI9BHfeXzYLakiIgAiIgAiIgAiIgAiIgAiIgAiIgAvePwKNfHb98/fMfz3719/4d4WFNjEsZPxV0SLaldLfhsmfZCx3u6XV9pWyXrrUXZbOz3/XcAleOT8Wm/KiLGp6HOEiuBRtL9rvOtaKvbI+6qTj3+fL6UYcNvYvqeA32Q4fM+WHnGdAPvrI9cl3y4t5V7BwjXQREQAREQAREQAREQAREQAQeGoFfPx/bxz9858axfv+nv5nui25gkWHNCfj7+VtrPuNbOx5fyPDlEi543B8XfBwfY+bdxz68R795a65bPJ8Js6XOhjiXKT9yXfIzQB5ykA8Z432PHI5BnEtfiLncrlRgfi+KudEgNRNmibHIccl5qO8SOajBOfBxPNeJdZGLeOwhYy7yXaIXYiVFQAREQAREQAREQAREQAREQAREQATuHwFddq7ZM8OFCyTGW3aPOlUl+kFWzVvXuKJzRF/c40ywQ8Kek4iDRBz2kNHu++hL2VIxqFVFluWn/ClbajbujxxI+Bbdl+Xl6ufmjPWQLykCIiACIiACIiACIiACIiACIiACInD/COg7O+/fM9PEIiACIiACIiACIiACIiACIiACIiACIiACIiACCQK67ExAkUkEREAEREAEREAEREAEREAEREAEREAEREAEROD+EdBl5/17ZppYBERABERABERABERABERABERABERABERABEQgQUCXnQkoMomACIiACIiACIiACIiACIiACIiACIiACIiACNw/ArrsvH/PTBOLgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAgkCOiyMwFFJhEQAREQAREQAREQAREQAREQAREQAREQAREQgftHQJed9++ZaWIREAEREAEREAEREAEREAEREAEREAEREAEREIEEAV12JqDIJAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIicP8I6LLz/j0zTSwCIiACIiACIiACIiACIiACIiACIiACIiACIpAgoMvOBBSZREAEREAEREAEREAEREAEREAEREAEREAEREAE7h8BXXbev2emiUVABERABERABERABERABERABERABERABERABBIE/j+DlqzvauyHEQAAAABJRU5ErkJggg==" width="1339" />

 

冠字号查询系统,主要包括两方面功能:

1. 把原始数据通过MR流程从HDFS导入到HBase,提供通用接口;

2. 提供冠字号查询功能、提供存款、取款功能;

2.2 数据加载功能

\

数据加载功能是一个通用的HBase表数据导入功能;

用户只需提供原始数据路径(HDFS)、HBase表名(该表需要先存在)、列描述(参考前篇博客此参数解释)、字段分隔符、时间格式即可;

 

2.2.1 后台实现

public void submitJob() {
		Map jsonMap = new HashMap();
		if (HadoopUtils.getMrLock().equals(MRLock.NOTLOCKED)) {// 没有锁,则可以提交代码
			// 先加锁
			HadoopUtils.setMrLock(MRLock.LOCKED);
			// 清空MR任务缓存
			HadoopUtils.initMRCache();

			// 提交任务
			new Thread(new Hdfs2HBaseRunnable(hdfsFile, tableName,
					colDescription, splitter, dateFormat)).start();

			jsonMap.put("flag", "true");
			jsonMap.put("jobId", HadoopUtils.getJobId());
		} else {
			jsonMap.put("flag", "false");
			jsonMap.put("msg", "已经在运行MR程序,请确认!");
		}
		Utils.write2PrintWriter(JSON.toJSONString(jsonMap));
		return;
	}
这里提供一个MRLock,加此锁是防止在提交任务后,任务正在运行,而有其他程序重复提交任务(监控会有问题);

同时,这里使用多线程,提交任务后,立即返回前台,前台接收返回的信息后,根据判断,是否弹窗监控任务进度:

ret = callByAJax("hadoop/hadoop_submitJob.action", 
			{hdfsFile:hdfs,tableName:table,colDescription:colDescription,splitter:splitter,dateFormat:dateFormat})
	if(ret.flag=="false"){// 提交任务失败
		$.messager.alert('提示',ret.msg,'warn');
		return ;
	}
	 $.messager.progress({
	     title:'提示',
	     msg:'导入数据中...',
	     interval:0    //disable auto update progress value
	 });
	// hadoop_submitJob.action 返回的ret中包含jobId , ret.jobId
	if(typeof(EventSource)!=="undefined")
	  {
		console.info("jobId:"+ret.jobId);
	  var source=new EventSource("hadoop/hadoop_getMRProgress.action"+"?jobId="+ ret.jobId );
	  source.onmessage=function(event)
	    {
		  console.info(event.data);
		  
		  // TODO 判断event.data indexOf error ,解析:后面的值,显示,同时提示任务错误
		  if(event.data.indexOf( "error")> -1){
			  source.close();
			  $.messager.progress('close');
			  $.messager.alert('提示',"任务运行失败!",'warn');
		  }
		  // TODO 判断 event.data 为success ,则提示任务成功, 其他清空则任务进度即可
		  if(event.data == "success"){
			  source.close();
			  $.messager.progress('close');
			  $.messager.alert('提示',"任务运行成功!",'warn');
		  }
		  var bar = $.messager.progress('bar');
		  bar.progressbar('setValue',  event.data);
		  
	    };

注意这里的JobId的获取:

1) 在提交任务的时候把job变量设置到外部静态类中;

 

\

 

2)在Thread线程提交任务后,去获取jobId

 

\

 

需要注意的是,jobId只有在任务运行中才会被初始化,所以在提交任务后(thread运行中才初始化jobid);

需要注意的是,jobId只有在任务运行中才会被初始化,所以在提交任务后(thread运行中才初始化jobid);

3)while循环获取jobid:

public static String getJobId() {
		long start = System.currentTimeMillis();
		while (noJobId()) {
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			log.info(" Getting job id ...");
		}
		long end = System.currentTimeMillis();

		log.info("获取jobId,耗时:" + (end - start) * 1.0 / 1000 + "s");
		return currJob.getJobID().toString();
	}

private static boolean noJobId() {
		if (currJob == null || currJob.getJobID() == null)
			return true;

		return false;
	}

同时,这里使用了HTML5的服务器发送事件,关于此技术请参考:http://www.w3school.com.cn/html5/html_5_serversentevents.asp ;

 

2.2.2 实例

提交任务后,实时反映任务运行进度:

 

\

 

后台日志:

 

\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" width="840" />

 

运行成功:

 

\

 

2.3. 查询冠字号

 

\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" width="590" />

 

这里查询冠字号包含两个部分:

1)随机生成:是指随机生成冠字号(根据个数可以生成不同个数冠字号,逗号分隔);

 

\

 

2) 查询,根据冠字号进行查询,如果hbase表中该记录的exist字段为1则说明存在,否则说明查询改冠字号为取出状态,则对应为疑似伪钞冠字号;

 

\

 

3) 详细查询:查询冠字号的所有信息,可以查询多个版本信息:

 

\

 

 

2.3.1后台实现

/**
	 * 检查给定的冠字号是否存在疑似伪钞冠字号
	 * 
	 * @param stumbers
	 * @return
	 * @throws IllegalArgumentException
	 * @throws IOException
	 */
	public Map checkStumbersExist(String stumbers)
			throws IllegalArgumentException, IOException {
		String[] stumbersArr = StringUtils.split(stumbers, Utils.COMMA);
		Connection connection = HadoopUtils.getHBaseConnection();
		Table table = connection.getTable(TableName
				.valueOf(Utils.IDENTIFY_RMB_RECORDS));
		Map map = new HashMap<>();
		Get get = null;
		try {
			List gets = new ArrayList<>();
			for (String stumber : stumbersArr) {
				get = new Get(stumber.trim().getBytes());
				gets.add(get);
			}
			Result[] results = table.get(gets);
			String exist;
			StringBuffer existStr = new StringBuffer();
			StringBuffer notExistStr = new StringBuffer();
			for (int i = 0; i < results.length; i++) {
				exist = new String(results[i].getValue(Utils.FAMILY,
						Utils.COL_EXIST));
				if ("1".equals(exist)) {
					existStr.append(stumbersArr[i]).append(Utils.COMMA);
				} else if ("0".equals(exist)) {
					notExistStr.append(stumbersArr[i]).append(Utils.COMMA);
				} else {
					log.info("冠字号:" + stumbersArr[i] + "值 exist字段值异常!");
				}
			}
			if (existStr.length() > 0) {
				map.put("exist", existStr.substring(0, existStr.length() - 1));
			} else {
				map.put("exist", "nodata");
			}
			if (notExistStr.length() > 0) {
				map.put("notExist",
						notExistStr.substring(0, notExistStr.length() - 1));
			} else {
				map.put("notExist", "nodata");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}

直接使用HBase的Table Java API实现即可;

 

 

获取给定rowkey以及版本数的记录,同样使用HBase 的Table Java API 即可实现

/**
 * 根据rowkey和版本个数查询数据
 * @param tableName
 * @param cfs
 * @param rowkeys
 * @param versions
 * @return
 * @throws IOException
 */
	public List getTableCertainRowKeyData(String tableName,
			String cfs, String rowkeys, int versions) throws IOException {
		String[] stumbersArr = StringUtils.split(rowkeys, Utils.COMMA);
		Connection connection = HadoopUtils.getHBaseConnection();
		Table table = connection.getTable(TableName
				.valueOf(tableName));
		List list = new ArrayList<>();
		Get get = null;
		try {
			List gets = new ArrayList<>();
			for (String stumber : stumbersArr) {
				get = new Get(stumber.trim().getBytes());
				get.setMaxVersions(versions);
				gets.add(get);
			}
			Result[] results = table.get(gets);
			Cell[] cells;
			for (int i = 0; i < results.length; i++) {
				cells = results[i].rawCells();

				list.addAll(getHBaseTableDataListFromCells(cells));

			}

			return list;

		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

 

 

2.6 验证每秒500+查询

使用单个线程进行查询:

package stumer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class ReadTest {
	
//	private static String FAMILY ="info"; 
	
	
	public static void main(String[] args) throws IOException {
		long size =10000;
		get(Utils.getConn(),Utils.generateRowKey(size));
	}
	
	public static void get(Connection connection,List rowkeys) throws IOException {
		System.out.println(new Date()+":开始读取记录...");
		long start =System.currentTimeMillis();
		Table table = connection.getTable(TableName.valueOf(Utils.TABLE));
		Get get = null ;
		long count =0;
		try{
			for(byte[] rowkey :rowkeys){
				count ++;
	//			get = new Get(Bytes.toBytes(""));
				get = new Get(rowkey);
				table.get(get);
				if(count%1000==0){
					System.out.println("count:"+count);
				}
			}
		long end = System.currentTimeMillis();
		System.out.println(new Date()+":"+rowkeys.size()+"条记录,读取耗时:"+(end-start)*1.0/1000+"s");
		}catch(Exception e){
			
		}finally{
			table.close();
		}
		
	}
	
	
}

使用多线程查询:

package stumer;

import java.util.Date;
import java.util.List;

import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Table;

public class ReadThread implements Runnable {

	private List rks;
	private Table table;
	public  ReadThread(Table table ,List rks) {
		this.table = table;
		this.rks = rks;
	}
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+" "+new Date()+":开始读取记录...");
		long start =System.currentTimeMillis();
		Get get = null ;
		long count =0;
		try{
			for(byte[] rowkey :rks){
				count ++;
	//			get = new Get(Bytes.toBytes(""));
				get = new Get(rowkey);
				table.get(get);
				if(count%1000==0){
					System.out.println(Thread.currentThread().getName()+" count:"+count);
				}
			}
		long end = System.currentTimeMillis();
		System.out.println(Thread.currentThread().getName()+" "+new Date()
				+":"+rks.size()+"条记录,读取耗时:"+(end-start)*1.0/1000+"s");
		}catch(Exception e){
			
		}
		
	}

}

多线程查询主程序:

package stumer;

import java.io.IOException;

public class ReadThreadTest {

	public static void main(String[] args) throws IOException {
		long dataSize =500;
		int threadSize = 20;
		for(int i=0;i
工程类Utils程序

package stumer;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class Utils {
	public static String TABLE = "records";
	private static DecimalFormat df = new DecimalFormat( "0000" );
	public static String[]  crownSizePrefixes =null;
	static Random random = new Random();

	static {
		crownSizePrefixes = new String[26*2];
		for (int i = 0; i < crownSizePrefixes.length/2; i++) {
			crownSizePrefixes[i] = "AAA" + (char) (65 + i);
			crownSizePrefixes[i+26] = "AAB" + (char) (65 + i);		
		}
	}
	/**
	 * 把0~9999 转为 0000~9999
	 * @param num
	 * @return
	 */
	public static String formatCrownSizeSuffix(int num){
		return df.format(num);
	}
	public static Table getTable() throws IOException{
		return getConn().getTable(TableName.valueOf(TABLE));
	}
	public static String getRandomCrownSize(){
		return crownSizePrefixes[random.nextInt(crownSizePrefixes.length)]
				+formatCrownSizeSuffix(random.nextInt(10000));
	}
	public static Connection getConn() throws IOException {
		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.master", "node2:16000");// 指定HMaster
		conf.set("hbase.rootdir", "hdfs://node1:8020/hbase");// 指定HBase在HDFS上存储路径
		conf.set("hbase.zookeeper.quorum", "node2,node3,node4");// 指定使用的Zookeeper集群
		conf.set("hbase.zookeeper.property.clientPort", "2181");// 指定使用Zookeeper集群的端口

		Connection connection = ConnectionFactory.createConnection(conf);// 获取连
		return connection;
	}
	
	public static List generateRowKey(long size){
		System.out.println(new Date()+"开始生成"+size +"条记录...");
		long start =System.currentTimeMillis();
		List  rowkeys = new ArrayList<>();
		
		for(int i=0;i

2.4 存款:

 

\

 

1)存款需要输入用户ID、银行、冠字号,当然也可以随机生成;

 

\

 

2)存取使用的是Table的checkAndPut 函数,关于此函数存储数据的一致性,参考:http://blog.csdn.net/fansy1990/article/details/51451583

 

\seo4MWvBbB35F/ib69cwXuZnSh94c9w8DywYvN2PHzq+3hOdrLf/REOfvdePPjpW0zTYUwX71mYiYzSbj5oZh8yvKg45Z+0GTP5V65cUf3JcMKPDKc/S3d5Fvahl2cMJ/3Js+q5mj4h1xiv9CfcRCNW3vPcyJk8yENvd4OSH6zKK1k+iHJB2L88i+f68kD6k8+lP3EWh56HCKcvT/T34rk4ZHh9OKMc3jdyJY/u8zCzD5lH9bxlfpVn4SYO5l/WC0s5H5jZRyfpVY3G5D/bHWSXy6Uan9NnOWJgjFek6Uj4w7jhhhtw/X8XwLPrn8ahh9ZB9Vd6ET946vfw4PZ1WC30vmU7/nTnyzj44itwrV6Luza/iFNvuqC88iKO3vsv8TCexfGfuzB3/hUc/7078BFFUeWIOC6+vBdf2HEQd/3Jfbil+lx590U8++R9+Orn79LJ/zGeO1GCy7Ue2x4C9h45rfK6+B+P4OiXd+IPVi8OPyM33i+t99DMPoRdyMpTnMWhrzxFPhCHOIsKWPgXh2pPutljfSNVyKnnn4348pUr+OEfumvlgmyEynilfHk2xi/libOIV7jr4xf39fiW1ntjuvg+l2P+Niuv9OWOuDbjYnwu7+VZb0/imbiXZ9nBkOWc/l6Ub3p/ejlmetCddtvLfGFmH6J+FIeMV1zLelKe9e7SH89sPyy18srMPjrJ56phmfxnu4N87do1VYzTZzliYIxXTPhuS/4nXL58Ga9N3YKjP3oFFwFo/q5iDuswMiLvgX+y7tM4Xang2rV/gjvumcUbF/4rzp86is2f/DQ2bweOvvRfMXv+ND7/P38M4pexZHxvlNbhq6nP4viuL+DZ89XnVy+ihKdw/2/cUOtc/P53Ncoi3JptD+KOx/8Kxyvn8dffP4WHt2/GdYvET6aD58XJv73mbmYfotIUdiHOMn5jGSCfi7OsgMVZhBNn6W5sVMrnxrPwJ8LJxqfRXd5LPeS9PIvnUm99/NKd56WZf/lel9d7NSuvhO3LckdfPpiVXzK/SH+y3GhVTonyRBziLOIRh4xPyuN5eeXDfn3fzexDzbS6dqnMv/JsdO/X9FEv2pnIqwvNB83sY6HypN0Yz7Y7yIs1EuH1emsjZ40jBfURtVs+m8C38Qi+8kyxOuO0AkM4hdlSfQTpndN/g3UrVqjuH7lrO46c/hu8+OxmbN7owoc++WnM/vhv8OIJBRvWrtbFB2y47/dw611fRvLbwFfCj+Plq2IEVcj/Iv7Df9E6E7KQmv7Mh7T4V92DnTt/gINf34sn8RA+va6ux2JxZLxLc+TbzD5EfhTvW5xvvPFGNT+LAkDYjzwLd3HIfCGuRYNU+hdnEV4cMn832l8jT9H4FO7iLOTo5Rvj0csR8Qj/8pD3+rPev9SX50b+5EEeg2AnZuVVs/LBrPyS+VyEEekVhyyf5FnKk2fpT5Zv4rksX4Q8eS/CS/k8054Ww57M7EPmX6mPzK8yP8v6U7rzzPb2Ui2/mtnHQtOrFv4m/9nuIOuNVMhz6r5QKKjqz49PS5X2fA0+k5jCyCN/jMdfmgNGfhef/fxxfPcHJ7Rdrc8/i70H78JnN9+h6j1062Zs3vt1TK67S/tmec1mfOaNvXjy9L1Yd0u9E6FP5y2fmcL0tiMI7X4G51X5z+Jffeuo9u0yKii99H3sPSI3LBrC737myzj15JO448FPY42DvOZzMk8P/S0NLs3to954FI1B0fjTH8b3L9ykH+FfHPqzrIzr4V7Cd2+8ETuqP4NWf66ocoR/IU//XB+/lCfjFGezPxnGKIf3SyP/8j0ur/doVV4Z7V3ey7PML/JenuXzZmfhT5Yv+mvpv1050j/PyyvfOvW+m9mHMX/KvCzPRnen9GU8tAOR95zKB83sY6HxS7sxnm13kJ2EoE/s2rVrm8KHbkYMw/ciPv1pHIl+CyfmVuHexw7hfz0VwZ033ojfuv8I7pr+9/jiumpm/tDHcM+tP8en7/mkupxaUW7B5s+uwulPfhK36l92lZqmzxDu+tJf4jE8gvDjZ7H5sefxLypPYutv3Ygbb7wTD/zlRXzkYzepIVT/t6zBunVxfHHbcFP99elcLL6M1znj7sX7bmUfIj7Ryb106VItX4oKVeqhPtTn96o9Cf/CnwxnvJfhNWuaz092yKU/KUfei7NefjM99P6ZT+dzJh82TgbNLszKK5EGUWbIATl9vtaXV/rn+nTLsPIs3PSHDKd3118LvyIe8Uwc0j/PtC+n84OZfRjzodBJ5l95dlpPxsdywpgvnbhvxz7s6iHysvFwKVKK0aXJvahAFuM4e/Ysbr1VdFsH6zj/g/8FX8Ie/PvPivljHiTQGwKt7OOmm26qdXLNYte7y2t5Fv7ltTybyTA+s/Jr5i6etTpkB7uVH7qRAAn0PwGz8kpfJuiv9akxPjfe6/3Ka70fq2vhLg6WNZIez4tBwMw+hB7N8q/UUe8un/FMAkuNQDP7WGg65aCoMfzAdJCNig/G/Sk8+TtP4pa/mcK24cHQmFouLQKtKkzZGBQpFg1C6Vc+1z+TVPRu8pnxLOUYn4t7GV5cGxuhVuGM/s3k8xkJkMDSI9Cs3LAqMyQJWXbo5Ug3cZbu4rqVTH0YXpOA0wRk3myWj6U++vwsn/FMAiRgTqBrHeTFMrw333wTH/nIR8xTx6cksMwJ0D6WeQZg8klggAiwvBqgl0VVHSdA+3AcOSMcIALdto9mA062Z5AXq4M8QO+OqpIACZAACZAACZAACZAACZAACfQxgWYdZNubdMlPlp0+ixEDcTgdL+PjBh2DkO9oH8yng5BPWZ4yn4p8yvKK+YDlVfP2LO2D9kH7cM4+BGuzw/YM8sWLF83k8BkJkAAJkAAJkAAJkAAJkAAJkAAJDASBVatWmeo5MDPIb731lpoAzkBwZE1kBOaDxnxA+2jkwfxBHiwn+recZHlF+6R9NrdP2gftg/bhnH0I1mbHgmaQRePT5XKpnRSeyYH5gfbAcoDlAMsBlgMsB1gOsBxgOcBygOXAIJUDw8PmPzP0AbNec6tn//AP/9DKmW4kQAIkQAIkQAIkQAIkQAIkQAIk0NcEmnWQbc8gX716dVFmj0+fPo0777yzryFTORJYLAJ/93d/R/tYLPiMlwRIwBYBlle2cNHzMiNA+1hmL5zJtUXAKfuw3UF+//33F21p9XXXXWcLIj2TAAmQAAmQAAmQAAmQAAmQAAmQQLsEBmaTLjGDzIMESMCcgBhR40ECJEACg0CA5dUgvCXquFgEaB+LRZ7xDgIBp+zD9gyyWGK9WB9fr1ixYhDeHXUkARIgARIgARIgARIgARIgARIYQAIDM4P86quvDiBeqkwCzhBwakTNmdQwFhIggaVMgOXVUn67TFunBGgfnRJk+KVMwCn7sD2DXKlUFo370NDQosXNiEmABEiABEiABEiABEiABEiABJY2gQXNIIsl1k7/vfbaa0v7TTB1JNABAdMRtVIKQVcQqVKbgosZRAMedZf6YNuBpOwc4i4X4jl5361zr+R2Sz/KIQESsEvAtLyyK6SX/otJBAJJFLsZRy9kdlM/yuobAn1vH31DioosRwJO2YftDvLCXkYZJ743hpXfObGw4ABuv/32FmFLSAVdcLljyJpOcC/UvRrO5VI7DS6XB75wArlyXZVSKlh1k35ccOl7CeU8pkJeuF0uuL0BRDNmVW4ZuUSgMZwaRQX5VBRhn9ZpUcOnzcLX9eHV8iTQ+U+glZGJb0UxlFUHv9Ih9/IEyVSTAAn0nIB5edVGfVcpIBUNwCPqZE8A0VQBDVV+p+7VlBezKSDkh0fcW8lUwzSrw+soeyGzJt1KRyv3miDdhVUYK3edqNqlVRgr95qg6oWV/07djfE5dG9uH8b2qAueQBSpgrQAzb1xcLuCXNyPUKrebiwX0oiHfZoNudzwBiKYypZQgVl4QG3jBlPQj7NbyXC5fEjkdbBycbhqMqzSAeTi9fa0vjmtk8jLZUzA3D66D8R2B1nMHIuj7fNL38HKlf8j/F85ai+cIZ7XX3+9eeqLGSSH92FfIIlMThYWOu8duo9NX6jOmOcR96awKZaBro8MjE3jgn5WPearRl5EMhRANphBSVFQyoRRCocQz+t0FAWHazU2fekFncLysoxi0YNwuqDGXxThIyFMFaQ7zySgETAdUXOHkFbSaK+vW0Q+Dfi8apOQWEmABEigZwRMyytY1XcV5BIhJNwTyIv6Nh/DUDyEqVpDvFN3mdwitP6xKAutZEK05lvU4b2UKWVb6WjlLuXoz1ZhrNz1suS1VRgrdylHnq38d+ou43H+bG4fmh719qiCbKiIByKpJisdROc4gImhBJIhrV6v5OMI+KeAcBoFtc1aQi4RRCWXa2zTtkhyOzJ2j/uQmDK0kw0yW6XDFxOrVC9geswQiLckAKCVfXQTkO0Osoi87c6x6ORueBjvvfce3k5uEyFV3W2Fr8Z32223NU23GJl1B0MIBQN4LJ1rHFEG0Kl7PeJh+P1BIFdoUiDVfapX+TQSL4QRrRZO8IQQi1WQyOh6uL6YyvOCaUngRjAWhd+tfXs95PEj6HsJ2YJ+LM8QJ2+XJQHTEbWGJdbaUuVYMo1oQKxocMMbTlfzsXD7OB6dBR7dJEZuq8uyK/rVDyEk9EsnoMlrHK0GivlUdZm2G/5opiq/gmI6ioDXra62cHtFo1YOErXSy+RVVnKI+3yImw2EmXjnIxIggf4jYFpewaq+KyCbGEYk5MOwSNKwH6EwkMzKHnKn7lVOxSySQ2EE1D6FlUwALevwHsqsvVYrHa3chSBjeW4Vxsq9VzJriQZgpUOn7vq4nL02t4/5Oni8PuBnpYbZXemrmAojhjjS0VFoLcgiUrFH4Z1KIeZ3V58Bw2JlYyyI9taMtSfDE4piojiBpDRNqVSTc6t0NAnCx8uYQLv20Ski2x3khXRuhZJa19hm51rXGT9z5kyTtBaRTboR9A9j2B/ErifSaGw7d+qui7ZSQiaVwsawH6O6xzj8AG4WS77cXoQS+pE4sWhFrcprvt1uD2ZzBdMCreap2UWlgHxuPXye9oqyZmL4fOkRaHdELVsYQixdQEnJIlq8H/GMWAvhQ0yZwSSAyRkxcitmncvIRANI+1LqSHMpE0QuGGhcNmWCsVh2I5YuQlFyCBe3IpIUS7vKKJREp7akDgblJoCJQAL6z5XN9TJGUEQqHEM5nkHMxw37jHR4TwKDQqCt8spY35UKyM164dZVqaI+fSVX1OrTTt2r8IrZJIZDfq3DYCWzTeC9kFmL2kpHK/eaIN2FVRgrd52o2qVVGCv3mqDqhZX/Tt2N8Tl435Z9oIx8LouNk4HG9qhY95CLI5wOIhnz1TrCKBeQe2EMAZ/OgOymqW0ZHoRi1rPIWvTN02FXPfpfHgTas4/OWdjuILtcLrWRa/ssdFUUdQZJdLLthm86gyxGez1B+IXNixHl3U8gldUtgO7UHcDhB27WvjP+oB+p0RQy0Xr32B1KqzxEmubyCXhSmxCWGxx5fQiPpJDKyBnfMoolnW623p9YLhRDMpRApB69LQn0vHQJtDuiFgwGoC1I8GI0AJTKcibXwKaURXK/H5HQqDbE4wkhGn5JN1sjOtUKjN8q+/3+qnwPAuEdeCGTRwluBCIhjFbrZY8/CN9sDkVpFgCs9SoiHQ4gHUwirhq7QV/ekgAJDAwB6/KqWX3nwbCxfd/wyxqduueRTngQDugHoa1kWmHvhUxjnFY6WrmbledWYazceyGz2+m2SoMxPmfuW9lHrT3qWo2Pf6kM73ClYdVkOZdAOJiELxLUvqGXKlfKKMEHq/mVunztO+CbHzgsJQBtyhABhvytZ5Hr8Zinox4pr0igkUAr+2j02dmd7Q7ytWvX1Bhtn6vfFNsOV42v2QxyPp2AN+SvztMOwxfcjf2pbO17ik7dRWLltxLnDniQyeRrso3oh9wBRKJjOFysbogw5MdEJoLyhE/tYHt8YkMFMWHnaXM5i4yhgnwiiFA+ilzCXx8RlM48L3sC3R9RE5XuKNy6dqJndAyvNDRGW2N3u0eBqv+KujGIH36xzPrmB6CrclsLqbqmo2FE8kFEgvxGui1g9EQCfUygdXnVqr4romwcY274+ccO3fNZJEerA+41flYyax7NL3ohc15MVjpauc8TKD5O65C1EzI71dEqvFkaev+slX3I9qiYlFHmUghkgwipK7U0vQqlUUykw8iGwtDtzSW6rBhC48C0WUoa5CsKGj//a0+GJrf1LHJDPCbpMNONz0hAEGhlH90kZLuDbHfmV+9fLLTW39uZSfZ6vSbpziObfAX7t67WZnhdLqzeuh94Og1tErlT98YoPeEpJBBFtLHUafRUaay9h0YjSObEklMFxdwUAijgEZ+dKWDZWAgjmwo1jgg2xsy7ZUyg+yNqoiLMo6Sb5S3mD2N9Q2O0NfBSMQexHnKonEHUP4FSKIl0vgTlwjTs7r3hjiZRmBrGRLjZhiStdaErCZBA/xBoXl61qO/cXvhGCtAvwiqVihgZrQ44d+oOIJ9NYjQoB9wBWMlsA2kvZDZEa6WjlXuDsOqNVRgrdydkWunQqbtZGhx61tw+DAoMeeAP+vCCrqL2Bf3w+mJIJYBoKF7/5NA9isCWw0hldZW6QZzlrU0ZtVnkhv1LTGIxSYeJLz4iAZVA2/bRIS/bHWTR0ROH0+dCQbexlUy0GJnFHpzU7yCtzOHY+NNIix5yp+4yntrZg9BUEu5oqLpJUAmZqSRyJW2ZaqWUQSJRxqTfrANcRj4ZRqScQMTf7veTZWRjfkRKMeSS7BzXXgMv5hHo+oia24/w7iziyeo39cUUEsmNCNfytnFTF02l2icE5RySiRzGxeqOSgXlWY+6Q/bwEFDK59rb5E6XSp/Hg2FfDMlgGoHa5mI6D7wkARIYGALm5ZVVfeeFL1zAVKpaJpWzSCWBWEDWt526iwF1H0INn3BYybRC3guZxjitdLRyF/KM5blVGCv3XsnUp91Kh07d9XE5e21uH3UI4UQAACAASURBVCY6lPNIpw5jzDN/ZZVHDEgH0wjWBpU9CE1MohQNI67+rJMmr1LMIhFPt7kvjl0Z1VnkeNJEed0js3QUM0gd3tKwik0XgpfLmEDb9tEpI8XmcfnyZeXSpUtK2+effEP0qBv+Jn5iI7wuPqOqJ/esV9bvOWl8rMwdG1cwNq0c7dD9gnJBmR6DMjZ9oSGOuZlJZeP6R5SZuTnl5IHdypa1I2r6RtZuUcafP9fg98KhHVra12xUdu05pjRKUhRlZrKBjWA1OSNFzCiTBnYqy7Hp+XJkEJ5JQBK4MK2MYUzRsq+Wl+p5S2Q9fd6e767MnVT27VirjADKyNodyp6Zd6VkkXHVvFm3De1+y9gOZe0IFIysVXYdOKPMqSHmlJP7qs/XbFHGJ8eVuxes15wyM7lR2Tg5U5WtU4mXJEACA0xAK0OM7QVRl9fqzbkzyoHdG5U1ol4UZcm0LGOqye7E/eQeZf34sfnlipXMVnV4L2SavWErHa3c55XniqJYhbFy74lMQ+KtdOjU3RDd4t5q7VG9fahtzukzilYzm7VXzynTO0Ya6st3z0wr41u0eh1Yo2wc263sO3ZBmWvS3r0wPaa2p2s2qCiKlQx9O0NRzikHtkAno1U6LiiHdmntadW+DzW2pxeXP2NfbgRcIsF2OtmXL1+2471rfs+ePQunptW7pjQFkYBDBMSIGu3DIdiMhgRIoCMC/Vhe5eJupHxFJNpe4WWNoBcyrWOlj0En0I/2MehMqf/SIeCUfQxMB1m82htvvHHpvGGmhARIgARIgARIoA8I5BD3pOErxNG9/nEvZPYBKqpAAiRAAsuAgO0O8qVLlxYFy5tvvskZskUhz0gHgYBTI2qDwII6kgAJ9DcBllf9/X6o3eISoH0sLn/G3t8EnLKPgekgi9d100039fdbo3YkQAIkQAIkQAIkQAIkQAIkQAIDS2BgdrEWM8g8SIAEzAmIETUeJEACJDAIBFheDcJboo6LRYD2sVjkGe8gEHDKPmzPIF+8eHHR+K1atWrR4mbEJEACJEACJEACJEACJEACJEACS5vAwMwgv/XWW0v7TTB1JNABAadG1DpQkUFJgARIQCXA8ooZgQSaE6B9NGdDFxJwyj4WNIMsfhnK5XLB6TNnkGkYJEACJEACJEACJEACJEACJEACvSJgewZZzOQODw9jMc5y1IBn7XtTciAHUTCIfCD/5D3PGhdyIAeWk/1XTrK8ol3SLpvbJe2D9kH7aG0fom3X68P2DPLVq1cXZfb49OnT/JmnXucGyh9YAqIwvfPOOwdWfypOAiSwfAiwvFo+75optU+A9mGfGUMsHwJO2YftDvL777/v+NJquZT7uuuuWz45gCklARIgARIgARIgARIgARIgARJwlIDtDrKYQe7l8et+fy/FUzYJkAAJkAAJkAAJkAAJkECXCHxgZqZLkiiGBFoTcGoG2fY3yEJtMaPby3NrNHQlARIgARIgARIgARIgARIgARJYTgSc+pzQdgeZnePllA2ZVhIgARIgARIgARIgARIgARJYfAJiBtmJ4wNORLLQOP7x2LGGoENDQw33vCEBEiABEiABEiABEiABEnCWwD9u2uRshIyNBADHNqRd0AyymEXu1Z/+7evjeO211/ROvCYBEtARMB1RK6UQdAWRKuk8trosZhANeNRd6oNtB2olsA03uzq2IZJeSIAE+puAaXnVTyoXkwgEkih2U6deyOymfpTVNwT63j76hhQVWY4EnLIP2x1key+jglee+XN84W4vVq5cid8cHcOfP3fenoiq79tvv71FuBJSQRdc7hiyFTNvC3WvhnO51E6Dy+WBL5xArlyPo5QKVt2kHxdc8VzdQzmPqZAXbpcLbm8A0YxZlVtGLhFoDKdKqCCfiiLs0zotavi0Wfh6dLxangQ6/yajjEx8K4qhrDr4lQ65+whkDnGXC3qz6iPlqAoJkIBNAublVRv1XaWAVDQAj6iTPQFEUwU0VPmdulfTUcymgJAfHnFvJVMN06wOr4PphcyadCsdrdxrgnQXVmGs3HWiapdWYazca4KqF1b+O3U3xufQvbl9yMit85r0yTMJLEUCre2jeym23UG29w1yGefP34KdP8zjvffew5nDOzH7v38O33+j+UZfxqTJ+F5//XWjU/2+mEFyeB/2BZLI5BqqS81Ph+5j0xeqM+Z5xL0pbIploOsjA2PTuKCfVY/5qroVkQwFkA1mUFIUlDJhlMIhxPM6HXNxuFyrselLL9TTU7sqo1j0IJwuqPEXRfhICFOFmgdekIBKwHREzR1CWkmjvb5uEfk04POqTULnqNrS0Tm1GBMJkEDvCJiWV7Cq7yrIJUJIuCeQF/VtPoaheAhTealnp+5SThFa/1iUhVYyAbSsw3spU8q20tHKXcrRn63CWLnrZclrqzBW7lKOPFv579RdxuP82dw+2s1rzuvLGEnASQJN7aPbSig2j/fee09Z+N/bSnIblO2pt5vK+G8+nyL/jPE0U/XcgS3KrkPvKu8e2qVg/JgyZ/C4cPcLyvQYlLHpC3WJM5MK1u9RTlafXJgeUzA2reh81P2e3KOsxyPKTP2JcnLPemVkUoauO6hyJvU+6271K02fHYdMY6t74xUJCAIXppUxjCla9p1RJgHlkQOHlPEta5URjChrdx1SzqmkNDexQb32Vw0zd1LZt0P4hTKydoeyZ+ZdHVctTINtzJ1Rpse3KGuEnDVblPHnNenKyT3Kxo2TykzNMM8p02MblUnxoEFHRTl3aFzZsnZEgdBvy27lwMk5ZWZS6qWdG+LUacRLEiCBpUTAWN+dVCZH7lYOVIsVkVJRn67fI+vTTt2r7M4dUO6u1elWMuu8W9bhvZBZi9pKRyt3IchYnluFsXLvlcxaosXbdyY/6KPsk+uWec1BHWVbXZx5kMBSI9DjGWTDTHHlDZw6sQ53rRlRZ0RFZ1/OEMuzcQBAPj9z5ozRqXpfRDbpRtA/jGF/ELueSKNxErlTd120lRIyqRQ2hv0Y1T3G4Qdws1jy5fYilMjpZpcrKGFY7xNutwezuQLa/Sy0IXClgHxuPXyeflr+2qAhbxaJQLsjatnCEGLpAkpKFtHi/YhnxFoIH2LKDCYBTM6I/QXErHMZmWgAaV8KBXX1QxC5YACJ2myNMaEVZGP++uxOVqyWiCApvggYjSIVzSMU1VZeFJMRJHwJRH2GTfeKSUTuryCSK0FRSsjF/aiUyvDF9Lop6K/l30YOvCcBErAi0FZ5ZazvSgXkZr1w66pUUZ++kitq9Wmn7lWli9kkhkN+qLWslUyrhPZQZi1qKx2t3GuCdBdWYazcdaJql1ZhrNxrgqoXVv47dTfG5+B9W/bhoD6MigT6iYBT9mG7g+xyudROrf3zVbz0va/j4B9+Gw+uU9TvdkXn1yhH/xL07rfddpveqX5dzCLpCcIvKs1hP0K7n0Aqq1sA3ak7gMMP3Kx9Z/xBP1KjKWSi9e6xO5RWeQhd5/IJeFKbEJYbHHl9CI+kkMrI7nAZxZJOt3oq2rgSy4ViSIYSiNSjbyMcvSwHAu1+kxEMBuBW+6VejAaAUlm33F8PqpRFcr8fkdCoNsTjCSEafgnJrOwhi061rrNaziL1RBATEZ/O/wtI57S87wnFES9HEIlGEEqHkYr5YOgeA+UySuJfsax+Vzg8GkIkwMEg/WvhNQksBQLW5VWz+s6DYV0HWWVR0ZdhnbrnkU54EG4od6xkWr2RXsg0xmmlo5W7oTxXxVuFsXLvhcxup9sqDcb4nLm3tg9n9GAsJNCPBJyyD9sd5GvXrqm87J0ryP+bHQifegg/jf+u2jBuFt74MqS/ZjPI+XQC3pC/Ok87DF9wN/ansrVZ3E7dhT7yG+RzBzzIZPI12UZdh9wBRKJjOFysbqQ15MdEJoLyhE/tYHt8UaTE98M+jzY6bRTQ9L6CfCKIUD6KXMI/v2PRNBwdlguB7o+oVVDBKNy6/qlndAyvNDRGdXQronO7H1tX1zer2/SYzh0ehOITKD+RRTAW0ja/0TuL69EIUtMepENefNDlhjfUuCGe0TvvSYAEBpNA6/KqVX1XFONojUfDzz926J7PIjlaHXCvxWIls+bR/KIXMufFZKWjlfs8gQCswli5OyHTSodO3c3S0Ptnre2j9/EzBhLoZwJO2YftDrJxxtf6/ipe+V4If3x6J/5D8jPq7pP6mWFjeP1L0fvzer16p+p1HtnkK9i/dbU2w+tyYfXW/cDTaWiTyJ26N0bpCU8hgSiiqRY7SVcaa++h0QiSuaI6y1zMTSGAAh7x2ZkClo2FMLKpJh2LRjV5twwJdH9EbQhDyKMkFz+I5lL+MNY3NEb1oIX/cRyba/wJuPpy6CJSsSl4J4NIR+PQ71NXlzKkdoozhRKUuTwS7iQ2Tel2hK975BUJkMAAE2heXrWo79xe+EYK0C/CKpWKGBmtDjh36g4gn01iNCgH3AFYyWzjHfRCZkO0VjpauTcIq95YhbFyd0KmlQ6dupulwaFnze3DIQUYDQn0MQGn7MN2B1l0WsXR3rmMF7+2FdHZL+MnU5/BmjbCGd+JjKdQMNm6WYzMYg9O6neQVuZwbPxppEUPuVN3ozJiFmwqCXc0hLj6oXMJmakkciVtiVellEEiUcak36wDXEY+GUaknEDEP29x6byYtAdl9bvOSCmGXJKd4yaQ+BhA10fU3H6Ed2cRT1a/qS+mkEhuRLiWt7WfXqr9XrLqP4XYRKb6fX0FpdwUEmmth11MxTA1mkA8NoGpYBqRRK7x51nEW8wnEc8WtedDQxB98RF1vYQHnjEgJ1dm8I2TAAkMNAHz8sqqvvPCFy5gKlUtk8RnHUkgFpD1bafuYkDdh5D6vZbEayVT+mt27oVMY1xWOlq5C3mG8hxWYazceyVTn3YrHTp118fl7LW5fTirA2MjgX4l4Jh92N117PLly8qlS5eU9s4/Ub5R2xlXtxPtp/9SeauJHP2ueMZ4jLo27mBZd507Nq7uLH20YYdL++4XFJNdrBVFmZuZVDauf0SZmZtTTh7YXd11V+z0q9u5txrdhUM7tJ2B12xUdu05Nn+3a7ErtoFRfTNr4+7CVYa1HTbraeIVCcwj0LBDtJaX6nlLUXeHru8IPd9dWeAu1mtHRD5do2zcNak8f25ObDU7fxfrHRuVR4y7WF84pkzu2qjtgo01ypbxaeVMdefruZk9ypY1Qu6Isou7uM971XxAAoNPoI36bu6McmB3tYwQO+VPn2n81YpO3MWvTpj8CoZiJbNVHd4LmWYv2kpHK/d5u1iLhk6HrHsi05D4TnW0Cm+IbtFvW+W1RVBO315fhOgZJQn0lIBLSLczSnD58mU73m37/eAf/EEtzNyPflS7Pnv2LJyaVq9FygsSGBACYkSN9jEgL4tqksAyJ9CP5VUu7kbKV0Si7RVe1i+xFzKtY6WPQSfQj/ZhxvQfN22qPf7AzEztmhck0EsCTtmH7SXWvUx0K9m33nprK2e6kcCyJsDO8bJ+/Uw8CQwUgf4rr3LIToURNP70XEdUeyGzI4UYeEAI9J99DAg4qrksCDhlH7Y7yGLCuZd/+rerj0fMIPMgARIwJyBG1HiQAAmQwCAQ6L/yyodYMY4uTh5rvy/fdZmD8HapY6cE+s8+Ok0Rw5NA9wg4ZR+2l1hfunSpe6k0kbRyyxaTp3xEAiRAAiRAAiRAAiRAAiTQbwS4xLrf3gj16ZTAgmaQRaTy0+VunztNEMOTAAmQAAmQAAmQAAmQAAmQAAksLQJOzSDb7iALzN3uFBvlLa1XydSQAAmQAAmQAAmQAAmQAAmQAAl0QsCpb5BtL7Eul8twuVxqJ9nJ81tvvcVdejvJUQy7pAmIETWnCo0lDZKJIwES6DkBllc9R8wIBpgA7WOAXx5V7zkBp+zDdgf54sWLjneOxQyz6IyvWrWq5+AZAQmQAAmQAAmQAAmQAAmQAAmQwPIkYHuJtZjJHR4exmKcxaiBOHgmB+aDRjsQNkG7oF3QLhrtgjz6kwfLq/58L7SX/ngvtI/+eA+0h/58D7KtK95PLw/bM8hXr15dlCXWp0+f5hLSXuYEyh5oAqLA4BLrgX6FVJ4Elg0BllfL5lUzoQsgQPtYADQGWTYEnLIP2x3k999/f9GWWF933XXLJgMwoSRAAiRAAiRAAiRAAiRAAiRAAs4SsL3E2rjjtFP3YgaZBwmQgDkBMaLGgwRIgAQGgQDLq0F4S9RxsQjQPhaLPOMdBAJO2YftGWSxxFpumuX0ecWKFYPw7qgjCZAACZAACZAACZAACZAACZDAABIYmBnkV199dQDxUmUScIaAUyNqzqSGsZAACSxlAiyvlvLbZdo6JUD76JQgwy9lAk7Zh+0Z5Eqlsmjch4aGFi1uRkwCJEACJEACJEACJEACJEACJLC0CSxoBlksrXb677XXXlvab4KpI4EOCJiOqJVSCLqCSJXaFFzMIBrwqLvUB9sOJGXnEHe5EM/J+26deyW3W/pRDgmQgF0CpuWVXSG99F9MIhBIotjNOHohs5v6UVbfEOh7++gbUlRkORJwyj5sd5DtvYwKzv/oO/jC3V6sXLkSK71j+PNn3sBC5qBvv/32FlGXkAq64HLHkDUV3sy9+tzlUjsFLpcLnkAUqYIUYnT3wBeMYCpr6HFUCkhFA/AIOZ4AoqmCLo0V5FNRhH1ax8PtDSCa1le7WgdAxN34F4fW17Byb4GFTsuGQOc/8VRGJr4VxVBWHfxKh9zLhh0TSgIk4CwB8/LKqq4E0LKubcNd9ZJGPOzT6usmA4jFbAoI+eERWKziLOcxFfLC7XJBrd8z+vq9ztWOzFIqaGgPuOCyHH0sI5cImPtrU8e6thUUM/Fau2V+u6buE6ggF/fB5ZJtFr2b4dqKpZW7QZzlu7GSZ+VujM+he3P7aNaOzSMxKtqPOv5lrU3qdWvtSrfXj3A8g6LatDW2a43tXi2R5YLeTtzwBrS2r2wdN3eX8n1I5HXAcnG4gilorWfpp97ubWx7A7l43c0y6+ui4eXSJ2BuH91Pt+0Ospg5Fkd75zJeeRHY+cM83nvvPfwy9zBWfOdz+P4r7Yav+3v99debp76YQXJ4H/YFksjkpPnqvFu4j01fqM2IZ0NFPBBJNYwc190LyEz4kY+NIpSSlWAFuUQICfcE8mJmPR/DUDyEqVrBUEax6EE4XVDjKGbCKEVCmCpI/XyIGWbk3z20C+sn/RhVvVi5Szk8L2cCpiNq7hDSShrt9XWLyKcBn1dtEi5nlEw7CZBAjwmYllewqiut6lordwDFFMKBFNzRDIpqvWtWPhah9Y9FWWgls4hkKIBsMIOSoqAk6vdwCPG8sR1iR2YV/tg0LujbBjFf87ciOh+u1dj0pRdM/LSroz5oGfksau2W+e0a6beCfCKEiYy8b3W2YmnlbpRt5b9Td2N8zt2b24cW/5bRPOK19idQTieQ9YzplBPv24/0aBy5krbas5ibQmgoj3y57q3erlVgbPdW8nEE/FMiA6Cg5sEScokgKrkchAgrdxHL7nEfElMZ1X891sarVjr4YkL3C5jWJ60xOO+WKYFW9tFVJIrN47333lMW/ve2ktwGZVvy7QXJaKbquQNblF2H3lXePbRLwfgxZc7gsbn7BWV6DMrY9IV6iJlJBZhUZtQnJu7i+blpZQxblAPnxM1JZXLk7uq1JubknvXK+j0ntZt5/2sydxzSxan3MzejTK4fU/Qq6Z0VK/cGz7xZ1gQuiHwq89KMMgkojxw4pIxvWauMYERZu+uQomZhRXMT417aXzXM3Ell3w7hF8rI2h3Knpl3dTi1MHXb0e5375tWxresUYAR5e7x56vy55Rzh8aVLWtHVPlC1r6T0kpb6SWi09wnNYNU1Py/caMyOSPD61TiJQmQwBIiYKwrrepaK/d3led3jyjjxyzKjnMHlLvHphWthraQeXKPsh6PVNsLGnpR/49MGup/OzIVRbkwPaagpkP7r1QNVyssq+Ha0tFYnhvjNG8LnZveodw9OaPMNbSbZFijTAuWtttSncqzCi/T0S9n7R1MHjumPLLmEUXLxieVPXc/ohw7pmu3NtT7ZrqbvMuG93dOObAFapvaLLSiWLlX9ZwR/jYqtaawiKOWp610kDFLWfKeZxJwjkCPZ5DrM8Bixrn8xlE8d2IdNq8daXMGuh7+zJkzTQYGisgm3Qj6hzHsD2LXE2k0TiJbuevFlpHPZbFxMlCdvdW76a49AUR2v4BMvgSUCsjNeuEerru73R68kitWl5LUn6tXlQLyufXwecyXsBZTE0iFYgiaO8PK3RAbb5cJgXZH1LKFIcTSBZSULKLF+xHPiPFgsUphBpMAJmfEqK2YVSkjEw0g7UupI8ilTBC5YKBxyZQJ22LZjVi6CEXJIVzcikhSrLQoo1DyIZ4rqXafmwAmAonqJwSaEHO9jBEUkQrHUI5nEPNxwz4jHd6TwKAQaKu8MtaVVnWtlXslj8x+LyrpMLSlpx4EoinUvqiqwitmkxgO+aFWwVYyUUEJusofgKj/Z3OFhvrfnsyqIocfwM3i0yu3F6GENnO3sPfbno6tZJcLGaRz6+H31hsmxXQYkWwYyZgPbZXGViyt3I0KWvnv1N0Yn4P3Le1jyI/IhDaLXMkmkQ1H4Ne/APcoAhsPIzGRRK5YRtm4mGFeOgzt3nIBuRfGEPA15utaMCv3mkcPQjHrWWTNu0GHmgxekMB8Ai3tY773BT+x3UEW38mKzq6980v47g034H/6xG68s/Pb+Ow6u+EV3HbbbeaJLGaR9AThF7Y87Edo9xNIZXXrSKzcARx+4Obq9z6r8fEvleEdrui+ITaLdhjDHqC+obcHw8aypO6oEyCW/MSQDCUQ0dZP69zEupUsEjE3JiJNKhwr90ZpvFtGBNr9JiMYDMCtVqZejAaAUrPas5RFcr8fkdCo1vzzhBANv4RkVn47oC39N36r7Pf7q/I9CIR34IVMHiW4EYiEMFq1EY8/CN9sDkXdp/zWehWRDgeQDiYRV419Gb1cJpUElhgB6/KqWV1pVde2cC+XUIQHvsgUCurS0yzCpSj8E1ldfZ9HOuFBOFDvCAItZHp9CI+kkMrIwqyMYknX/lDfm02ZopMdSqvtLNHWmssn4EltQtj2xonVTNOWjublOaDtgbL6tj9GMZxAuNpuEUtsw6kApqYC2nfapvnTTGYLlqoMK3djRFb+O3U3xufMvZV9eEIxeKdiCCeAaMj4WZQXkcwMwkgj6l+N1R8U38aHEE/r98Zp0e6tlFGCD03mcAArdx2iIX8UE8UJJGWzQecmLu23vQ0CeLssCVjZR7eg2O4gX7t2TY3b3nkDvnT5Mq784jV8/o1d+FdHy7AXHmg2g5xPJ+AN+atjuMPwBXdjfypb++7Byl0kRv8dhDKXQiAbREid+WqGuYxyEaj/6lQRZWOdWHesChHf6gQRykeRS/hNR1zzUzHkYlEEjZ3tqgQr92ba8vnSJ9D9ETUxSDQKt66d6BkdwyumAz/mfN3u0dooUkXd8MOvzkC4bn4Ah82DNH2ajoYRyQcRCRobA02D0IEESKBPCbQur1rVlVZ1rZX7MDweWcF6EIqGMZvJo7YlSD6L5Gh1wL3GroXMIT8mMhGUJ8QmVS54fGKTT7Eox6PNQAsZdmXW4tUuhtwBRKJjOFyU+54YPFjdtqNjUxlaJ1eZO4dIIYSYuuIIKBdy+NkPH8Bvys1FNz0K4FFs0m8UZSqzBUvVv5W7UaiV/07djfE5c9/aPgAM+REOFVEORhtnj6V6wz5EptLIFRUoc+8iNzWKbMSPCd0uts3bvUMYQuMAthSrna3c9b5bzyI310Evg9ck0EjA0j4avS/4znYH2d7MsWGmeMUt+L371uKpU2/YnIFW4PV6TRKZRzb5CvZvXV2dAXZh9db9wNNpaJPIVu4mIoc88Ad9eKEkR4RN/JQymNq/CyG/G3B74RspQD9oXCoVMTKqqyAhK/wwsqmQ+YhrOYOpxCgm5BCtMVord6N/3i8rAt0fUROVYB56MyjmD2P9vIGf5phLxRzEtwdD5Qyi/gmUQkmk8yUoF6Zhd98NdzSJwtQwJsKNG+g1j50uJEAC/UqgeXnVoq60qmst3T3wIt+wckXl43HXFknns0mMBuWAu5jKta7fh0YjSObEZyUKxGZIARTwiK++RGwhMue9t4pxBH6ej5YPrHRsGVg4qu0iL/bntaEE/Qy3SLcyo36ggxklhqZbiVmxtHI3Kmnlv1N3Y3wO3je3j7oSo9EcMuE2BoyHhuHxhxH2zaKgb6jWRVXfb7XdK5ZobzmMlPHXWqR/K3fpr3quzSLnLPJwO21vg2zeLk8C7dhHN8jY7iCLwlAc7Z1P4ftfeQanyhXVf2X2KL7/1Bv4/Lpb2wxfj6dQqI3x1tMtRmaxByf1Oz0qczg2/jTSoods5V6XVL8q55FOHcaYx6zgqaCcTyESjGJoeqI60+uFL1zAVKr6jVA5i1QSiAVkBVlGNuZHpBRDLtmkcywGmZMx5KMRBOTgdl0j9crK3eCdt8uMQNdH1Nx+hHdnEU9W83UxhURyI8J+ma+1pXfG30uuLS8s55BM5DAuVndUKijPetQdsoeHgFI+17BLfDuvyufxYNgXQzKYRiCcth2+nTjohwRIwBkC5uWVVV1pVddauY8iOFlGLCYH2YpIJZLYEvRVB63FgLoPoYZPOKxk6nmVkU+GESknEKl9FLoQmSVkppLIlbSPRyulDBKJMiZrZa8+TrvXZjoKGcbyPI+paAr56ic4QoepqQJ2j5pNVDTTwSjTiqWVuzEeK/+duhvjc+7e3D7ajL+URjyeQk77TSc1UDkvviEf0yZ1zMQ0tHs9CE1MohQNI54t1T4/qBSzSMTTKMHK3RhBdRY5njQ6NN436FB1KmaQOrylYSVbYyDeLUcCHdmHHWB29wO7FEMXaAAAFMlJREFUfPmycunSJaW98zvKTxKfV+75yIfU3Ws/9JF7lC8e+Dvl522Hb4zHqGuz3aLnjo2ru+UdbbKbtHS/oGg75NV37xW79W5RxqfPKNp+vUb3NcrGsd3KvmOGHajnzigHdm9U1ohdgNdo4ev7ZGo7OerjUK9ru/mpW1YqYyPj1V0Jjalsw90kCB+RgNKwm6VhN2ixP/Skfgf3+e7KAnax3jK2QxF78GFkrbLrwJnqjvJzysl91efCPibHlbsNu2vrN15trdecMjO5Udkodk7lKyYBElhCBNqoK1vWtYqiWLkr55RD41u0MmrNRmXXvpPVul78IMUeZb3Jr2BYybxwaIe2+7+Qt+dYdffr6mtZkMw55eSB3bpd/7co489rvzfQ9GWruxDLXyHQzvoytaWOqlCNff1XCd5VZvYZdJiW5bmJFg27IEt3o8w23o/l+5Oyq2cr/526G6Jb3NsWOzrr+c+dU57fs1sZ2yh+TULkhRFl7ZZxZfqMrDGN7Vpju1dL5btnxC9SaL9iAdTbvlJKc3czPbWdr427WOvbxfW29wXl0C7tFy/U9vQhi7y/uC+FsS9hAi6RNjsd6suXL9vx3jW/Z8+ehVPT6l1TmoJIwCECYkSN9uEQbEZDAiTQEYF+LK9ycTdSviIStdnfjpKoBu6FzM61ooR+J9CP9tHvzKjf8iHglH0MTAdZvPobb7xx+eQAppQESIAESIAESMABAjnEPWn4CnHzTY8WpEEvZC5IEQYiARIgARKwScB2B/nSpUs2o+iO9zfffJMzZN1BSSlLkIBTI2pLEB2TRAIk4DABllcOA2d0A0WA9jFQr4vKOkzAKfsYmA6y4H/TTTc5/BoYHQmQAAmQAAmQAAmQAAmQAAmQwHIh0ONdrOu7UMtPnRd6FjPIPEiABMwJiBE1HiRAAiQwCARYXg3CW6KOi0WA9rFY5BnvIBBwyj5szyBfvHhx0fitWrVq0eJmxCRAAiRAAiRAAiRAAiRAAiRAAkubwMDMIL/11ltL+00wdSTQAQGnRtQ6UJFBSYAESEAlwPKKGYEEmhOgfTRnQxcScMo+FjSDLJZJu1wuOH3mDDINgwRIgARIgARIgARIgARIgARIoFcEbM8gi5nc4eFhLMZZjhrwrH1vSg7kIAoGkQ/kn7znWeNCDuTAcrL/ykmWV7RL2mVzu6R90D5oH63tQ7Tten3YnkG+evXqoswenz59mj/z1OvcQPkDS0AUpnfeeefA6k/FSYAElg8BllfL510zpfYJ0D7sM2OI5UPAKfuw3UF+//33HV9aLZdyX3fddcsnBzClJEACJEACJEACJEACJEACJEACjhKwvcR6oT/T1Gk4MYPMgwRIwJyAGFHjQQIkQAKDQIDl1SC8Jeq4WARoH4tFnvEOAgGn7MP2DLJYYi1ndJ0+r1ixYhDeHXUkARIgARIgARIgARIgARIgARIYQAIDM4P86quvDiBeqkwCzhBwakTNmdQwFhIggaVMgOXVUn67TFunBGgfnRJk+KVMwCn7sD2DXKlUFo370NDQosXNiEmABEiABEiABEiABEiABEiABJY2gQXNIIul1U7/vfbaa0v7TTB1JNABAdMRtVIKQVcQqVKbgosZRAMedZf6YNuBpOwc4i4X4jl5361zr+R2Sz/KIQESsEvAtLyyK6SX/otJBAJJFLsZRy9kdlM/yuobAn1vH31DioosRwJO2YftDvLCX0YFJ75zN1au/A5OLEDI7bff3iJUCamgCy53DFnTCe5m7tXnLpfaKXC5XPAEokgVpBCjuwe+YARTWUOPo1JAKhqAR8jxBBBNFSAlABXkU1GEfVrHw+0NIJrWV7taB0DE3fgXh9bXsHJvgYVOy4ZA5z/xVEYmvhXFUFYd/EqH3MuGHRNKAiTgLAHz8sqqrgTQsq5tw72WzApycR9cLlnP1hzUi2I2BYT88Ig7qzjVEGXkEgG4WowQNshsGaYNDmp43X9WOpbzmAp54Xa5oLZBMvo2iE5O7bI9HSqFNOJhn9b2aWcw1kpPK/eaftULK/+duhvjc+je3D60yMsNzN3wBrQ2aUUdEK+3I+O5Zm1HzU9wagpBXbtTy7pam9c4QF5KBeEKpqC1fM38CHvyI5SyylcOAWQ0S5pAK/voZsJtd5DFzLE47J0reOXffA7/19G66vbCA6+//no9sPGqmEFyeB/2BZLI5Opd05o3C/ex6Qu1GfFsqIgHIqmGkeO6ewGZCT/ysVFdQVBBLhFCwj2BvJhZz8cwFA9hKi9jL6NY9CCcLqhxFDNhlCIhTBWkuw8xw4z8u4d2Yf2kH6OqFyt3KYfn5UzAdETNHUJaSaO9vm4R+TTg86pNwuWMkmknARLoMQHT8gpWdaVVXWvlLhNVQT4RwkRG3hvPRWj9Y1EWtiEzF4fLtRqbvvSCUZDuXi8TQMswVhx0YtVLKx2LSIYCyAYzKCkKSqINEg4hnjdpK9VEt6FDMYVwIAV3NIOi2oaxqmus9LRyrylXvbDy36m7MT7n7s3tA6jk4wj4p4BwGgWVeQm5RBCVXA5lUd9fmMYYxjB9QUHMp287zmASwORMffVnOhIx+F9o+kTnOICJoQSSIbYfFkqR4don0Mw+2pfQnk/bHWQh1m7ntvhXX8BXrj6M1DfvU7WyG174v+2225qmSIzMuoMhhIIBPJbO6WZvtSBW7nrBHq8P+FmpOlKmdxHXQxgeDWEqlUDlgQiS6mBZAdnEMCIhH4aFl2E/QmEgmZU9ZDeCsSj8bu376SGPH0HfS8gWDLPQMqpKDlMTZcTCPph+cW3lLuXwvKwImI6oNSyx1kaTY8k0ogExk+CGN5yuDgQJt4/j0Vng0U1idLm6LLuin3UIIZEr65hq8owjzcV8qrpM2w2/aDipISoopqMIeN3qKgm3VwwgycZZK7100cnLSg5xnw9xs4Ew6YdnEiCBviZgWl7Bqq60qmut3DUkxVQY0UoM6XjQnFExi+RQGAG1rd+GTF9MbRNdmB4zlyeeNsgE0DKMFQdjNBY65tNIvBBGVHZePCHEYhUkMrVRetFjVz+RqZfnVjqIFUdRuJNJhEfVlo9RKROZFnrCyt0YhZX/Tt2N8Tl3b24fRaRij8I7lULM7661D4fFqsRYEIu15kvYUwxxpKOjNZ2cI8WYliMBc/voPgnbHWS7ndviX38Bf3Z8J6a+fFfVeBYyAw2cOXOmSeqLyCbdCPqHMewPYtcTaTS2na3c9WLLyOey2DgZqM7e6t10154AIrtfQCZfAkoF5Ga9cOvqCLfbg1dyRfNOdqWAfG49fB7z4qyYmkAqFEPQ3BlW7jotebmMCLQ7opYtDCGWLqCkZBEt3o94RnR6xUizfoRZzASUkYkGkPal1JHqUiaIXDCAhBz3acK2WHYjli5CUXIIF7cioo4ilVEoiU5tSW1I5iaAiUCi+gmBJshcL2MkRaTCMZTjGcR8psNHxgC8JwES6EMCbZVXxrrSqq61chf91HQYkWwYyViTAWi1L5vEcMivdTjakNkO3mJWJ7OdAHo/Rg56N3FtqWMFJW34vhZStFFmcwXzNkrNl+7CqEMlj8x+LyrpMLxuMajqQSCaQu3rNF3Q2qWVnlbuNUHVCyv/nbob43Pw3tQ+ygXkXhhDwKdrbDqok1lUlVwc4XSwpT2ZheMzEuiEgKl9dCKwSVjbHWTxnazoJLdznnvlO4j8u3vxxBP3qN+oaJ3r9sPr42k6gyxGZj1B+EWZIWZvdz+BVFY302XlDuDwAzdXv/9djY9/qQzvcGXeLHQjv2EMe4D6ht4eDBvLrLqjLqhY8hNDMpRARFs/rXMTq7mySMTcmIg0qbyt3Bul8W4ZEWh3RC0YDEBbzODFaAAoleVMrgFWKYvkfj8ioVGtaeUJIRp+SbcyQlu+ZfxW2e/3V+V7EAjvwAuZPEpwIxAJQU40ePxB+GZzKOoWUVjrVUQ6HEA6mERcNXaDvrwlARIYGALW5VWzutKqrm3uLpanhlMBTE0FtG+LTWnlkU54EA7oR6ibyzQVMe+hmcx5npo8aMbB6L2Fjl4fwiMppDKywC2jWNK1kVRR5uW5FouJDuUSivDAF5lCoSSW7WYRLkXhn8jq2k5mMlvoqUZm5W4j3W3JsxufMf7e3JvaR6WMEnxoMrfSVUXqbWLte+WbHzg8T345l0A4mIQvEmxhT/OC8QEJdEzA1D46ljpfgO0O8rVr11Qp7Zwvnn0Zx58N46M33IDrr78eN3zqXwH4Oj51w+PI2ZAjImw2g5xPJ+AN+avjo8PwBXdjfyoLWfxbuQvZ9W+MFShzKQSyQYS09dPzialPyigXgfqvThVRlhHKEHXH6hPx3VMQoXwUuYTfdClKfiqGXCyKoLGzXZVg5S6j5nn5Eej+iJoYJBqFW9dO9IyO4RXTgR9z3m73aG0USdvMxQ+/WGZ98wOYX92ay5BP09EwIvkgIkF+4ySZ8EwCg0qgdXnVqq60qmubu5cLOfzshw/gN+XGRJseBfAoNuk36spnkRytDrjX4DaXWfPS6sJUZqsA0q0VB+lHnlvoOOTHRCaC8oTYlMwFj09sRCoWDnnaWJbbSodheDyyseJBKBrGbCYP/cJtqV393EJP1ZOVe12SdmXlv1N3Y3zO3JvbxxCG0Diw3CttGtrEigKzzwcKpVFMpMPIhsLg3ly9ehOUa0bA3D7MfHb2zHYHuZ2ZYznz+6HPTOPKlSu4fPmydv7JNwB8Az+5/GVstDETLeR5vV6TlOaRTb6C/VtXV2eAXVi9dT/wdBraJLKVu4nIIQ/8QR9eKMnRVhM/pQym9u9CyO8G3F74RgrQD8iWSkWMjOorH1nJhJFNhcxH28oZTCVGMRE2m1oGYOVuoiYfLR8C3R9RE5VxHnozKOYPY/28gZ/mjEvFHMS3B0PlDKL+CZRCSaTzJSjqRiLNw5m5uKNJFKaGMRFu3EDPzC+fkQAJ9DeB5uVVi7rSqq61cHeH0urqN9GeUP9m1G2LMKPE4KviymeTGA3KAXe0Wb+3Zj1PZmvvVdcWHIzhLdItvA+NRpDMiU9fFBRzUwiggEd8TdoaNfktdHB74EW+YRWQGszjNizmrgmzZtlGOnTSOpdnN76GyHt7Y2of7lEEthxGyvgrKr1Vpal0X9APry+GVAKIhuKGTxubBqMDCXRMwNQ+OpY6X4DtDrIoYMWx0LNUwW74QsFkXFKMzGIPTsoKTz3P4dj400iLHrKVu1RGfy7nkU4dxpjHbKaqgnI+hUgwiqHpiepMrxe+cAFTqZw2a13OIpUEYgFZ+ZSRjfkRKcWQSzbpHAPIJ2PIRyMIyAFZvU5tuBu883aZEej6iJrbj/DuLOLJar4uppBIbkTYL/O1cVMXDXht6V45h2Qih3GxuqNSQXnWo+6QPTwElPK5hl3i23lVPo8Hw74YksE0ArXNxdoJST8kQAL9RsC8vLKqK63qWit3KwpiQN2HUMMnHL2QaaWHFQdjeDs6lpFPhhEpJxDx6/dxMJbnVjqMIjhZRiwmByyLSCWS2BL06SYAjDKt9LRyt5tuK3lW7sb4nLs3tw8PQhOTKEXDiGdLtaXslWIWiXi6/e/Ju5wMjxj4DqYR5OB1l8lSXDMC5vbRzHcHzxWbx+XLl5VLly4pCzr/ZEIBvqH8ZIHhjaqe3LNeWb/npPGxMndsXMHYtHLUwv2CckGZHoPo8df+RtZuUcanzyjvqlKN7muUjWO7lX3HLjTGOXdGObB7o7JGyFmjhZ+r+ZhRJnXya3GNTSs1KRemlbGRceVYPVAttKaGhXujb96RgEZA5CuMKdNqRtPy4eRMHc7MJJQxzVFRlPnuytxJZd+OtcoIoIys3aHsmdGsQpOg+TeG3zK2Q1k7AgUja5VdB84oWpaeU07uqz4X9jE5rty9YL3mlJnJjcrGyZmq7Hp6eEUCJDDIBNqoK1vWtYqiWLnr8cxMKsCkUisST+5R1o8fm1+uWMlU5dTbEKKOr5WzzWS2ClMti2ttBdl+0LcZ9OkQ1xY6Xji0Q2vjrNmo7NpzrN72qMkxL89b63BOOTS+RSvvhdx9J6vtJinUKNNaT6t0SMm1s0W6LeVZha9F1D8X756ZVsa3aPUyUG+Tzqn1fT0f1vKgqrr2LhqemfrX2rz1el1L94XpMbVNrbVZzfycU6Z3jLBe7p9sQk26QMAlZNjpX4vl0otxnD17Fk5Nqy9G+hgnCXRCQIyo0T46IciwJEACThHox/IqF3cj5Ssi0TCz2hmRXsjsTCOGHgQC/Wgfg8CNOi4PAk7Zx8B0kMVrv/HGG5fH22cqSYAESIAESIAEHCKQQ9yThq8QR/f6x72Q6RAORkMCJEACy5yA7Q7ypUuXFgXZm2++yRmyRSHPSAeBgFMjaoPAgjqSAAn0NwGWV/39fqjd4hKgfSwuf8be3wScso+B6SCL13XTTTf191ujdiRAAiRAAiRAAiRAAiRAAiRAAgNLwPFdrOUnz3bPYgaZBwmQgDkBMaLGgwRIgAQGgQDLq0F4S9RxsQjQPhaLPOMdBAJO2YftGeSLFy8uGr9Vq1YtWtyMmARIgARIgARIgARIgARIgARIYGkTGJgZ5LfeemtpvwmmjgQ6IODUiFoHKjIoCZAACagEWF4xI5BAcwK0j+Zs6EICTtnHgmaQxfJol8sFp8+cQaZhkAAJkAAJkAAJkAAJkAAJkAAJ9IqA7RlkMZM7PDyMxTjLUQOete9NyYEcRMEg8oH8k/c8a1zIgRxYTvZfOcnyinZJu2xul7QP2gfto7V9iLZdrw/bM8i9VojySYAESIAESIAESIAESIAESIAESGAxCNieQV4MJRknCZAACZAACZAACZAACZAACZAACfSaADvIvSZM+SRAAiRAAiRAAiRAAiRAAiRAAgNBgB3kgXhNVJIESIAESIAESIAESIAESIAESKDXBNhB7jVhyicBEiABEiABEiABEiABEiABEhgIAuwgD8RropIkQAIkQAIkQAIkQAIkQAIkQAK9JsAOcq8JUz4JkAAJkAAJkAAJkAAJkAAJkMBAEGAHeSBeE5UkARIgARIgARIgARIgARIgARLoNQF2kHtNmPJJgARIgARIgARIgARIgARIgAQGgsD/D2aSqHK/M3+/AAAAAElFTkSuQmCC" width="968" />

 

由于AAAR5912的冠字号,其exist状态为1,说明HBase表中此冠字号为存储状态,不能再次存储,即发现了疑似伪钞的冠字号;

2.5 取款

 

\

 

1)取款同样有随机生成功能,类似上面:

 

\

 

当然,这里随机生成的只是用户和银行而已;

2) 取款:取款根据取款金额进行获取:

 

\

 

取款流程如下:

1) 根据给定的取款冠字号个数num,随机查找冠字号(rowkey)对应的op_www:exist字段值为1的num*3条记录;

2) 使用HBase.checkAndPut进行更新,把op_www:exist字段值更新为0,并返回更新后的rowkey,即冠字号;

3) 如果在num*3条记录更新后,被更新的冠字号不足num条,则再次随机查找冠字号对应的op_www:exist字段值为1的记录,并更新,返回更新后的冠字号,直到返回的冠字号个数为num;

3. 总结

1) 基于冠字号查询系统基于已存在HBase的冠字号非伪钞,如果已存在冠字号包含伪钞,则存储和取钱功能都会有问题;

2) 原始数据(用户信息、冠字号交易信息),在一定程序上是有规律的,并且对于大数据来说,还是小数据,需要在较大数据集上测试;

3)用户账号相关信息(存储的钱总数等)并没有在该系统中体现,后续可以考虑;

4) 查询冠字号、存、取款功能在第一次点击的时候初始化时间较长,考虑弹窗显示;

5)查询冠字号、存、取款功能中的详细查询可以在定制点,比如可以只查询出某个列簇或列的数据即可;

上一篇:ElasticSearch(七)--请求体查询
下一篇:大数据架构的典型方法和方式
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站