The 28-year-old Finn, who started from pole position, led from the lights to the flag apart from a spell following his first pit stop when the four-time champion Briton was in control.
It was his third career victory, all of them recorded since he joined Mercedes to partner the 32-year-old Briton in January following the unexpected exit of 2016 champion German Nico Rosberg.
Hamilton came home a comfortable second, four seconds behind Bottas, having eased off in the closing laps after abandoning his bid to pass him in the turbulent air created when following close to another car.
Finn Kimi Raikkonen was fourth in the second Ferrari ahead of Dutchman Max Verstappen of Red Bull and German Nico Hulkenberg for Renault, whose sixth-place finish assured Renault of sixth place in the constructors' championship ahead of Toro Rosso.
More From This Section
Mexican Sergio Perez came home seventh ahead of his Force India team-mate Frenchman Esteban Ocon, two-time champion Spaniard Fernando Alonso of McLaren Honda and retirement-bound Brazilian Felipe Massa, in his last F1 race, for Williams.
"Such a good car today so thank you for that and the season - it's a very nice way to end it," said Bottas to his team.
Hamilton was unhappy with the tight track.
"It's impossible to pass here man!" he said in the pre- podium room. "I was like -- where are all the back-markers... They've got to change this track."
Hamilton ended his season having scored points in every race.