As we saw previously, creating custom operations form the foundations of data processing in Cascading. Many of these operations exist already and quite a bit can be accomplished without resorting to this level of programming, but to fully enable Cascading it is almost always necessary to create these lower-level building blocks to perform various custom functionalities.
In this chapter, we will concentrate on an in-depth discussion about operations and their five primary types. We will focus on understanding how they work, their "life cycle", and what method calls must be implemented to create a custom operation of the designated type. In the next chapter, we will actually write them!