保捱科技网
您的当前位置:首页Spark:DataFrame批量导入Hbase的两种方式(HFile、Hive)

Spark:DataFrame批量导入Hbase的两种方式(HFile、Hive)

来源:保捱科技网
Spark:DataFrame批量导⼊Hbase的两种⽅式(HFile、Hive)

Spark处理后的结果数据resultDataFrame可以有多种存储介质,⽐较常见是存储为⽂件、关系型数据库,⾮关系⾏数据库。各种⽅式有各⾃的特点,对于海量数据⽽⾔,如果想要达到实时查询的⽬的,使⽤HBase作为存储的介质是⾮常不错的选择。

现需求是:Spark对Hive、mysql数据源进⾏处理,然后将resultDataFrame写⼊HBase,但是HBase和Spark不在⽤⼀个环境,即结果需要通过⽹络IO进⾏⼆次操作。所以此篇⽂章会采取某些⼿段来实现上述要求。将DataFrame写⼊Hbase的两种⽅式:通过关联Hive-HBase将结果数据导⼊HBase通过⽣成HFile导⼊HBase

通过关联Hive-HBase将结果数据导⼊HBase

通过Hive-HBase将结果导⼊HBase也分两种情况1.Hive为管理表

1.1 创建的hive管理表关联HBase

1 drop table table_hive_mange; 2 create table table_hive_mange 3 (key String, 4 dict_id String, 5 city_id String, 6 city_name String, 7 city_code String, 8 group_id String, 9 group_name String, 10 area_code String, 11 bureau_id String, 12 sort String,

13 bureau_name String) 14 row format delimited 15 fields terminated by '|'

16 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 17 WITH SERDEPROPERTIES(\"hbase.columns.mapping\" = \":key, 18 info:dict_id, 19 info:city_id, 20 info:city_name, 21 info:city_code, 22 info:group_id, 23 info:group_name, 24 info:area_code,

25 info:bureau_id, info:sort, 26 info:bureau_name\")

27 TBLPROPERTIES(\"hbase.table.name\" = \"table_hive_mange\"); 28

29 hive> drop table table_hive_mange; 30 OK

31 Time taken: 1.554 seconds

32 hive> create table table_hive_mange 33 > (key String, 34 > dict_id String, 35 > city_id String, 36 > city_name String, 37 > city_code String, 38 > group_id String, 39 > group_name String, 40 > area_code String, 41 > bureau_id String, 42 > sort String,

43 > bureau_name String) 44 > row format delimited 45 > fields terminated by '|'

46 > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 47 > WITH SERDEPROPERTIES(\"hbase.columns.mapping\" = \":key, 48 > info:dict_id, 49 > info:city_id, 50 > info:city_name, 51 > info:city_code, 52 > info:group_id, 53 > info:group_name, 54 > info:area_code,

55 > info:bureau_id, info:sort, 56 > info:bureau_name\")

57 > TBLPROPERTIES(\"hbase.table.name\" = \"table_hive_mange\"); 58 OK

59 Time taken: 6.884 seconds 60

61 hive> desc formatted table_hive_mange; 62 OK

63 # col_name data_type comment

65 key string from deserializer 66 dict_id string from deserializer 67 city_id string from deserializer 68 city_name string from deserializer 69 city_code string from deserializer 70 group_id string from deserializer 71 group_name string from deserializer 72 area_code string from deserializer 73 bureau_id string from deserializer 74 sort string from deserializer

75 bureau_name string from deserializer 76

77 # Detailed Table Information 78 Database: default 79 Owner: hdfs

80 CreateTime: Tue Oct 16 16:23:22 CST 2018 81 LastAccessTime: UNKNOWN 82 Protect Mode: None 83 Retention: 0

84 Location: hdfs://ns1/user/hive/warehouse/table_hive_mange 85 Table Type: MANAGED_TABLE 86 Table Parameters:

87 hbase.table.name table_hive_mange

88 storage_handler org.apache.hadoop.hive.hbase.HBaseStorageHandler transient_lastDdlTime 1539678202 90

91 # Storage Information

92 SerDe Library: org.apache.hadoop.hive.hbase.HBaseSerDe 93 InputFormat: null 94 OutputFormat: null

95 Compressed: No 96 Num Buckets: -1 97 Bucket Columns: [] 98 Sort Columns: [] 99 Storage Desc Params:

100 field.delim |

101 hbase.columns.mapping :key,\\ninfo:dict_id,\\ninfo:city_id,\\ninfo:city_name,\\ninfo:city_code,\\ninfo:group_id,\\ninfo:group_name,\\ninfo:area_code,\\ninfo:bureau_id, info:sort,\\ninfo:bureau_name102 serialization.format |

103 Time taken: 2.098 seconds, Fetched: 40 row(s)104

105 //此时HBase表已经⽣成

106 hbase(main):001:0> desc 'table_hive_mange'

107 Table table_hive_mange is ENABLED 108 table_hive_mange

109 COLUMN FAMILIES DESCRIPTION

110 {NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => 111 '65536', REPLICATION_SCOPE => '0'} 112 1 row(s) in 0.3910 seconds113

114 hbase(main):002:0>

1.2 创建普通的hive管理表

1 drop table table_hive_mange1; 2 create table table_hive_mange1 3 (key String, 4 dict_id String, 5 city_id String, 6 city_name String, 7 city_code String, 8 group_id String, 9 group_name String,10 area_code String,11 bureau_id String,12 sort String,

13 bureau_name String)14 row format delimited15 fields terminated by '|'16 STORED AS TEXTFILE;17

18 hive> drop table table_hive_mange1;19 OK

20 Time taken: 0.027 seconds

21 hive> create table table_hive_mange122 > (key String,23 > dict_id String,24 > city_id String,25 > city_name String,26 > city_code String,27 > group_id String,28 > group_name String,29 > area_code String,30 > bureau_id String,31 > sort String,

32 > bureau_name String)33 > row format delimited34 > fields terminated by '|'35 > STORED AS TEXTFILE;36 OK

37 Time taken: 0.188 seconds38 hive> desc formatted 39 > table_hive_mange1;40 OK

41 # col_name data_type comment 42

43 key string 44 dict_id string 45 city_id string 46 city_name string 47 city_code string 48 group_id string 49 group_name string 50 area_code string 51 bureau_id string 52 sort string

53 bureau_name string 54

55 # Detailed Table Information 56 Database: default 57 Owner: hdfs

58 CreateTime: Tue Oct 16 16:24:41 CST 2018 59 LastAccessTime: UNKNOWN 60 Protect Mode: None 61 Retention: 0

62 Location: hdfs://ns1/user/hive/warehouse/table_hive_mange1 63 Table Type: MANAGED_TABLE Table Parameters:

65 transient_lastDdlTime 1539678281 66

67 # Storage Information

68 SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 69 InputFormat: org.apache.hadoop.mapred.TextInputFormat

70 OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 71 Compressed: No 72 Num Buckets: -1 73 Bucket Columns: [] 74 Sort Columns: [] 75 Storage Desc Params:

76 field.delim | 77 serialization.format |

78 Time taken: 4.3 seconds, Fetched: 37 row(s)

1.3 准备⼀份数据

1 [hdfs@iptve2e03 tmp_lillcol]$ hadoop fs -cat hdfs://ns1/user/hive/warehouse//hive-hbase

2 736_9铜锣湾1|1|73629|铜锣湾1|啥⼦字段|110|艾欧尼亚⼤区|weq|76D5A3D3EA4|1|汉东省东中猴姑⽶西翻公司 3 475_铜锣湾2|13|4750|铜锣湾2|啥⼦字段|110|艾欧尼亚⼤区|weq|5F4E9不知C5|1|汉东省江中猴姑⽶西翻公司 4 765_铜锣湾3|3|7650|铜锣湾3|啥⼦字段|110|艾欧尼亚⼤区|weq|59B4B不知92|1|汉东省中中猴姑⽶西翻公司 5 667_铜锣湾4|14|6672|铜锣湾4|啥⼦字段|110|艾欧尼亚⼤区|weq|CF19F不知名B|21|汉东省阳中猴姑⽶西翻公司 6 758_铜锣湾5|4|7586|铜锣湾5|啥⼦字段|110|⿊莓尼亚⼤区|weq|507EB不知78|1|汉东省珠中猴姑⽶西翻公司 7 796_铜锣湾6|15|7966|铜锣湾6|啥⼦字段|110|艾欧尼亚⼤区|weq|9C9C0不知名4|21|汉东省云中猴姑⽶西翻公司 8 754_8铜锣湾7|5|75468|铜锣湾7|啥⼦字段|110|艾欧尼亚⼤区|weq|5B736不知名F|11|汉东省潮中猴姑⽶西翻公司 9 706_铜锣湾8|16|7062|铜锣湾8|啥⼦字段|110|艾欧尼亚⼤区|weq|51A88不知名8|11|汉东省河中猴姑⽶西翻公司10 754_铜锣湾9|6|7547|铜锣湾9|啥⼦字段|110|艾欧尼亚⼤区|weq|EEA9F不知59|1|汉东省佛中猴姑⽶西翻公司11 626_铜锣湾0|17|6263|铜锣湾0|啥⼦字段|110|瑞本⼤区|weq|9FF783FEE9|11|汉东省揭中猴姑⽶西翻公司12 754_铜锣湾-|7|7542|铜锣湾-|啥⼦字段|110|艾欧尼亚⼤区|weq|246A1不知FC|1|汉东省惠中猴姑⽶西翻公司

13 755_铜锣湾12|18|7553|铜锣湾12|啥⼦字段|110|艾欧尼亚⼤区|weq|E9BE9不知名9|11|汉东省梅中猴姑⽶西翻公司14 661_铜锣湾12|8|6618|铜锣湾12|啥⼦字段|110|艾欧尼亚⼤区|weq|5D0A9不知名E|11|汉东省茂中猴姑⽶西翻公司15 765_铜锣湾3|19|7651|铜锣湾3|啥⼦字段|110|德玛西亚尼亚⼤区|weq|BD6F不6379|11|汉东省韶中猴姑⽶西翻公司16 754_铜锣湾32|9|7544|铜锣湾32|啥⼦字段|110|艾欧尼亚⼤区|weq|18D7A不知1E|1|汉东省汕中猴姑⽶西翻公司17 375_铜锣湾234|20|3755|铜锣湾234|啥⼦字段|110|艾欧尼亚⼤区|weq|31E2F不知82|1|汉东省深中猴姑⽶西翻公司

18 626_0铜锣湾45|10|62630|铜锣湾45|啥⼦字段|110|艾欧尼亚⼤区|weq|1BA07不知名B|11|汉东省汕中猴姑⽶西翻公司19 458铜锣湾99|21|458|铜锣湾99|啥⼦字段|110|艾欧尼亚⼤区|weq|3C09D不知名B|11|汉东省肇中猴姑⽶西翻公司20 715铜锣湾12|11|715|铜锣湾12|啥⼦字段|110|艾欧尼亚⼤区|weq|3A49A不知名7|11|汉东省湛中猴姑⽶西翻公司21 723_铜锣湾3|2|7231|铜锣湾3|啥⼦字段|110|⼤区|weq|F8E9FCB7B1|11|汉东省清中猴姑⽶西翻公司22 221_铜锣湾2|12|2210|铜锣湾2|啥⼦字段|110|韩国⼤区|weq|13F1D054|1|汉东省⼴中猴姑⽶西翻公司

1.4 向 table_hive_mange1 中添加数据

1 load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_mange1;

2 hive> load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_mange1;3 Loading data to table default.table_hive_mange1

4 Table default.table_hive_mange1 stats: [numFiles=1, totalSize=1947]5 OK

6 Time taken: 0.402 seconds7 hive>

1.5 查看 table_hive_mange1 中的数据

1 hive> select * from table_hive_mange1; 2 OK

3 736_9铜锣湾1 1 73629 铜锣湾1 啥⼦字段 110 艾欧尼亚⼤区 weq 76D5A3D3EA4 1 汉东省东中猴姑⽶西翻公司 4 475_铜锣湾2 13 4750 铜锣湾2 啥⼦字段 110 艾欧尼亚⼤区 weq 5F4E9不知C5 1 汉东省江中猴姑⽶西翻公司 5 765_铜锣湾3 3 7650 铜锣湾3 啥⼦字段 110 艾欧尼亚⼤区 weq 59B4B不知92 1 汉东省中中猴姑⽶西翻公司 6 667_铜锣湾4 14 6672 铜锣湾4 啥⼦字段 110 艾欧尼亚⼤区 weq CF19F不知名B 21 汉东省阳中猴姑⽶西翻公司 7 758_铜锣湾5 4 7586 铜锣湾5 啥⼦字段 110 ⿊莓尼亚⼤区 weq 507EB不知78 1 汉东省珠中猴姑⽶西翻公司 8 796_铜锣湾6 15 7966 铜锣湾6 啥⼦字段 110 艾欧尼亚⼤区 weq 9C9C0不知名4 21 汉东省云中猴姑⽶西翻公司 9 754_8铜锣湾7 5 75468 铜锣湾7 啥⼦字段 110 艾欧尼亚⼤区 weq 5B736不知名F 11 汉东省潮中猴姑⽶西翻公司10 706_铜锣湾8 16 7062 铜锣湾8 啥⼦字段 110 艾欧尼亚⼤区 weq 51A88不知名8 11 汉东省河中猴姑⽶西翻公司11 754_铜锣湾9 6 7547 铜锣湾9 啥⼦字段 110 艾欧尼亚⼤区 weq EEA9F不知59 1 汉东省佛中猴姑⽶西翻公司12 626_铜锣湾0 17 6263 铜锣湾0 啥⼦字段 110 瑞本⼤区 weq 9FF783FEE9 11 汉东省揭中猴姑⽶西翻公司13 754_铜锣湾- 7 7542 铜锣湾- 啥⼦字段 110 艾欧尼亚⼤区 weq 246A1不知FC 1 汉东省惠中猴姑⽶西翻公司

14 755_铜锣湾12 18 7553 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq E9BE9不知名9 11 汉东省梅中猴姑⽶西翻公司15 661_铜锣湾12 8 6618 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 5D0A9不知名E 11 汉东省茂中猴姑⽶西翻公司16 765_铜锣湾3 19 7651 铜锣湾3 啥⼦字段 110 德玛西亚尼亚⼤区 weq BD6F不6379 11 汉东省韶中猴姑⽶西翻公司17 754_铜锣湾32 9 7544 铜锣湾32 啥⼦字段 110 艾欧尼亚⼤区 weq 18D7A不知1E 1 汉东省汕中猴姑⽶西翻公司18 375_铜锣湾234 20 3755 铜锣湾234 啥⼦字段 110 艾欧尼亚⼤区 weq 31E2F不知82 1 汉东省深中猴姑⽶西翻公司19 626_0铜锣湾45 10 62630 铜锣湾45 啥⼦字段 110 艾欧尼亚⼤区 weq 1BA07不知名B 11 汉东省汕中猴姑⽶西翻公司20 458铜锣湾99 21 458 铜锣湾99 啥⼦字段 110 艾欧尼亚⼤区 weq 3C09D不知名B 11 汉东省肇中猴姑⽶西翻公司21 715铜锣湾12 11 715 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 3A49A不知名7 11 汉东省湛中猴姑⽶西翻公司22 723_铜锣湾3 2 7231 铜锣湾3 啥⼦字段 110 ⼤区 weq F8E9FCB7B1 11 汉东省清中猴姑⽶西翻公司23 221_铜锣湾2 12 2210 铜锣湾2 啥⼦字段 110 韩国⼤区 weq 13F1D054 1 汉东省⼴中猴姑⽶西翻公司24 Time taken: 0.035 seconds, Fetched: 21 row(s)25 hive>

1.6 将 table_hive_mange1 的数据插⼊ table_hive_mange

1 insert into table table_hive_mange select * from table_hive_mange1; 2

3 hive> insert into table table_hive_mange select * from table_hive_mange1; 4 Query ID = hdfs_20181016165252_4e5b605f-0351-4bd0-aa2e-0d9829694f6d 5 Total jobs = 1

6 Launching Job 1 out of 1

7 Number of reduce tasks is set to 0 since there s no reduce operator

8 Starting Job = job_1519375199907_258533, Tracking URL = http://iptve2e01:8088/proxy/application_1519375199907_258533/ 9 Kill Command = /opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/hadoop/bin/hadoop job -kill job_1519375199907_25853310 Hadoop job information for Stage-0: number of mappers: 1; number of reducers: 011 2018-10-16 16:53:46,259 Stage-0 map = 0%, reduce = 0%

12 2018-10-16 16:54:06,773 Stage-0 map = 100%, reduce = 0%, Cumulative CPU 6.65 sec13 MapReduce Total cumulative CPU time: 6 seconds 650 msec14 Ended Job = job_1519375199907_25853315 MapReduce Jobs Launched:

16 Stage-Stage-0: Map: 1 Cumulative CPU: 6.65 sec HDFS Read: 7381 HDFS Write: 0 SUCCESS17 Total MapReduce CPU Time Spent: 6 seconds 650 msec18 OK

19 Time taken: .331 seconds

1.7 查看table_hive_mange 中的数据

1 hive> select * from table_hive_mange 中的数据; 2 OK

3 221_铜锣湾2 12 2210 铜锣湾2 啥⼦字段 110 韩国⼤区 weq 13F1D054 1 汉东省⼴中猴姑⽶西翻公司

4 375_铜锣湾234 20 3755 铜锣湾234 啥⼦字段 110 艾欧尼亚⼤区 weq 31E2F不知82 1 汉东省深中猴姑⽶西翻公司 5 458铜锣湾99 21 458 铜锣湾99 啥⼦字段 110 艾欧尼亚⼤区 weq 3C09D不知名B 11 汉东省肇中猴姑⽶西翻公司 6 475_铜锣湾2 13 4750 铜锣湾2 啥⼦字段 110 艾欧尼亚⼤区 weq 5F4E9不知C5 1 汉东省江中猴姑⽶西翻公司

7 626_0铜锣湾45 10 62630 铜锣湾45 啥⼦字段 110 艾欧尼亚⼤区 weq 1BA07不知名B 11 汉东省汕中猴姑⽶西翻公司 8 626_铜锣湾0 17 6263 铜锣湾0 啥⼦字段 110 瑞本⼤区 weq 9FF783FEE9 11 汉东省揭中猴姑⽶西翻公司

9 661_铜锣湾12 8 6618 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 5D0A9不知名E 11 汉东省茂中猴姑⽶西翻公司10 667_铜锣湾4 14 6672 铜锣湾4 啥⼦字段 110 艾欧尼亚⼤区 weq CF19F不知名B 21 汉东省阳中猴姑⽶西翻公司11 706_铜锣湾8 16 7062 铜锣湾8 啥⼦字段 110 艾欧尼亚⼤区 weq 51A88不知名8 11 汉东省河中猴姑⽶西翻公司

12 715铜锣湾12 11 715 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 3A49A不知名7 11 汉东省湛中猴姑⽶西翻公司13 723_铜锣湾3 2 7231 铜锣湾3 啥⼦字段 110 ⼤区 weq F8E9FCB7B1 11 汉东省清中猴姑⽶西翻公司14 736_9铜锣湾1 1 73629 铜锣湾1 啥⼦字段 110 艾欧尼亚⼤区 weq 76D5A3D3EA4 1 汉东省东中猴姑⽶西翻公司15 754_8铜锣湾7 5 75468 铜锣湾7 啥⼦字段 110 艾欧尼亚⼤区 weq 5B736不知名F 11 汉东省潮中猴姑⽶西翻公司16 754_铜锣湾- 7 7542 铜锣湾- 啥⼦字段 110 艾欧尼亚⼤区 weq 246A1不知FC 1 汉东省惠中猴姑⽶西翻公司

17 754_铜锣湾32 9 7544 铜锣湾32 啥⼦字段 110 艾欧尼亚⼤区 weq 18D7A不知1E 1 汉东省汕中猴姑⽶西翻公司18 754_铜锣湾9 6 7547 铜锣湾9 啥⼦字段 110 艾欧尼亚⼤区 weq EEA9F不知59 1 汉东省佛中猴姑⽶西翻公司

19 755_铜锣湾12 18 7553 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq E9BE9不知名9 11 汉东省梅中猴姑⽶西翻公司20 758_铜锣湾5 4 7586 铜锣湾5 啥⼦字段 110 ⿊莓尼亚⼤区 weq 507EB不知78 1 汉东省珠中猴姑⽶西翻公司

21 765_铜锣湾3 19 7651 铜锣湾3 啥⼦字段 110 德玛西亚尼亚⼤区 weq BD6F不6379 11 汉东省韶中猴姑⽶西翻公司22 796_铜锣湾6 15 7966 铜锣湾6 啥⼦字段 110 艾欧尼亚⼤区 weq 9C9C0不知名4 21 汉东省云中猴姑⽶西翻公司23 Time taken: 0.29 seconds, Fetched: 20 row(s)24 hive>

1.8 查看HBase中 table_hive_mange 的数据

1 hbase(main):008:0> scan 'table_hive_mange',{LIMIT=>2}

2 ROW COLUMN+CELL

3 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:area_code, timestamp=1539680045751, value=weq 4 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:bureau_id, timestamp=1539680045751, value=13F1D054

5 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:bureau_name, timestamp=1539680045751, value=\\xE6\\xB1\\x\\xE4\\xB8\\x9C\\xE7\\x9C\\x81\\xE5\\xB9\\xBF\\xE4\\xB8\\xAD\\xE7\\x8C\\xB4\\xE5\\xA7\\x91\\xE7\\xB1\\xB3\\xE8\\ 6 \\xE5\\x85\\xAC\\xE5\\x8F\\xB8

7 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_code, timestamp=1539680045751, value=\\xE5\\x95\\xA5\\xE5\\xAD\\x90\\xE5\\xAD\\x97\\xE6\\xAE\\xB5 8 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_id, timestamp=1539680045751, value=2210

9 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_name, timestamp=1539680045751, value=\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 10 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:dict_id, timestamp=1539680045751, value=12 11 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:group_id, timestamp=1539680045751, value=110

12 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:group_name, timestamp=1539680045751, value=\\xE9\\x9F\\xA9\\xE5\\x9B\\xBD\\xE5\\xA4\\xA7\\xE5\\x8C\\xBA 13 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:sort, timestamp=1539680045751, value=1

14 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:area_code, timestamp=1539680045751, value=weq

15 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:bureau_id, timestamp=1539680045751, value=31E2F\\xE4\\xB8\\x8D\\xE7\\x9F\\xA582

16 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:bureau_name, timestamp=1539680045751, value=\\xE6\\xB1\\x\\xE4\\xB8\\x9C\\xE7\\x9C\\x81\\xE6\\xB7\\xB1\\xE4\\xB8\\xAD\\xE7\\x8C\\xB4\\xE5\\xA7\\x91\\xE7\\xB1\\xB3\\xE817 \\xE5\\x85\\xAC\\xE5\\x8F\\xB8

18 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_code, timestamp=1539680045751, value=\\xE5\\x95\\xA5\\xE5\\xAD\\x90\\xE5\\xAD\\x97\\xE6\\xAE\\xB5 19 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_id, timestamp=1539680045751, value=3755

20 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_name, timestamp=1539680045751, value=\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 21 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:dict_id, timestamp=1539680045751, value=20 22 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:group_id, timestamp=1539680045751, value=110

23 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:group_name, timestamp=1539680045751, value=\\xE8\\x\\xBE\\xE6\\xAC\\xA7\\xE5\\xB0\\xBC\\xE4\\xBA\\x9A\\xE5\\xA4\\xA7\\xE5\\x8C\\xBA 24 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:sort, timestamp=1539680045751, value=1 25 2 row(s) in 0.0140 seconds

26

27 hbase(main):009:0>

1.9 删除表

1 先删除hbase(disabled->drop) 2

3 hbase(main):009:0> disable 'table_hive_mange' 4 0 row(s) in 2.2700 seconds 5

6 hbase(main):010:0> drop 'table_hive_mange' 7 0 row(s) in 1.2290 seconds 8

9 hive> show tables;10 OK

11 frt_user_auth_log112 table_hive_mange13 table_hive_mange1

14 Time taken: 0.116 seconds, Fetched: 8 row(s)

15 hive> select * from table_hive_mange;16 OK

17 Failed with exception java.io.IOException:org.apache.hadoop.hbase.TableNotFoundException: table_hive_mange18 Time taken: 0.245 seconds

19 hive> select * from table_hive_mange;20 OK

21 Failed with exception java.io.IOException:org.apache.hadoop.hbase.TableNotFoundException: table_hive_mange22 Time taken: 0.148 seconds

23 hive> show tables;24 OK

25 table_hive_mange26 table_hive_mange1

27 Time taken: 0.01 seconds, Fetched: 8 row(s)

28 hive> select * from table_hive_mange;29 OK

30 Failed with exception java.io.IOException:org.apache.hadoop.hbase.TableNotFoundException: table_hive_mange31 Time taken: 0.09 seconds

32 hive> drop table table_hive_mange;

33 FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:org.apache.hadoop.hbase.TableNotFoundException: table_hive_mange34 at org.apache.hadoop.hbase.client.HBaseAdmin.checkTableExistence(HBaseAdmin.java:1466)35 at org.apache.hadoop.hbase.client.HBaseAdmin.isTableEnabled(HBaseAdmin.java:1477)36 at org.apache.hadoop.hbase.client.HBaseAdmin.isTableEnabled(HBaseAdmin.java:1486)37 ...38 )

39 hive> show tables;40 OK

41 table_hive_mange1

42 Time taken: 0.009 seconds, Fetched: 7 row(s)43

44 //先删除Hive表

45 hive> drop table table_hive_mange;46 OK

47 Time taken: 6.604 seconds48

49 hbase(main):032:0> scan 'table_hive_mange',{LIMIT=>2}

50 ROW COLUMN+CELL 51

52 ERROR: Unknown table table_hive_mange!53

54 hbase(main):033:0> list

2.Hive为外部表

2.1 创建 Hbase 表 table_hive_xternal

1 create 'table_hive_xternal','info'2

3 hbase(main):012:0> create 'table_hive_xternal','info'4 0 row(s) in 1.2450 seconds5

6 => Hbase::Table - table_hive_xternal7 hbase(main):013:0>

2.2 建⽴外部表(hive),关联存在hbase表

1 drop table table_hive_xternal;

2 create external table table_hive_xternal 3 (key String, 4 dict_id String, 5 city_id String, 6 city_name String, 7 city_code String, 8 group_id String, 9 group_name String,10 area_code String,11 bureau_id String,12 sort String,

13 bureau_name String)14 row format delimited15 fields terminated by '|'

16 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'17 WITH SERDEPROPERTIES(\"hbase.columns.mapping\" = \":key,18 info:dict_id,19 info:city_id,20 info:city_name,21 info:city_code,22 info:group_id,23 info:group_name,24 info:area_code,25 info:bureau_id,26 info:sort,

27 info:bureau_name\")

28 TBLPROPERTIES(\"hbase.table.name\" = \"table_hive_xternal\"); 1 hive> create external table table_hive_xternal 2 > (key String, 3 > dict_id String, 4 > city_id String, 5 > city_name String, 6 > city_code String, 7 > group_id String, 8 > group_name String, 9 > area_code String,10 > bureau_id String,11 > sort String,

12 > bureau_name String)13 > row format delimited

14 > fields terminated by '|'

15 > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'16 > WITH SERDEPROPERTIES(\"hbase.columns.mapping\" = \":key,17 > info:dict_id,18 > info:city_id,19 > info:city_name,20 > info:city_code,21 > info:group_id,22 > info:group_name,23 > info:area_code,24 > info:bureau_id,25 > info:sort,

26 > info:bureau_name\")

27 > TBLPROPERTIES(\"hbase.table.name\" = \"table_hive_xternal\");28 OK

29 Time taken: 0.092 seconds30

31 hive> desc formatted table_hive_xternal;32 OK

33 # col_name data_type comment 34

35 key string from deserializer 36 dict_id string from deserializer 37 city_id string from deserializer 38 city_name string from deserializer 39 city_code string from deserializer 40 group_id string from deserializer 41 group_name string from deserializer 42 area_code string from deserializer 43 bureau_id string from deserializer 44 sort string from deserializer

45 bureau_name string from deserializer 46

47 # Detailed Table Information 48 Database: default 49 Owner: hdfs

50 CreateTime: Tue Oct 16 17:20:26 CST 2018 51 LastAccessTime: UNKNOWN 52 Protect Mode: None 53 Retention: 0

54 Location: hdfs://ns1/user/hive/warehouse/table_hive_xternal 55 Table Type: EXTERNAL_TABLE 56 Table Parameters:

57 EXTERNAL TRUE 58 hbase.table.name table_hive_xternal

59 storage_handler org.apache.hadoop.hive.hbase.HBaseStorageHandler60 transient_lastDdlTime 1539681626 61

62 # Storage Information

63 SerDe Library: org.apache.hadoop.hive.hbase.HBaseSerDe InputFormat: null 65 OutputFormat: null 66 Compressed: No 67 Num Buckets: -1 68 Bucket Columns: [] 69 Sort Columns: [] 70 Storage Desc Params:

71 field.delim |

72 hbase.columns.mapping :key,\\n info:dict_id,\\n info:city_id,\\n info:city_name,\\n info:city_code,\\n info:group_id,\\n info:group_name,\\n info:area_code,\\n info:bureau_id,\\n info:sort,\\n info:bureau_name73 serialization.format |

74 Time taken: 0.882 seconds, Fetched: 41 row(s)

2.3创建普通的 hive 管理表

1 drop table table_hive_xternal_1; 2 create table table_hive_xternal_1 3 (key String, 4 dict_id String, 5 city_id String, 6 city_name String, 7 city_code String, 8 group_id String, 9 group_name String,10 area_code String,11 bureau_id String,12 sort String,

13 bureau_name String)14 row format delimited15 fields terminated by '|'16 STORED AS TEXTFILE;

1 hive> desc formatted table_hive_xternal_1; 2 OK

3 # col_name data_type comment 4

5 key string 6 dict_id string 7 city_id string 8 city_name string 9 city_code string 10 group_id string 11 group_name string 12 area_code string 13 bureau_id string 14 sort string

15 bureau_name string 16

17 # Detailed Table Information 18 Database: default 19 Owner: hdfs

20 CreateTime: Tue Oct 16 17:21:05 CST 2018 21 LastAccessTime: UNKNOWN 22 Protect Mode: None 23 Retention: 0

24 Location: hdfs://ns1/user/hive/warehouse/table_hive_xternal_1 25 Table Type: MANAGED_TABLE 26 Table Parameters:

27 transient_lastDdlTime 1539681665 28

29 # Storage Information

30 SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 31 InputFormat: org.apache.hadoop.mapred.TextInputFormat

32 OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 33 Compressed: No 34 Num Buckets: -1 35 Bucket Columns: [] 36 Sort Columns: [] 37 Storage Desc Params:

38 field.delim | 39 serialization.format |

40 Time taken: 0.033 seconds, Fetched: 37 row(s)

2.4 准备⼀份数据

1 [hdfs@iptve2e03 tmp_lillcol]$ hadoop fs -cat hdfs://ns1/user/hive/warehouse/hive-hbase

2 736_9铜锣湾1|1|73629|铜锣湾1|啥⼦字段|110|艾欧尼亚⼤区|weq|76D5A3D3EA4|1|汉东省东中猴姑⽶西翻公司 3 475_铜锣湾2|13|4750|铜锣湾2|啥⼦字段|110|艾欧尼亚⼤区|weq|5F4E9不知C5|1|汉东省江中猴姑⽶西翻公司 4 765_铜锣湾3|3|7650|铜锣湾3|啥⼦字段|110|艾欧尼亚⼤区|weq|59B4B不知92|1|汉东省中中猴姑⽶西翻公司 5 667_铜锣湾4|14|6672|铜锣湾4|啥⼦字段|110|艾欧尼亚⼤区|weq|CF19F不知名B|21|汉东省阳中猴姑⽶西翻公司 6 758_铜锣湾5|4|7586|铜锣湾5|啥⼦字段|110|⿊莓尼亚⼤区|weq|507EB不知78|1|汉东省珠中猴姑⽶西翻公司 7 796_铜锣湾6|15|7966|铜锣湾6|啥⼦字段|110|艾欧尼亚⼤区|weq|9C9C0不知名4|21|汉东省云中猴姑⽶西翻公司 8 754_8铜锣湾7|5|75468|铜锣湾7|啥⼦字段|110|艾欧尼亚⼤区|weq|5B736不知名F|11|汉东省潮中猴姑⽶西翻公司 9 706_铜锣湾8|16|7062|铜锣湾8|啥⼦字段|110|艾欧尼亚⼤区|weq|51A88不知名8|11|汉东省河中猴姑⽶西翻公司10 754_铜锣湾9|6|7547|铜锣湾9|啥⼦字段|110|艾欧尼亚⼤区|weq|EEA9F不知59|1|汉东省佛中猴姑⽶西翻公司11 626_铜锣湾0|17|6263|铜锣湾0|啥⼦字段|110|瑞本⼤区|weq|9FF783FEE9|11|汉东省揭中猴姑⽶西翻公司12 754_铜锣湾-|7|7542|铜锣湾-|啥⼦字段|110|艾欧尼亚⼤区|weq|246A1不知FC|1|汉东省惠中猴姑⽶西翻公司

13 755_铜锣湾12|18|7553|铜锣湾12|啥⼦字段|110|艾欧尼亚⼤区|weq|E9BE9不知名9|11|汉东省梅中猴姑⽶西翻公司14 661_铜锣湾12|8|6618|铜锣湾12|啥⼦字段|110|艾欧尼亚⼤区|weq|5D0A9不知名E|11|汉东省茂中猴姑⽶西翻公司15 765_铜锣湾3|19|7651|铜锣湾3|啥⼦字段|110|德玛西亚尼亚⼤区|weq|BD6F不6379|11|汉东省韶中猴姑⽶西翻公司16 754_铜锣湾32|9|7544|铜锣湾32|啥⼦字段|110|艾欧尼亚⼤区|weq|18D7A不知1E|1|汉东省汕中猴姑⽶西翻公司17 375_铜锣湾234|20|3755|铜锣湾234|啥⼦字段|110|艾欧尼亚⼤区|weq|31E2F不知82|1|汉东省深中猴姑⽶西翻公司18 626_0铜锣湾45|10|62630|铜锣湾45|啥⼦字段|110|艾欧尼亚⼤区|weq|1BA07不知名B|11|汉东省汕中猴姑⽶西翻公司19 458铜锣湾99|21|458|铜锣湾99|啥⼦字段|110|艾欧尼亚⼤区|weq|3C09D不知名B|11|汉东省肇中猴姑⽶西翻公司20 715铜锣湾12|11|715|铜锣湾12|啥⼦字段|110|艾欧尼亚⼤区|weq|3A49A不知名7|11|汉东省湛中猴姑⽶西翻公司21 723_铜锣湾3|2|7231|铜锣湾3|啥⼦字段|110|⼤区|weq|F8E9FCB7B1|11|汉东省清中猴姑⽶西翻公司22 221_铜锣湾2|12|2210|铜锣湾2|啥⼦字段|110|韩国⼤区|weq|13F1D054|1|汉东省⼴中猴姑⽶西翻公司

2.5 向 table_hive_xternal_1 中添加数据

1 load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_xternal_1;2 hive> load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_xternal_1;3 Loading data to table default.table_hive_xternal_1

4 Table default.table_hive_xternal_1 stats: [numFiles=1, totalSize=2681]5 OK

6 Time taken: 0.534 seconds

2.6 查看 table_hive_xternal_1 中的数据

1 hive> select * from table_hive_xternal_1; 2 OK

3 736_9铜锣湾1 1 73629 铜锣湾1 啥⼦字段 110 艾欧尼亚⼤区 weq 76D5A3D3EA4 1 汉东省东中猴姑⽶西翻公司 4 475_铜锣湾2 13 4750 铜锣湾2 啥⼦字段 110 艾欧尼亚⼤区 weq 5F4E9不知C5 1 汉东省江中猴姑⽶西翻公司 5 765_铜锣湾3 3 7650 铜锣湾3 啥⼦字段 110 艾欧尼亚⼤区 weq 59B4B不知92 1 汉东省中中猴姑⽶西翻公司 6 667_铜锣湾4 14 6672 铜锣湾4 啥⼦字段 110 艾欧尼亚⼤区 weq CF19F不知名B 21 汉东省阳中猴姑⽶西翻公司 7 758_铜锣湾5 4 7586 铜锣湾5 啥⼦字段 110 ⿊莓尼亚⼤区 weq 507EB不知78 1 汉东省珠中猴姑⽶西翻公司 8 796_铜锣湾6 15 7966 铜锣湾6 啥⼦字段 110 艾欧尼亚⼤区 weq 9C9C0不知名4 21 汉东省云中猴姑⽶西翻公司 9 754_8铜锣湾7 5 75468 铜锣湾7 啥⼦字段 110 艾欧尼亚⼤区 weq 5B736不知名F 11 汉东省潮中猴姑⽶西翻公司10 706_铜锣湾8 16 7062 铜锣湾8 啥⼦字段 110 艾欧尼亚⼤区 weq 51A88不知名8 11 汉东省河中猴姑⽶西翻公司11 754_铜锣湾9 6 7547 铜锣湾9 啥⼦字段 110 艾欧尼亚⼤区 weq EEA9F不知59 1 汉东省佛中猴姑⽶西翻公司12 626_铜锣湾0 17 6263 铜锣湾0 啥⼦字段 110 瑞本⼤区 weq 9FF783FEE9 11 汉东省揭中猴姑⽶西翻公司13 754_铜锣湾- 7 7542 铜锣湾- 啥⼦字段 110 艾欧尼亚⼤区 weq 246A1不知FC 1 汉东省惠中猴姑⽶西翻公司

14 755_铜锣湾12 18 7553 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq E9BE9不知名9 11 汉东省梅中猴姑⽶西翻公司15 661_铜锣湾12 8 6618 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 5D0A9不知名E 11 汉东省茂中猴姑⽶西翻公司16 765_铜锣湾3 19 7651 铜锣湾3 啥⼦字段 110 德玛西亚尼亚⼤区 weq BD6F不6379 11 汉东省韶中猴姑⽶西翻公司17 754_铜锣湾32 9 7544 铜锣湾32 啥⼦字段 110 艾欧尼亚⼤区 weq 18D7A不知1E 1 汉东省汕中猴姑⽶西翻公司18 375_铜锣湾234 20 3755 铜锣湾234 啥⼦字段 110 艾欧尼亚⼤区 weq 31E2F不知82 1 汉东省深中猴姑⽶西翻公司19 626_0铜锣湾45 10 62630 铜锣湾45 啥⼦字段 110 艾欧尼亚⼤区 weq 1BA07不知名B 11 汉东省汕中猴姑⽶西翻公司20 458铜锣湾99 21 458 铜锣湾99 啥⼦字段 110 艾欧尼亚⼤区 weq 3C09D不知名B 11 汉东省肇中猴姑⽶西翻公司21 715铜锣湾12 11 715 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 3A49A不知名7 11 汉东省湛中猴姑⽶西翻公司22 723_铜锣湾3 2 7231 铜锣湾3 啥⼦字段 110 ⼤区 weq F8E9FCB7B1 11 汉东省清中猴姑⽶西翻公司23 221_铜锣湾2 12 2210 铜锣湾2 啥⼦字段 110 韩国⼤区 weq 13F1D054 1 汉东省⼴中猴姑⽶西翻公司24 Time taken: 0.036 seconds, Fetched: 21 row(s)

2.7 将table_hive_xternal_1 的数据插⼊ table_hive_xternal

1 insert into table table_hive_xternal select * from table_hive_xternal_1;

2 hive> insert into table table_hive_xternal select * from table_hive_xternal_1; 3 Query ID = hdfs_20181016172323_aad773d7-444f-431c-b0a2-917756ec965f 4 Total jobs = 1

5 Launching Job 1 out of 1

6 Number of reduce tasks is set to 0 since there's no reduce operator

7 Starting Job = job_1519375199907_258597, Tracking URL = http://127.0.0.1:8088/proxy/application_1519375199907_258597/ 8 Kill Command = /opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/lib/hadoop/bin/hadoop job -kill job_1519375199907_258597 9 Hadoop job information for Stage-0: number of mappers: 1; number of reducers: 010 2018-10-16 17:23:57,040 Stage-0 map = 0%, reduce = 0%

11 2018-10-16 17:24:03,215 Stage-0 map = 100%, reduce = 0%, Cumulative CPU 4.31 sec12 MapReduce Total cumulative CPU time: 4 seconds 310 msec13 Ended Job = job_1519375199907_25859714 MapReduce Jobs Launched:

15 Stage-Stage-0: Map: 1 Cumulative CPU: 4.31 sec HDFS Read: 7472 HDFS Write: 0 SUCCESS16 Total MapReduce CPU Time Spent: 4 seconds 310 msec17 OK

18 Time taken: 13.523 seconds

2.8 查看 table_hive_xternal 的数据

1 select * from table_hive_xternal; 2

3 hive> select * from table_hive_xternal; 4 OK

5 221_铜锣湾2 12 2210 铜锣湾2 啥⼦字段 110 韩国⼤区 weq 13F1D054 1 汉东省⼴中猴姑⽶西翻公司

6 375_铜锣湾234 20 3755 铜锣湾234 啥⼦字段 110 艾欧尼亚⼤区 weq 31E2F不知82 1 汉东省深中猴姑⽶西翻公司 7 458铜锣湾99 21 458 铜锣湾99 啥⼦字段 110 艾欧尼亚⼤区 weq 3C09D不知名B 11 汉东省肇中猴姑⽶西翻公司 8 475_铜锣湾2 13 4750 铜锣湾2 啥⼦字段 110 艾欧尼亚⼤区 weq 5F4E9不知C5 1 汉东省江中猴姑⽶西翻公司

9 626_0铜锣湾45 10 62630 铜锣湾45 啥⼦字段 110 艾欧尼亚⼤区 weq 1BA07不知名B 11 汉东省汕中猴姑⽶西翻公司10 626_铜锣湾0 17 6263 铜锣湾0 啥⼦字段 110 瑞本⼤区 weq 9FF783FEE9 11 汉东省揭中猴姑⽶西翻公司

11 661_铜锣湾12 8 6618 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 5D0A9不知名E 11 汉东省茂中猴姑⽶西翻公司12 667_铜锣湾4 14 6672 铜锣湾4 啥⼦字段 110 艾欧尼亚⼤区 weq CF19F不知名B 21 汉东省阳中猴姑⽶西翻公司13 706_铜锣湾8 16 7062 铜锣湾8 啥⼦字段 110 艾欧尼亚⼤区 weq 51A88不知名8 11 汉东省河中猴姑⽶西翻公司

14 715铜锣湾12 11 715 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq 3A49A不知名7 11 汉东省湛中猴姑⽶西翻公司15 723_铜锣湾3 2 7231 铜锣湾3 啥⼦字段 110 ⼤区 weq F8E9FCB7B1 11 汉东省清中猴姑⽶西翻公司16 736_9铜锣湾1 1 73629 铜锣湾1 啥⼦字段 110 艾欧尼亚⼤区 weq 76D5A3D3EA4 1 汉东省东中猴姑⽶西翻公司17 754_8铜锣湾7 5 75468 铜锣湾7 啥⼦字段 110 艾欧尼亚⼤区 weq 5B736不知名F 11 汉东省潮中猴姑⽶西翻公司18 754_铜锣湾- 7 7542 铜锣湾- 啥⼦字段 110 艾欧尼亚⼤区 weq 246A1不知FC 1 汉东省惠中猴姑⽶西翻公司

19 754_铜锣湾32 9 7544 铜锣湾32 啥⼦字段 110 艾欧尼亚⼤区 weq 18D7A不知1E 1 汉东省汕中猴姑⽶西翻公司20 754_铜锣湾9 6 7547 铜锣湾9 啥⼦字段 110 艾欧尼亚⼤区 weq EEA9F不知59 1 汉东省佛中猴姑⽶西翻公司

21 755_铜锣湾12 18 7553 铜锣湾12 啥⼦字段 110 艾欧尼亚⼤区 weq E9BE9不知名9 11 汉东省梅中猴姑⽶西翻公司22 758_铜锣湾5 4 7586 铜锣湾5 啥⼦字段 110 ⿊莓尼亚⼤区 weq 507EB不知78 1 汉东省珠中猴姑⽶西翻公司

23 765_铜锣湾3 19 7651 铜锣湾3 啥⼦字段 110 德玛西亚尼亚⼤区 weq BD6F不6379 11 汉东省韶中猴姑⽶西翻公司24 796_铜锣湾6 15 7966 铜锣湾6 啥⼦字段 110 艾欧尼亚⼤区 weq 9C9C0不知名4 21 汉东省云中猴姑⽶西翻公司25 Time taken: 0.0 seconds, Fetched: 20 row(s)

2.9 查看HBase中 table_hive_xternal 的数据

1 scan 'table_hive_xternal',{LIMIT=>2}

2 hbase(main):013:0> scan 'table_hive_xternal',{LIMIT=>2}

3 ROW COLUMN+CELL

4 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:area_code, timestamp=1539681842885, value=weq 5 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:bureau_id, timestamp=1539681842885, value=13F1D054

6 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:bureau_name, timestamp=1539681842885, value=\\xE6\\xB1\\x\\xE4\\xB8\\x9C\\xE7\\x9C\\x81\\xE5\\xB9\\xBF\\xE4\\xB8\\xAD\\xE7\\x8C\\xB4\\xE5\\xA7\\x91\\xE7\\xB1\\xB3\\xE8\\

7 \\xE5\\x85\\xAC\\xE5\\x8F\\xB8

8 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_code, timestamp=1539681842885, value=\\xE5\\x95\\xA5\\xE5\\xAD\\x90\\xE5\\xAD\\x97\\xE6\\xAE\\xB5 9 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_id, timestamp=1539681842885, value=2210

10 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_name, timestamp=1539681842885, value=\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 11 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:dict_id, timestamp=1539681842885, value=12 12 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:group_id, timestamp=1539681842885, value=110

13 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:group_name, timestamp=1539681842885, value=\\xE9\\x9F\\xA9\\xE5\\x9B\\xBD\\xE5\\xA4\\xA7\\xE5\\x8C\\xBA 14 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:sort, timestamp=1539681842885, value=1

15 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:area_code, timestamp=1539681842885, value=weq

16 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:bureau_id, timestamp=1539681842885, value=31E2F\\xE4\\xB8\\x8D\\xE7\\x9F\\xA582

17 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:bureau_name, timestamp=1539681842885, value=\\xE6\\xB1\\x\\xE4\\xB8\\x9C\\xE7\\x9C\\x81\\xE6\\xB7\\xB1\\xE4\\xB8\\xAD\\xE7\\x8C\\xB4\\xE5\\xA7\\x91\\xE7\\xB1\\xB3\\xE818 \\xE5\\x85\\xAC\\xE5\\x8F\\xB8

19 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_code, timestamp=1539681842885, value=\\xE5\\x95\\xA5\\xE5\\xAD\\x90\\xE5\\xAD\\x97\\xE6\\xAE\\xB5 20 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_id, timestamp=1539681842885, value=3755

21 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_name, timestamp=1539681842885, value=\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 22 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:dict_id, timestamp=1539681842885, value=20 23 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:group_id, timestamp=1539681842885, value=110

24 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:group_name, timestamp=1539681842885, value=\\xE8\\x\\xBE\\xE6\\xAC\\xA7\\xE5\\xB0\\xBC\\xE4\\xBA\\x9A\\xE5\\xA4\\xA7\\xE5\\x8C\\xBA 25 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:sort, timestamp=1539681842885, value=1 26 2 row(s) in 0.0260 seconds

2.10 删除表

先删除hive表再查询Hbase

1 //删除hive表

2 hive> show tables ; 3 OK

4 table_hive_xternal 5 table_hive_xternal_1

6 Time taken: 0.011 seconds, Fetched: 9 row(s) 7 hive> drop table table_hive_xternal; 8 OK

9 Time taken: 0.476 seconds10 hive> show tables ;11 OK

12 table_hive_xternal_1

13 Time taken: 0.01 seconds, Fetched: 8 row(s)14 hive> 15

16 //查询Hbase

17 hbase(main):014:0> scan 'table_hive_xternal',{LIMIT=>2}

18 ROW COLUMN+CELL

19 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:area_code, timestamp=1539681842885, value=weq 20 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:bureau_id, timestamp=1539681842885, value=13F1D054

21 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:bureau_name, timestamp=1539681842885, value=\\xE6\\xB1\\x\\xE4\\xB8\\x9C\\xE7\\x9C\\x81\\xE5\\xB9\\xBF\\xE4\\xB8\\xAD\\xE7\\x8C\\xB4\\xE5\\xA7\\x91\\xE7\\xB1\\xB3\\xE822 \\xE5\\x85\\xAC\\xE5\\x8F\\xB8

23 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_code, timestamp=1539681842885, value=\\xE5\\x95\\xA5\\xE5\\xAD\\x90\\xE5\\xAD\\x97\\xE6\\xAE\\xB5 24 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_id, timestamp=1539681842885, value=2210

25 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:city_name, timestamp=1539681842885, value=\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 26 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:dict_id, timestamp=1539681842885, value=12 27 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:group_id, timestamp=1539681842885, value=110

28 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:group_name, timestamp=1539681842885, value=\\xE9\\x9F\\xA9\\xE5\\x9B\\xBD\\xE5\\xA4\\xA7\\xE5\\x8C\\xBA 29 221_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE2 column=info:sort, timestamp=1539681842885, value=1

30 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:area_code, timestamp=1539681842885, value=weq

31 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:bureau_id, timestamp=1539681842885, value=31E2F\\xE4\\xB8\\x8D\\xE7\\x9F\\xA582

32 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:bureau_name, timestamp=1539681842885, value=\\xE6\\xB1\\x\\xE4\\xB8\\x9C\\xE7\\x9C\\x81\\xE6\\xB7\\xB1\\xE4\\xB8\\xAD\\xE7\\x8C\\xB4\\xE5\\xA7\\x91\\xE7\\xB1\\xB3\\xE833 \\xE5\\x85\\xAC\\xE5\\x8F\\xB8

34 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_code, timestamp=1539681842885, value=\\xE5\\x95\\xA5\\xE5\\xAD\\x90\\xE5\\xAD\\x97\\xE6\\xAE\\xB5 35 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_id, timestamp=1539681842885, value=3755

36 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:city_name, timestamp=1539681842885, value=\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 37 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:dict_id, timestamp=1539681842885, value=20 38 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:group_id, timestamp=1539681842885, value=110

39 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:group_name, timestamp=1539681842885, value=\\xE8\\x\\xBE\\xE6\\xAC\\xA7\\xE5\\xB0\\xBC\\xE4\\xBA\\x9A\\xE5\\xA4\\xA7\\xE5\\x8C\\xBA 40 375_\\xE9\\x93\\x9C\\xE9\\x94\\xA3\\xE6\\xB9\\xBE234 column=info:sort, timestamp=1539681842885, value=1 41 2 row(s) in 0.0200 seconds 再⾛⼀次之前的流程把数据弄回来

先删除hbase 在查询Hive

1 //删除hbase

2 hbase(main):018:0> disable 'table_hive_xternal' 3 0 row(s) in 2.2310 seconds 4

5 hbase(main):019:0> drop 'table_hive_xternal' 6 0 row(s) in 1.2290 seconds 7

8 //查询Hive

9 hive> select * from table_hive_xternal;10 OK

11 Failed with exception java.io.IOException:org.apache.hadoop.hbase.TableNotFoundException: table_hive_xternal12 Time taken: 0.109 seconds

2.3 Hive-Hbase ⽅式总结

2.3.1 管理表

Hbase 是否需要先建⽴

不需要,在创建table_hive_mange后HBase表会⾃动创建

能否直接load数据到table_hive_mange

不能

1 load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_mange;

2 hive> load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_mange;3 FAILED: SemanticException [Error 10101]: A non-native table cannot be used as target for LOAD

删除表的影响

先删除HBase,数据已经被删除,此时虽然可以看到hive表但是已经没有数据(表信息还在),执⾏drop table 后报错 但是表信息已经被删除;先删除Hive表,Hbase表同时也被删除说明数据是存在HBase的⽽不是Hive

2.3.2 外部表

Hbase 是否需要先建⽴

需要,如果事先建好HBase汇报下⾯的错误 1 hive> create external table table_hive_xternal 2 > (key String, 3 > dict_id String, 4 > city_id String, 5 > city_name String, 6 > city_code String, 7 > group_id String, 8 > group_name String, 9 > area_code String,10 > bureau_id String,11 > sort String,

12 > bureau_name String)13 > row format delimited

14 > fields terminated by '|'

15 > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'16 > WITH SERDEPROPERTIES(\"hbase.columns.mapping\" = \":key,17 > info:dict_id,18 > info:city_id,19 > info:city_name,20 > info:city_code,21 > info:group_id,22 > info:group_name,23 > info:area_code,24 > info:bureau_id,25 > info:sort,

26 > info:bureau_name\")

27 > TBLPROPERTIES(\"hbase.table.name\" = \"table_hive_xternal\");

28 FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:MetaException(message:HBase table table_hive_xternal doesn't exist while the table is declared as an external table.)29 at org.apache.hadoop.hive.hbase.HBaseStorageHandler.preCreateTable(HBaseStorageHandler.java:215) ......

能否直接load数据到table_hive_xternal不能

1 load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_xternal;

2 hive> load data inpath 'hdfs://ns1/user/hive/warehouse/hive-hbase' into table table_hive_xternal;3 FAILED: SemanticException [Error 10101]: A non-native table cannot be used as target for LOAD

删除表的影响

先删除Hive表,Hbase可以照常查询先删除Hbase表,Hive表也会被删除再次说明数据存储在Hbase

通过⽣成HFile导⼊HBase

要实现DataFrame通过HFile导⼊HBase有两个关键步骤第⼀个是要⽣成Hfile

第⼆个是HFile导⼊HBase

测试DataFrame数据来⾃mysql,如果对读取mysql作为DataFrame不熟悉的⼈可以参考 当然也可以⾃⼰决定DataFrame的数据来源,此处以Mysql为例

1.mysql的信息

mysql的信息我保存在了外部的配置⽂件,这样⽅便后续的配置添加。

1 //配置⽂件⽰例:

2 [hdfs@iptve2e03 tmp_lillcol]$ cat job.properties 3 #mysql数据库配置

4 mysql.driver=com.mysql.jdbc.Driver

5 mysql.url=jdbc:mysql://127.0.0.1:3306/database1?useSSL=false&autoReconnect=true&failOverReadOnly=false&rewriteBatchedStatements=true6 mysql.username=user7 mysql.password=123456

2.需要的jar依赖

sbt版本,maven的对应修改即可

1 libraryDependencies += \"org.apache.spark\" % \"spark-core_2.10\" % \"1.6.0-cdh5.7.2\" 2 libraryDependencies += \"org.apache.spark\" % \"spark-sql_2.10\" % \"1.6.0-cdh5.7.2\" 3 libraryDependencies += \"org.apache.spark\" % \"spark-hive_2.10\" % \"1.6.0-cdh5.7.2\" 4 libraryDependencies += \"org.apache.hbase\" % \"hbase-client\" % \"1.2.0-cdh5.7.2\" 5 libraryDependencies += \"org.apache.hbase\" % \"hbase-server\" % \"1.2.0-cdh5.7.2\" 6 libraryDependencies += \"org.apache.hbase\" % \"hbase-common\" % \"1.2.0-cdh5.7.2\" 7 libraryDependencies += \"org.apache.hbase\" % \"hbase-protocol\" % \"1.2.0-cdh5.7.2\" 8 libraryDependencies += \"mysql\" % \"mysql-connector-java\" % \"5.1.38\"

9 libraryDependencies += \"org.apache.spark\" % \"spark-streaming_2.10\" % \"1.6.0-cdh5.7.2\"10 libraryDependencies += \"com.yammer.metrics\" % \"metrics-core\" % \"2.2.0\"

3. 完整代码

1 import java.io.FileInputStream 2 import java.util.Properties 3

4 import org.apache.hadoop.conf.Configuration 5 import org.apache.hadoop.fs.{FileSystem, Path}

6 import org.apache.hadoop.fs.permission.{FsAction, FsPermission} 7 import org.apache.hadoop.hbase.io.ImmutableBytesWritable

8 import org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 9 import org.apache.hadoop.hbase.util.Bytes

10 import org.apache.hadoop.hbase.{HBaseConfiguration, KeyValue} 11 import org.apache.hadoop.mapreduce.Job 12 import org.apache.spark.rdd.RDD

13 import org.apache.spark.sql.functions.{concat, lit} 14 import org.apache.spark.sql.hive.HiveContext

15 import org.apache.spark.sql.{DataFrame, SQLContext} 16 import org.apache.spark.{SparkConf, SparkContext} 17 18 /**

19 * @author 利伊奥克⼉-lillcol 20 * 2018/10/14-11:08 21 * 22 */

23 object TestHFile {

24 var hdfsPath: String = \"\" 25 var proPath: String = \"\" 26 var DATE: String = \"\" 27

28 val sparkConf: SparkConf = new SparkConf().setAppName(getClass.getSimpleName) 29 val sc: SparkContext = new SparkContext(sparkConf) 30 val sqlContext: SQLContext = new HiveContext(sc) 31

32 import sqlContext.implicits._ 33

34 def main(args: Array[String]): Unit = { 35 hdfsPath = args(0) 36 proPath = args(1) 37

38 //HFile保存路径

39 val save_path: String = hdfsPath + \"TableTestHFile\" 40 //获取测试DataFrame

41 val dim_sys_city_dict: DataFrame = readMysqlTable(sqlContext, \"DIM_SYS_CITY_DICT\ 42

43 val resultDataFrame: DataFrame = dim_sys_city_dict

44 .select(concat($\"city_id\ 45 //注:resultDataFrame ⾥⾯的 key 要放在第⼀位,因为后⾯需要对字段名排序 46 saveASHfFile(resultDataFrame, \"cf_info\ 47 } 48 49 /**

50 * 将DataFrame 保存为 HFile 51 *

52 * @param resultDataFrame 需要保存为HFile的 DataFrame,DataFrame的第⼀个字段必须为\"key\" 53 * @param clounmFamily 列族名称(必须在Hbase中存在,否则在load数据的时候会失败) 54 * @param save_path HFile的保存路径 55 */

56 def saveASHfFile(resultDataFrame: DataFrame, clounmFamily: String, save_path: String): Unit = { 57 val conf: Configuration = HBaseConfiguration.create() 58 lazy val job = Job.getInstance(conf)

59 job.setMapOutputKeyClass(classOf[ImmutableBytesWritable]) //设置MapOutput Key Value 的数据类型 60 job.setMapOutputValueClass(classOf[KeyValue]) 61

62 var columnsName: Array[String] = resultDataFrame.columns //获取列名 第⼀个为key 63 columnsName = columnsName.drop(1).sorted //把key去掉 因为要排序

65 val result1: RDD[(ImmutableBytesWritable, Seq[KeyValue])] = resultDataFrame 66 .map(row => {

67 var kvlist: Seq[KeyValue] = List() 68 var rowkey: Array[Byte] = null 69 var cn: Array[Byte] = null 70 var v: Array[Byte] = null 71 var kv: KeyValue = null

72 val cf: Array[Byte] = clounmFamily.getBytes //列族 73 rowkey = Bytes.toBytes(row.getAs[String](\"key\")) //key 74 for (i <- 1 to (columnsName.length - 1)) {

75 cn = columnsName(i).getBytes() //列的名称

76 v = Bytes.toBytes(row.getAs[String](columnsName(i))) //列的值

77 //将rdd转换成HFile需要的格式,我们上⾯定义了Hfile的key是ImmutableBytesWritable,那么我们定义的RDD也是要以ImmutableBytesWritable的实例为key 78 kv = new KeyValue(rowkey, cf, cn, v) //封装⼀下 rowkey, cf, clounmVale, value 79 //

80 kvlist = kvlist :+ kv //将新的kv加在kvlist后⾯(不能反 需要整体有序) 81 }

82 (new ImmutableBytesWritable(rowkey), kvlist) 83 }) 84

85 //RDD[(ImmutableBytesWritable, Seq[KeyValue])] 转换成 RDD[(ImmutableBytesWritable, KeyValue)] 86 val result: RDD[(ImmutableBytesWritable, KeyValue)] = result1.flatMapValues(s => { 87 s.iterator 88 })

90 delete_hdfspath(save_path) //删除save_path 原来的数据 91 //保存数据 92 result

93 .sortBy(x => x._1, true) //要保持 整体有序 94 .saveAsNewAPIHadoopFile(save_path, 95 classOf[ImmutableBytesWritable], 96 classOf[KeyValue],

97 classOf[HFileOutputFormat2], 98 job.getConfiguration) 99 100 }101 102 /**

103 * 删除hdfs下的⽂件104 *

105 * @param url 需要删除的路径106 */

107 def delete_hdfspath(url: String) {

108 val hdfs: FileSystem = FileSystem.get(new Configuration)109 val path: Path = new Path(url)110 if (hdfs.exists(path)) {

111 val filePermission = new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.READ)112 hdfs.delete(path, true)113 }114 }115 116 /**

117 * 获取 Mysql 表的数据118 *

119 * @param sqlContext

120 * @param tableName 读取Mysql表的名字121 * @param proPath 配置⽂件的路径122 * @return 返回 Mysql 表的 DataFrame123 */

124 def readMysqlTable(sqlContext: SQLContext, tableName: String, proPath: String) = {125 val properties: Properties = getProPerties(proPath)126 sqlContext127 .read

128 .format(\"jdbc\")

129 .option(\"url\

130 .option(\"driver\131 .option(\"user\

132 .option(\"password\133 // .option(\"dbtable\134 .option(\"dbtable\135 .load()136 137 }138 139 /**

140 * 获取 Mysql 表的数据 添加过滤条件141 *

142 * @param sqlContext

143 * @param table 读取Mysql表的名字144 * @param filterCondition 过滤条件

145 * @param proPath 配置⽂件的路径146 * @return 返回 Mysql 表的 DataFrame147 */

148 def readMysqlTable(sqlContext: SQLContext, table: String, filterCondition: String, proPath: String): DataFrame = {149 val properties: Properties = getProPerties(proPath)150 var tableName = \"\"

151 tableName = \"(select * from \" + table + \" where \" + filterCondition + \" ) as t1\"152 sqlContext153 .read

154 .format(\"jdbc\")

155 .option(\"url\

156 .option(\"driver\157 .option(\"user\

158 .option(\"password\159 .option(\"dbtable\160 .load()161 }162 163 /**

1 * 获取配置⽂件165 *

166 * @param proPath167 * @return168 */

169 def getProPerties(proPath: String): Properties = {170 val properties: Properties = new Properties()171 properties.load(new FileInputStream(proPath))172 properties

173 }174 }

4. 测试代码

1 def main(args: Array[String]): Unit = { 2 hdfsPath = args(0) 3 proPath = args(1) 4

5 //HFile保存路径

6 val save_path: String = hdfsPath + \"TableTestHFile\" 7 //获取测试DataFrame

8 val dim_sys_city_dict: DataFrame = readMysqlTable(sqlContext, \"DIM_SYS_CITY_DICT\ 9

10 val resultDataFrame: DataFrame = dim_sys_city_dict

11 .select(concat($\"city_id\12 //注:resultDataFrame ⾥⾯的 key 要放在第⼀位,因为后⾯需要对字段名排序13 saveASHfFile(resultDataFrame, \"cf_info\14 }

5. 执⾏命令

1 nohup spark-submit --master yarn \\ 2 --driver-memory 4G \\ 3 --num-executors 2 \\ 4 --executor-cores 4 \\ 5 --executor-memory 8G \\

6 --class com.iptv.job.basedata.TestHFile \\

7 --jars /var/lib/hadoop-hdfs/tmp_lillcol/mysql-connector-java-5.1.38.jar \\ 8 tygq.jar \\

9 hdfs://ns1/user/hive/warehouse/ \\

10 /var/lib/hadoop-hdfs/tmp_lillcol/job.properties > ./TestHFile.log 2>&1 &

6.执⾏结果

1 [hdfs@iptve2e03 tmp_lillcol]$ hadoop fs -du -h hdfs://ns1/user/hive/warehouse/TableTestHFile2 0 0 hdfs://ns1/user/hive/warehouse/TableTestHFile/_SUCCESS3 12.3 K 24.5 K hdfs://ns1/user/hive/warehouse/TableTestHFile/cf_info

7. HFile load 进 Hbase

1 hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://ns1/user/hive/warehouse/TableTestHFile iptv:spark_test2 3 .....

4 18/10/17 10:14:20 INFO mapreduce.LoadIncrementalHFiles: Trying to load hfile=hdfs://ns1/user/hive/warehouse/TableTestHFile/cf_info/fdc37dc6811140dfa852ac71b00b33aa first=200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ last=769_\\xE4\\xB8\\x5 18/10/17 10:14:20 INFO client.ConnectionManager$HConnectionImplementation: Closing master protocol: MasterService

6 18/10/17 10:14:20 INFO client.ConnectionManager$HConnectionImplementation: Closing zookeeper sessionid=0x16604bba6872fff7 18/10/17 10:14:20 INFO zookeeper.ClientCnxn: EventThread shut down

8 18/10/17 10:14:20 INFO zookeeper.ZooKeeper: Session: 0x16604bba6872fff closed

8.查看HBase中的数据

1 hbase(main):005:0> scan 'iptv:spark_test',{LIMIT=>2}

2 ROW COLUMN+CELL

3 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:bureau_id, timestamp=1539742949840, value=BF55 4 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:bureau_name, timestamp=1539742949840, value=\\x85\\xAC\\xE5

5 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:city_code, timestamp=1539742949840, value=112 6 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:city_id, timestamp=1539742949840, value=112 7 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:city_name, timestamp=1539742949840, value=\\xB7\\x9E

8 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:dict_id, timestamp=1539742949840, value=112 9 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:group_id, timestamp=1539742949840, value=112 10 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:group_name, timestamp=1539742949840, value=\\x8C\\xBA

11 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ column=cf_info:sort, timestamp=1539742949840, value=112 12 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:bureau_id, timestamp=1539742949840, value=6AA0EF0B 13 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:bureau_name, timestamp=1539742949840, value=xE5\\x8F\\xB8

14 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:city_code, timestamp=1539742949840, value=112 15 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:city_id, timestamp=1539742949840, value=112 16 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:city_name, timestamp=1539742949840, value=\\xBE

17 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:dict_id, timestamp=1539742949840, value=112 18 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:group_id, timestamp=1539742949840, value=112 19 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:group_name, timestamp=1539742949840, value=\\x8C\\xBA 20 660_\\xE6\\xB1\\x95\\xE5\\xB0\\xBE_GD_SW column=cf_info:sort, timestamp=1539742949840, value=112

9.总结

多列族,多列处理

通过算法将原本只能单个⼀个列族⼀个列处理的数据扩展到了多列族,多列处理。实现的关键是下⾯的两段代码

1 var columnsName: Array[String] = resultDataFrame.columns //获取列名 第⼀个为key 2 columnsName = columnsName.drop(1).sorted //把key去掉 因为要排序 3

4 val result1: RDD[(ImmutableBytesWritable, Seq[KeyValue])] = resultDataFrame 5 .map(row => {

6 var kvlist: Seq[KeyValue] = List() 7 var rowkey: Array[Byte] = null 8 var cn: Array[Byte] = null 9 var v: Array[Byte] = null10 var kv: KeyValue = null

11 val cf: Array[Byte] = clounmFamily.getBytes //列族12 rowkey = Bytes.toBytes(row.getAs[String](\"key\")) //key13 for (i <- 1 to (columnsName.length - 1)) {

14 cn = columnsName(i).getBytes() //列的名称

15 v = Bytes.toBytes(row.getAs[String](columnsName(i))) //列的值

16 //将rdd转换成HFile需要的格式,我们上⾯定义了Hfile的key是ImmutableBytesWritable,那么我们定义的RDD也是要以ImmutableBytesWritable的实例为key17 kv = new KeyValue(rowkey, cf, cn, v) //封装⼀下 rowkey, cf, clounmVale, value18 //

19 kvlist = kvlist :+ kv //将新的kv加在kvlist后⾯(不能反 需要整体有序)20 }

21 (new ImmutableBytesWritable(rowkey), kvlist)22 })23

24 //RDD[(ImmutableBytesWritable, Seq[KeyValue])] 转换成 RDD[(ImmutableBytesWritable, KeyValue)]25 val result: RDD[(ImmutableBytesWritable, KeyValue)] = result1.flatMapValues(s => {26 s.iterator27 })

DataFrame的优势就是它算是⼀个结构化数据,我们很容易对⾥⾯的每⼀个字段进⾏处理

通过resultDataFrame.columns获取所有列名,通过drop(1)删掉“key”,(序号从1开始)通过sorted 对列名进⾏排序,默认就是升序的,如果不排序会报错,具体错误后⾯展⽰

然后通过map取出每⼀⾏⼀⾏数据,再通过for对每⼀个字段处理,每处理⼀个字段相关信息加⼊List,得到 RDD[(ImmutableBytesWritable, Seq[KeyValue])]通过flatMapValues将RDD[(ImmutableBytesWritable, Seq[KeyValue])] 转换成 RDD[(ImmutableBytesWritable, KeyValue)]

通过上述处理,我们将得到RDD[(ImmutableBytesWritable, KeyValue)]类型的数据,就可以直接使⽤saveAsNewAPIHadoopFile这个⽅法了

排序

此处有两个地⽅进⾏了排序

rowkey

这个就不⽤说了,这个必须要整体有序,实现代码

1 //保存数据2 result

3 .sortBy(x => x._1, true) //要保持 整体有序4 .saveAsNewAPIHadoopFile(save_path,5 classOf[ImmutableBytesWritable],6 classOf[KeyValue],

7 classOf[HFileOutputFormat2],8 job.getConfiguration)

列名

1 //列名也要保持整体有序,实现代码

2 var columnsName: Array[String] = resultDataFrame.columns //获取列名 第⼀个为key;3 columnsName = columnsName.drop(1).sorted //把key去掉 因为要排序

如果不排序 会出现下⾯的错误

1 18/10/15 14:19:32 WARN scheduler.TaskSetManager: Lost task 0.1 in stage 2.0 (TID 3, iptve2e03): java.io.IOException: Added a key not lexically larger than previous. 2 Current cell = 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ/cf_info:area_code/1539584366048/Put/vlen=5/seqid=0, 3 lastCell = 200_\\xE5\\xB9\\xBF\\xE5\\xB7\\x9E_GD_GZ/cf_info:dict_id/1539584366048/Put/vlen=2/seqid=0

上⾯的意思是当前列名cf_info:area_code⽐前⼀个列名cf_info:dict_id⼩,这就是为什么需要对列名排序的原因,同时还要把key删除掉,因为不删除会出现cf_info:key这个列,这显然是不如何要求的。

⽽把key放在第⼀位也是为了在这个步骤中删除掉key,否则⼀经排序就很难轻松的删除掉key了

保存路径

保存的路径不能存在,那就删除呗

1 /**

2 * 删除hdfs下的⽂件 3 *

4 * @param url 需要删除的路径 5 */

6 def delete_hdfspath(url: String) {

7 val hdfs: FileSystem = FileSystem.get(new Configuration) 8 val path: Path = new Path(url) 9 if (hdfs.exists(path)) {

10 val filePermission = new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.READ)11 hdfs.delete(path, true)12 }13 }

列族名称

列族需要在Hbase中存在,列可以不存在

对⽐总结

Hive-Hbase

优点:

关联Hive,容易对数据进⾏⼆次加⼯操作相对简单,要求没那么⾼可以轻易处理多列族多列问题

缺点:

建⽴⼀张临时表,消耗空间增加⼀倍左右

load数据的时候很快,但是insert into的时候耗费时间与数据量相关

HFile

优点:Load数据很快

从头到尾产⽣的⽂件只有⼀个HFile,必两⼀种⽅式节省空间

缺点:

数据很难⼆次加⼯,查询如果没有⼯具很不友好 对开发有⼀定的要求

⾄于两种⽅式如何选择,看需求。

此⽂为本⼈⽇常⼯作总结,转载请标明出处

因篇幅问题不能全部显示,请点此查看更多更全内容