Yep, he's at "that age"! I went through almost a year (!!!) of hitting & biting with my super-sweet, non-aggressive (really!) son. Patience, patience and consistency in how you respond. Here’s what worked for me:
Hyper-vigilance. Anytime my kid was within arm’s (or mouth’s) reach of another kid, I was there to catch him (hopefully) before he nailed someone. I’d intervene and reinforce that hands are not for hitting/food is for biting and substitute words for whatever I thought he wanted, i.e. this is how you say hello, this is how you say I’m not done playing with this toy, etc, etc.
I cut down on his exposure to other kids (something you might not be able to do, but maybe you can separate him from his sister more?) and was especially cautious about times when he was hungry, tired, etc.
Explain consequences (make them logical) to biting/hitting. If there’s any hitting/biting, we’ll leave the park right away. Then follow through, repeating the consequence, but without nagging or haranguing. Because my kid was really verbal early on, I also had him repeat the consequence just as we went to play with any one else.
I'd stay away from making him apologize, since it gives him an easy "out".
Hang in there, this is really just a stage. My son quit doing this almost overnight, though it took me awhile to trust him around other kids!
C.