Hadoop MapReduce — это модель программирования для обработки и создания больших наборов данных. Он состоит из двух основных этапов: Map и уменьшить. Фаза карты отвечает за обработку входных данных и вывод результатов в виде пар ключ-значение; фаза сокращения суммирует и объединяет выходные данные фазы карты для создания окончательного результата.
Прежде чем начать, убедитесь, что ваша среда Hadoop настроена, включая HDFS, YARN и MapReduce. Кроме того, вам также необходимо установить среду разработки Java, поскольку API Hadoop основан на Java.
Определите типы и источники данных, которые вы хотите сканировать. Например, вам может потребоваться собрать данные с новостных веб-сайтов или социальных сетей в определенной нише.
Ниже представлена простая программа Hadoop MapReduce для сканирования данных веб-страниц и извлечения URL-адресов, а также добавления информации о прокси-сервере в код.
java
import java.io.IOException;
import java.net.URI;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WebCrawler {
public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void setup(Context context) throws IOException, InterruptedException {
super.setup(context);
// Установить прокси
Configuration conf = context.getConfiguration();
conf.set("http.proxyHost", "www.16yun.cn");
conf.set("http.proxyPort", "5445");
conf.set("http.proxyUser", "16QMSOML");
conf.set("http.proxyPassword", "280651");
}
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "web crawler");
job.setJarByClass(WebCrawler.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
4. Настройте задание Hadoop В приведенном выше коде мы настраиваем задание Hadoop, включая настройку классов Mapper и Редюсер, а также пути ввода и вывода. В то же время мы устанавливаем информацию о прокси в методе настройки Mapper, чтобы использовать прокси-сервер во время процесса сканирования.
5. Запустите задачи MapReduce. Отправьте скомпилированный пакет Jar в кластер Hadoop для запуска. Задачи можно отправлять с помощью инструментов командной строки Hadoop или с помощью API Hadoop.
6. Анализируйте результаты После завершения задачи MapReduce выходные результаты можно просмотреть в HDFS. Результаты далее анализируются и обрабатываются в соответствии с потребностями бизнеса.
Часто задаваемые вопросы и решения 1. Неравномерность данных. При крупномасштабном сканировании данных вы можете столкнуться с проблемами неравномерности данных, что приводит к чрезмерной нагрузке на некоторые узлы. Эту проблему можно решить путем оптимизации функций Map и сокращения или использования технологии секционирования Hadoop. 2 Задержка в сети. При сканировании данных могут возникнуть проблемы с задержкой в сети, что влияет на эффективность сканирования. Эту проблему можно смягчить за счет параллельного сканирования и установки разумных таймаутов. 3 Механизм защиты от сканирования. Многие веб-сайты имеют механизмы защиты от сканирования, которые можно обойти, установив разумный пользовательский агент, используя прокси-серверы или динамический IP-адрес.
в заключение Использование Hadoop MapReduce для крупномасштабного сканирования данных — эффективный метод. Он не только может обрабатывать большие объемы данных, но также обладает хорошей масштабируемостью и отказоустойчивостью. Благодаря введению и примерам кода в этой статье читатели смогут понять, как использовать Hadoop MapReduce выполняет сканирование данных и может быть настроен и оптимизирован в соответствии с фактическими потребностями. Поскольку технологии продолжают развиваться, мы с нетерпением ждем Hadoop. MapReduce будет играть более важную роль в будущих задачах сканирования данных.