我的团队需要建立一个HIVE
数据库来处理和访问大量数据。数据为json
格式,因此我们希望将数据压缩为表格式(例如csv表)以消除冗余,并希望进行一些后期处理以使数据易于稍后访问/处理。构建此类大型系统的经验有限,因此我想知道在开始构建系统之前要考虑的许多其他选择。
假设:
HDFS
,Spark
,HIVE
。json.gz
)压缩为1GB(1M记录),因此每日数据量为2TB。 userID
:val1,timestamp
:val2; key1
; val3,key2
:val4 ...}用户数(总数)为10M,密钥数为1,000。csv
表格格式(我认为这是用于后处理和HIVE
的最便捷方法):数据混合了10种不同类型,因此,希望将数据拆分为10个独立的表(csv
),它们具有不同的列数:
csv
数据需要进行一些后期处理:每个表将包含1000万用户的记录,每个用户具有100个带有时间戳的记录:我们需要按UserID
和{{1}对表进行排序};然后为每个timestamp
计算一些值。 (例如,将diff函数应用于A1列并删除负值)。userID
键和冗余数据的大量开销。然后将从本地json
中删除原始json
文件。系统设计:这是我当前的系统设计
HDFS
个文件并将gz.json
个文件存储到json
文件夹hdfs
中。 "/day1"
解析:使用json
将每个pyspark
文件解析为json
格式,并将它们存储在csv
文件夹hdfs
中
处理每个文件并记录,然后根据数据类型(不同的表)将它们分为10个不同的文件。
每天的输出文件总数:2,000 * 10 = 20,000个文件。
(参考:https://www.supergloo.com/fieldnotes/spark-sql-json-examples-python-using-world-cup-player-data/)
"/proc_0/day1/"
后处理:对每个表使用df =sqlContext.read.json('test.json')
,对表进行排序并对每一列进行处理,然后将输出pyspark
文件存储到hdfs“ / proc / day1”。
配置单元:要访问数据,请使用csv
中的csv
文件。
(可选过程):将"/proc/"
个文件存储到csv
表中,并删除原始ORC
和临时json
文件。这将进一步减少输出数据量。