That allowed Hamilton to capitalise and sneak into a late lead to secure his century of race victories, the first F1® driver to achieve such a haul.
McLaren, who collected their first win since 2012 at the Italian Grand Prix last time out, were left heartbroken as Norris limped to a seventh-placed finish, with Max Verstappen making important ground to finish second.
Verstappen, who led the championship going into the race, had started from the back of the grid after Red Bull had a new engine installed, but he magnificently recovered to make the podium and ensure Hamilton moves into just a two-point lead.
Norris' pole position looked to be paying off when Alonso and Perez had to pit, giving the 21-year-old the lead with 16 laps to go.
He had Hamilton in close company four laps later, and it appeared to be a two-car battle as the Englishmen jostled for first place.
Hamilton took the lead 11 laps later and went on to win as Norris spun out, with Verstappen coasting to his podium placing after making the smart decision to put the intermediate tyres on early.
Mercedes made the early decision to put on the inters as their rain radar suggested the wet weather was going to come before the finale.
With others choosing to stick out there and get through it, Hamilton surged into a late lead as Norris' tyres failed him, while Bottas climbed up from 17th on the grid to finish fifth to prove the Mercedes team's decision was an excellent one.
A visibly upset Norris addressed the television cameras after the race in Sochi but stood by the decision to stay out there.
The Briton battled to pole position in the adverse conditions the previous day but, for as long as Norris remains without a race win, this will resemble a missed opportunity for him and for McLaren to collect back-to-back wins after their success in Monza.
IN THE POINTS
- Lewis Hamilton (Mercedes)
- Max Verstappen (Red Bull) +53.271
- Carlos Sainz (Ferrari) +1:02.475
- Daniel Ricciardo (McLaren) +1:05.607
- Valtteri Bottas (Mercedes) +1:07.533
- Fernando Alonso (Alpine) +1:21.321
- Lando Norris (McLaren) +1:27.224
- Kimi Raikkonen (Alfa Romeo) +1:28.955
- Sergio Perez (Red Bull) +1:30.076
- George Russell (Williams) 1:40.551
- Lewis Hamilton (Mercedes) 246.5
- Max Verstappen (Red Bull) 244.5
- Valtteri Bottas (Mercedes) 151
- Lando Norris (McLaren) 139
- Sergio Perez (Red Bull) 120
- Mercedes 397.5
- Red Bull 364.5
- McLaren 234
- Ferrari 216.5
- Alpine 103
There is another two-week gap until the next race, which is the rearranged Turkish Grand Prix.