In Computing Science terminology, a map is an associative container mapping from a key to a value. In other words, you can do operations like “for key K remember value V” and later “for key K get the value”. A map can be implemented in many ways – for example, with a (optionally balanced) binary tree, or a hash table, or even a contiguous array of structs storing the key/value.
A hash table is a structure for storing arbitrary data, and that data does not necessarily consist of a separate key and value. For example, I could have a hash table containing the values { 1, 10, 33, 97 }, which would be their own keys. When there is no value distinct from the key, this is sometimes known as a “set”, and with a hash table implementation a “hash set”. The defining quality of a hash table is that a hash function calculates an array index from the key data, with different keys tending to yield different indices, allowing constant time access to an array element likely to contain the key. That’s an implementation / performance quality, rather than a functional quality like that defining a map.
So, a hash table stores elements, each of which need not consist of distinct key and value components, but if it does then it’s also a hash map.