I'm not familiar with Streamsets but I will try to help with NiFi. Is your flat file static? If so, are you looking to do a straight replace of values? You should be able to use the ReplaceTextWithMapping processor for that. If not a straight replace, you could pre-populate a DistributedMapCache with the values from the flat file, then use FetchDistributedMapCache to do a lookup against the HBase record(s).
If all else fails, then if you are comfortable with a scripting language such as Groovy, Javascript, or Jython, you could write the "join" part using ExecuteScript or InvokeScriptedProcessor.
There is an open Jira case (with some good progress made) on a lookup/enrichment processor that supports CSV files, properties files, and in-memory lookups.