It's grammatical, but it doesn't make much sense, a bit like Noam Chomsky's famous sentence, "Colorless green ideas sleep furiously."
To arrive is something that happens instantaneously, not over a period of time: to arrive at the airport means to change your state from "not at the airport" to "at the airport". It doesn't take two hours to do that. It might take two hours to travel to the airport, but that's not arriving: it's travelling.
If Carrie arrived at the airport two hours ago and hasn't left then she has been at the airport for two hours. Being at a place, unlike arriving there, is something that can happen over a period of time.
"Carrie has stayed at the airport for two hours" is also correct but it carries a subtly different connotation. "Has been" is a simple statement that her location for that time was the airport. "To be" is the simplest verb you can use here and, if a speaker uses a more complicated word, you might think they're giving a more complicated message. For example, "Carrie has stayed" very slightly emphasises the fact that she didn't leave. Of course, the fact that "she has been there" there the whole time already implies that she didn't leave, but using a word like "stay" gives just a tiny bit more weight to that idea.
For completeness, just like almost any phrase, there are situations in which "Carrie has been arriving at the airport for two hours" could make sense. For example, if she is stuck in traffic and keeps texting you "I'm arriving now", you might say to your friend "She's been arriving for two hours." But the implication here is that, because arriving is an instantaneous action, you don't accept that she has really arrived. Indeed, in written English you might put scare quotes around "arrived" ("She's been 'arriving' for two hours") to indicate that your use of that word is ironic or disbelieving.