Lando Norris holds off a late attack from McLaren team-mate Oscar Piastri to win the Hungarian Grand Prix.