We use multiple UDF's in production and they can process 100's of K's of lines per second on the cluster. The UDF's become in a sense a part of hive: they are java as is hive and the UDF's shipped with hive are treated in the same manner - e.g. regexp_extract() for a UDF or sum for UDAF.
The performance has been good: the slowdown's are typically either (a) loading the data from hdfs or (b) poorly tuned java code within the UDF.