data-generator標準數(shù)據(jù)生成器
數(shù)據(jù)生成器
如果你在從事大數(shù)據(jù)BI的工作,想對比一下MySQL、GreenPlum、Elasticsearch、Hive、Presto、Impala、Drill、HAWQ、Druid、Pinot、Kylin、ClickHouse等不同實現(xiàn)方案之間的表現(xiàn),那你就需要一份標準的數(shù)據(jù)進行測試,這個開源項目就是為了生成這樣的標準數(shù)據(jù)。
數(shù)據(jù)模型:src/main/resources/數(shù)據(jù)模型.png
一、編譯程序:
mvn assembly:assembly
二、在MySQL中創(chuàng)建一個數(shù)據(jù)庫,然后執(zhí)行 src/main/resources/model_ddl.sql 創(chuàng)建對應的表。
三、指定ES的經緯度類型:
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/contract/contract/_bulk' -d '
{ "index":{ "_id": 1} }
{"id":1}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/contract/_mapping/contract' -d '
{
"properties": {
"geo_location": {
"type": "geo_point"
}
}
}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/detail/detail/_bulk' -d '
{ "index":{ "_id": 1} }
{"id":1}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/detail/_mapping/detail' -d '
{
"properties": {
"geo_location": {
"type": "geo_point"
}
}
}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/area/area/_bulk' -d '
{ "index":{ "_id": 1} }
{"id":1}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/area/_mapping/area' -d '
{
"properties": {
"geo_location": {
"type": "geo_point"
}
}
}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/customer/customer/_bulk' -d '
{ "index":{ "_id": 1} }
{"id":1}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/customer/_mapping/customer' -d '
{
"properties": {
"geo_location": {
"type": "geo_point"
}
}
}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/sales_staff/sales_staff/_bulk' -d '
{ "index":{ "_id": 1} }
{"id":1}
'
curl -H "Content-Type: application/json" -XPUT 'http://192.168.252.193:9200/sales_staff/_mapping/sales_staff' -d '
{
"properties": {
"geo_location": {
"type": "geo_point"
}
}
}
'
四、在當前目錄下的config.txt文件中指定配置:
#新增數(shù)據(jù)是MySQL批量提交記錄數(shù)量 batchSize=1000 #訂單時間開始年份 startYear=2000 #訂單時間開始月份 startMonth=1 #訂單時間開始天數(shù) startDay=1 #客戶數(shù) customerCount=5000 #銷售數(shù) salesStaffCount=2000 #合同數(shù) contractCount=20000 #商品數(shù) itemCount=10000 #商品價格上限 priceLimit=1000 #合同最大明細數(shù) contractDetailLimit=100 #合同明細商品最大數(shù)量 itemQuantityLimit=100 #將生成的數(shù)據(jù)保存到哪個MySQL mysql.url=jdbc:mysql://192.168.252.193:3306/demo?useUnicode=true&characterEncoding=utf8 mysql.user=root mysql.password=root mysql.pageSize=10000 #將MySQL里面的數(shù)據(jù)查出來組裝成JSON文檔后索引到哪個ES es.host=192.168.252.193 es.port=9200 #ES批量提交數(shù)量 es.batchSize=1000 #可選值為file或者es #如果選擇file,則在當前目錄想生成相應的腳本文件,等程序執(zhí)行完畢后再執(zhí)行腳本文件將數(shù)據(jù)索引到ES #如果選擇es,則在數(shù)據(jù)生成完畢后直接在程序中把數(shù)據(jù)提交給ES進行索引 es.mode=es #是否異步多線程的方式進行ES索引 output.async=true #如果是異步多線程的方式進行ES索引,則需要幾個線程 output.async.thread.count=10 #如果ES索引中斷,再次索引的時候從哪一頁開始索引,0代表第一頁 output.start.page=0
五、運行程序:
all in one:
nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.Start &
或者
step by step:
1. 生成模擬數(shù)據(jù)并保存到mysql: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.generator.Generator & 2. 將mysql中的數(shù)據(jù)生成合同文檔并提交給ES: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.Contract & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x contract.sh nohup ./contract.sh & 3. 將mysql中的數(shù)據(jù)生成合同明細文檔并提交給ES: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.ContractDetail & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x detail.sh nohup ./detail.sh & 4. 將mysql中的數(shù)據(jù)生成區(qū)域文檔并提交給ES: nohup java -Xmx1g -Xms1g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.Area & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x area.sh nohup ./area.sh & 5. 將mysql中的數(shù)據(jù)生成商品文檔并提交給ES: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.Item & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x item.sh nohup ./item.sh & 6. 將mysql中的數(shù)據(jù)生成客戶文檔并提交給ES: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.Customer & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x customer.sh nohup ./customer.sh & 7. 將mysql中的數(shù)據(jù)生成銷售文檔并提交給ES: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.SalesStaff & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x sales_staff.sh nohup ./sales_staff.sh & 8. 將mysql中的數(shù)據(jù)生成品牌文檔并提交給ES: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.Brand & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x brand.sh nohup ./brand.sh & 9. 將mysql中的數(shù)據(jù)生成分類文檔并提交給ES: nohup java -Xmx2g -Xms2g -cp data-generator-1.0-jar-with-dependencies.jar org.apdplat.data.generator.mysql2es.Category & 如果es.mode=es則不需要執(zhí)行如下兩步, 只有es.mode=file才需要執(zhí)行 chmod +x category.sh nohup ./category.sh &
六、在hive中執(zhí)行 src/main/resources/hive_ddl.sql 創(chuàng)建表。
七、執(zhí)行 src/main/resources/sqoop.txt 中的命令將MySQL中的數(shù)據(jù)導入Hive。
八、在Kylin中導入Hive的表、創(chuàng)建Model和Cube、構建Cube。
九、在Kibana中創(chuàng)建索引模式,創(chuàng)建圖表。
十、對MySQL、Kibana+ES、Kylin進行對比如下統(tǒng)計:
SELECT item. NAME , sum(contract_detail.price) AS total_price , sum(contract_detail.item_quantity) AS total_quantity FROM contract_detail LEFT JOIN item ON contract_detail.item_id = item.id GROUP BY item. NAME ORDER BY total_quantity DESC Kylin耗時0.5秒,MySQL59秒,ES5秒。
評論
圖片
表情
