The way I see it:
Hacker: the most generic term for people who "hack", that is, try to do things that go beyond what is apparently possible, usually by studying, researching, testing, and also having fun. It can have negative or positive connotations, applying to people ranging from good programmers to true criminals.
Ethical hacker: a hacker that does not break the law, and usually works to improve the security of software or hardware in general, helping people and companies to defend from cyber criminals. They might also do this as part of their jobs, for example as penetration testers or security researchers. When an ethical hacker finds a new vulnerability, they take action so that it will end up being fixed as soon as possible.
Cyber criminal: a hacker that beaks the law, usually exploiting vulnerabilities to earn money in some illicit way. Cyber criminals are the "attackers". There are the ones distributing malware, sending spam, stealing data, putting websites offline with DoS attacks, etc.
Black hat (hacker): same as cyber criminal.
White hat (hacker): same as ethical hacker.
Grey hat (hacker): someone who isn't a real criminal, but might behave in unethical ways in some cases for personal purposes. There isn't really a precise definition.
Cracker: a term that I have seen used in some communities to refer to generic cyber criminals, but I don't think I have ever seen it used this way in serious english-speaking communities. I would personally think of a cracker as someone who "cracks" software, that is, removes restrictions or protections so that a program can be used more freely. For example a cracker might remove copy protections, or generate unofficial activation codes, or unlock features that are generally unavailable to the users.