The existing questions are related to real-time needs; the answers are API-based solutions. These solutions are not well suited to do a large batch task.
This solution suggests caching google results for a short time:
Is there a better solution? If there is not a good open-source dataset available for this then do you know of a good paid service?
Open Street Map has the Nominatim database which might do what you need.