经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Hadoop » 查看文章
KUDU数据导入尝试一:TextFile数据导入Hive,Hive数据导入KUDU
来源:cnblogs  作者:孤城唯一客  时间:2019/7/19 8:36:08  对本文有异议

背景

  1. SQLSERVER数据库中单表数据几十亿,分区方案也已经无法查询出结果。故:采用导出功能,导出数据到Text文本(文本>40G)中。
  2. 因上原因,所以本次的实验样本为:【数据量:61w条,文本大小:74M】

    选择DataX原因

  3. 试图维持统一的异构数据源同步方案。(其实行不通)
  4. 试图进入Hive时,已经是压缩ORC格式,降低存储大小,提高列式查询效率,以便后续查询HIVE数据导入KUDU时提高效率(其实行不通)

1. 建HIVE表

进入HIVE,必须和TextFile中的字段类型保持一致

  1. create table event_hive_3(
  2. `#auto_id` string
  3. ,`#product_id` int
  4. ,`#event_name` string
  5. ,`#part_date` int
  6. ,`#server_id` int
  7. ,`#account_id` bigint
  8. ,`#user_id` bigint
  9. ,part_time STRING
  10. ,GetItemID bigint
  11. ,ConsumeMoneyNum bigint
  12. ,Price bigint
  13. ,GetItemCnt bigint
  14. ,TaskState bigint
  15. ,TaskType bigint
  16. ,BattleLev bigint
  17. ,Level bigint
  18. ,ItemID bigint
  19. ,ItemCnt bigint
  20. ,MoneyNum bigint
  21. ,MoneyType bigint
  22. ,VIP bigint
  23. ,LogID bigint
  24. )
  25. ROW FORMAT DELIMITED
  26. FIELDS TERMINATED BY '\t'
  27. STORED AS ORC;

2. 建Kudu表

这个过程,自行发挥~

  1. #Idea中,执行单元测试【EventAnalysisRepositoryTest.createTable()】即可
  2. public void createTable() throws Exception {
  3. repository.getClient();
  4. repository.createTable(Event_Sjmy.class,true);
  5. }

3. 建立Impala表

进入Impala-shell 或者hue;

  1. use sd_dev_sdk_mobile;
  2. CREATE EXTERNAL TABLE `event_sjmy_datax` STORED AS KUDU
  3. TBLPROPERTIES(
  4. 'kudu.table_name' = 'event_sjmy_datax',
  5. 'kudu.master_addresses' = 'sdmain:7051')

4. 编辑Datax任务

不直接load进hive的目的是为了进行一步文件压缩,降低内存占用,转为列式存储。

  1. # 编辑一个任务
  2. vi /home/jobs/textToHdfs.json;
  3. {
  4. "setting": {},
  5. "job": {
  6. "setting": {
  7. "speed": {
  8. "channel": 2
  9. }
  10. },
  11. "content": [
  12. {
  13. "reader": {
  14. "name": "txtfilereader",
  15. "parameter": {
  16. "path": ["/home/data"],
  17. "encoding": "GB2312",
  18. "column": [
  19. {
  20. "index": 0,
  21. "type": "string"
  22. },
  23. {
  24. "index": 1,
  25. "type": "int"
  26. },
  27. {
  28. "index": 2,
  29. "type": "string"
  30. },
  31. {
  32. "index": 3,
  33. "type": "int"
  34. },
  35. {
  36. "index": 4,
  37. "type": "int"
  38. },
  39. {
  40. "index": 5,
  41. "type": "long"
  42. },
  43. {
  44. "index": 6,
  45. "type": "long"
  46. },
  47. {
  48. "index": 7,
  49. "type": "string"
  50. },
  51. {
  52. "index": 8,
  53. "type": "long"
  54. },
  55. {
  56. "index": 9,
  57. "type": "long"
  58. },
  59. {
  60. "index": 10,
  61. "type": "long"
  62. },{
  63. "index": 11,
  64. "type": "long"
  65. },{
  66. "index": 12,
  67. "type": "long"
  68. },
  69. {
  70. "index": 13,
  71. "type": "long"
  72. },
  73. {
  74. "index": 14,
  75. "type": "long"
  76. },
  77. {
  78. "index": 15,
  79. "type": "long"
  80. },
  81. {
  82. "index": 17,
  83. "type": "long"
  84. },
  85. {
  86. "index": 18,
  87. "type": "long"
  88. },
  89. {
  90. "index": 19,
  91. "type": "long"
  92. },
  93. {
  94. "index": 20,
  95. "type": "long"
  96. },
  97. {
  98. "index": 21,
  99. "type": "long"
  100. }
  101. ],
  102. "fieldDelimiter": "/t"
  103. }
  104. },
  105. "writer": {
  106. "name": "hdfswriter",
  107. "parameter": {
  108. "column": [{"name":"#auto_id","type":" STRING"},{"name":"#product_id","type":" int"},{"name":"#event_name","type":" STRING"},{"name":"#part_date","type":"int"},{"name":"#server_id","type":"int"},{"name":"#account_id","type":"bigint"},{"name":"#user_id","type":" bigint"},{"name":"part_time","type":" STRING"},{"name":"GetItemID","type":" bigint"},{"name":"ConsumeMoneyNum","type":"bigint"},{"name":"Price ","type":"bigint"},{"name":"GetItemCnt ","type":"bigint"},{"name":"TaskState ","type":"bigint"},{"name":"TaskType ","type":"bigint"},{"name":"BattleLev ","type":"bigint"},{"name":"Level","type":"bigint"},{"name":"ItemID ","type":"bigint"},{"name":"ItemCnt ","type":"bigint"},{"name":"MoneyNum ","type":"bigint"},{"name":"MoneyType ","type":"bigint"},{"name":"VIP ","type":"bigint"},{"name":"LogID ","type":"bigint"}],
  109. "compress": "NONE",
  110. "defaultFS": "hdfs://sdmain:8020",
  111. "fieldDelimiter": "\t",
  112. "fileName": "event_hive_3",
  113. "fileType": "orc",
  114. "path": "/user/hive/warehouse/dataxtest.db/event_hive_3",
  115. "writeMode": "append"
  116. }
  117. }
  118. }
  119. ]
  120. }
  121. }

4.1 执行datax任务

注意哦,数据源文件,先放在/home/data下哦。数据源文件必须是个数据二维表。

  1. #textfile中数据例子如下:
  2. {432297B4-CA5F-4116-901E-E19DF3170880} 701 获得筹码 201906 2 4974481 1344825 00:01:06 0 0 0 0 0 0 0 0 0 0 100 2 3 31640
  3. {CAAF09C6-037D-43B9-901F-4CB5918FB774} 701 获得筹码 201906 2 5605253 1392330 00:02:25 0 0 0 0 0 0 0 0 0 0 390 2 10 33865
  4. cd $DATAX_HOME/bin
  5. python datax.py /home/job/textToHdfs.json

效果图:

使用Kudu从HIVE读取写入到Kudu表中

进入shell

  1. #进入shell:
  2. impala-shell;
  3. #选中库--如果表名有指定库名,可省略
  4. use sd_dev_sdk_mobile;
  5. 输入SQL:
  6. INSERT INTO sd_dev_sdk_mobile.event_sjmy_datax
  7. SELECT `#auto_id`,`#event_name`,`#part_date`,`#product_id`,`#server_id`,`#account_id`,`#user_id`,part_time,GetItemID,ConsumeMoneyNum,Price,GetItemCnt,TaskState,TaskType,BattleLev,Level,ItemID,ItemCnt,MoneyNum,MoneyType,VIP,LogID
  8. FROM event_hive_3 ;

效果图:

看看这可怜的结果

这速度难以接受,我选择放弃。

打脸环节-原因分析:
  1. DataX读取TextFile到HIVE中的速度慢: DataX对TextFile的读取是单线程的,(2.0版本后可能会提供多线程ReaderTextFile的能力),这直接浪费了集群能力和12核的CPU。且,文件还没法手动切割任务分节点执行。
  2. Hive到KUDU的数据慢:insert into xxx select * 这个【*】一定要注意,如果读取所有列,那列式查询的优势就没多少了,所以,转ORC多此一举。
  3. Impala读取HIVE数据时,内存消耗大!
    唯一的好处: 降低硬盘资源的消耗(74M文件写到HDFS,压缩后只有15M),但是!!!这有何用?我要的是导入速度!如果只是为了压缩,应该Load进Hive,然后启用Hive的Insert到ORC新表,充分利用集群资源!

代码如下

  1. //1. 数据加载到textfile表中
  2. load data inpath '/home/data/event-19-201906.txt' into table event_hive_3normal;
  3. //2. 数据查询出来写入到ORC表中。
  4. insert into event_hive_3orc
  5. select * from event_hive_3normal

实验失败~

优化思路:1.充分使用集群的CPU资源
2.避免大批量数据查询写入
优化方案:掏出我的老家伙,单Flume读取本地数据文件sink到Kafka, 集群中多Flume消费KAFKA集群,sink到Kudu !下午见!

原文链接:http://www.cnblogs.com/Imaigne/p/11206875.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号