如何在集群中使用多个节点来处理大量数据 - python

时间:2016-08-18 22:35:43

标签: python python-2.7 hadoop hive distributed-computing

我有一个15节点集群,我打算用它来处理每天9000万行(Hive表)范围内的数据。数据作为hive表存在于其中一个节点中,我正在使用类似以下命令的内容

with hive.connect(host = 'hostname of that node', port= 10000, authMechanism='LDAP', user='username', password='pass') as conn:
    with conn.cursor() as cur:
        cur.execute('select * from tablename')
        do_not_touch_this_data = pd.DataFrame(cur.fetch())

这里的问题是查询运行超过8小时将所有数据加载到python中。这是因为包获取所有数据并将其加载到此特定节点的内存中。即使在加载后,我也无法运行计数/ EDA等基本命令。每个命令都需要花费很多时间。这是因为15节点集群中此特定节点的128 GB RAM过载。

我想利用其他节点内存来读取/处理/执行EDA数据。任何人都可以建议在python中使用这些节点的方法,这样,命令运行得更快,我能够使用所有节点吗?我是分布式计算的初学者,我猜应该有一种方法来利用所有节点。是否将所有数据读入python内存是一种很好的做法?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

分布式系统是一个庞大而复杂的主题,最好留给专家。你正在使用Pyhon,Pandas和Hive。您应该切换到Spark,它具有类似于Pandas的自己的DataFrame抽象,并支持从Hive表读取,但将处理在您的服务器上分发数据。您应该能够轻松地将您在Pandas中执行的任何操作直接转换为Spark。