Spark,HIVE;每天处理系统设计问题2TB

时间:2018-10-27 05:56:44

标签: json hadoop hive pyspark bigdata

我的团队需要建立一个HIVE数据库来处理和访问大量数据。数据为json格式,因此我们希望将数据压缩为表格式(例如csv表)以消除冗余,并希望进行一些后期处理以使数据易于稍后访问/处理。构建此类大型系统的经验有限,因此我想知道在开始构建系统之前要考虑的许多其他选择。

假设

  • 系统配置:25个节点群集,每个节点具有20个CPU和20TB的存储空间。
  • 安装了{li> HDFSSparkHIVE
  • 数据馈送:每天2,000个文件,每个文件(json.gz)压缩为1GB(1M记录),因此每日数据量为2TB。
  • 数据格式:json格式。 {userID:val1,timestamp:val2; key1; val3,key2:val4 ...}用户数(总数)为10M,密钥数为1,000。
  • 所需的已解析输出数据为csv表格格式(我认为这是用于后处理和HIVE的最便捷方法):数据混合了10种不同类型,因此,希望将数据拆分为10个独立的表(csv),它们具有不同的列数:
    1. 表A:第10列
    2. 表B:第20列
    3. 表C:第6列
    4. 表D:第30列 …
    5. 表J:第14列
  • csv数据需要进行一些后期处理:每个表将包含1000万用户的记录,每个用户具有100个带有时间戳的记录:我们需要按UserID和{{1}对表进行排序};然后为每个timestamp计算一些值。 (例如,将diff函数应用于A1列并删除负值)。
  • 每天处理后的输出量为500MB未压缩的csv,因为它消除了userID键和冗余数据的大量开销。然后将从本地json中删除原始json文件。

系统设计:这是我当前的系统设计

  1. 存储数据:解压缩HDFS个文件并将gz.json个文件存储到json文件夹hdfs中。
  2. "/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/"

  3. 后处理:对每个表使用df =sqlContext.read.json('test.json'),对表进行排序并对每一列进行处理,然后将输出pyspark文件存储到hdfs“ / proc / day1”。

  4. 配置单元:要访问数据,请使用csv中的csv文件。

  5. (可选过程):将"/proc/"个文件存储到csv表中,并删除原始ORC和临时json文件。这将进一步减少输出数据量。

0 个答案:

没有答案