Абсолютно :) Вы можете использовать потоковую передачу Hadoop следующим образом:
Создание сценариев мапперов и / или редукторов в lua для чтения из stdin:
#!/usr/bin/env lua
while true do
local line = io.read()
if line == nil then break end
# Do something with the incoming row
end
А затем запустите свою работу как:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper myMapper.lua \
-reducer myReducer.lua \
-file /local/path/to/myMapper.lua
-file /local/path/to/myReducer.lua
Здесь вы указываете свои скрипты мапперов и редукторов, используя -mapper
и -reducer
, и отправляете оба скрипта с -file
в ваш распределенный кеш, поэтому все трекеры задач имеют доступ к нему.
При работе с потоковой передачей необходимо убедиться, что lua
доступен на всех машинах, на которых запущены средства отслеживания задач.
Некоторое время назад мы экспериментировали с использованием luajit
(что ужасно быстро) для потоковой передачи из Pig. Если вы используете свинью, вы можете сделать что-то вроде:
OP = stream IP through `/local/path/to/script`;
Это не то же самое, что использование lua в качестве преобразователя или преобразователя, но в зависимости от того, где происходит ваша операция, выходные данные преобразователя или преобразователя передаются через сценарий.