В этом посте я надеюсь поделиться процедурой установки Apache Hadoop в одном узле. Hadoop используется для работы с наборами больших данных, где развертывание происходит на недорогом оборудовании. Это структура, уменьшающая отображение, которая отображает сегменты задания среди узлов в кластере для выполнения. Хотя мы не увидим точную мощность Hadoop, выполняющего его на одном узле, это первый шаг к многоузловому кластеру. Настройка одного узла полезна для ознакомления с операциями и приложениями отладки для точности, но производительность может быть намного ниже, чем достижимая.
Я делюсь шагами, которые необходимо выполнить в системе Linux, поскольку она поддерживается как для разработки, так и для производственной платформы для Hadoop. Win32 поддерживается только в качестве платформы разработки, и необходимо соблюдать эквивалентные команды для данных команд Linux. Этот
документ Hadoop содержит краткую информацию о настройке Hadoop. Здесь я делюсь подробным руководством по процессу настройки со следующей линией.
- Предпосылки
- Конфигурации Hadoop
- Запуск кластера с одним узлом
- Выполнение задания по уменьшению карты
Предпосылки
Java 1.6.X
Java должна быть установлена на вашем узле, чтобы запускать Hadoop, поскольку это основанный на Java фреймворк. Мы можем проверить установку Java узла,
pushpalanka@pushpalanka-laptop:~$ java -version java version "1.6.0_23" Java(TM) SE Runtime Environment (build 1.6.0_23-b05) Java HotSpot(TM) Server VM (build 19.0-b09, mixed mode)
Если это не дает намеченный вывод, нам нужно установить Java, запустив,
pushpalanka@pushpalanka-laptop:~$ sudo apt-get install sun-java6-jdk
или
запустить загруженный
двоичный установочный пакет Java . Затем установите переменную среды JAVA_HOME в соответствующем файле конфигурации (.bashrc для пользователей оболочки Linux bash).
Создать пользователя Hadoop
На этом этапе мы создаем учетную запись пользователя, предназначенную для установки Hadoop. Это не обязательный шаг, но рекомендуется из соображений безопасности и простоты управления узлами. Поэтому мы создаем группу с именем ‘hadoop’ и добавляем нового пользователя в группу с именем ‘hpuser’ (имена могут быть по нашему выбору) с помощью следующих команд.
pushpalanka@pushpalanka-laptop:~$ sudo addgroup hadoop pushpalanka@pushpalanka-laptop:~$ sudo adduser --ingroup hadoop hpuser pushpalanka@pushpalanka-laptop:~$ su hpuser hpuser@pushpalanka-laptop:~$
Теперь поработаем как hpuser, с последней командой.
Включить доступ по SSH
Hadoop требует SSH (Secure Shell) доступа к машинам, которые он использует в качестве узлов. Это необходимо для создания защищенного канала для обмена данными. Таким образом, даже в одном узле локальному узлу необходим доступ SSH для hpuser для обмена данными для операций Hadoop. Обратитесь к
этой документации, если вам нужно больше информации о SSH.
Мы можем установить SSH с помощью следующей команды.
hpuser@pushpalanka-laptop:~$ sudo apt-get install ssh
Теперь давайте попробуем SSH localhost без ключевой фразы.
hpuser@pushpalanka-laptop:~$ ssh localhost Linux pushpalanka-laptop 2.6.32-33-generic #72-Ubuntu SMP Fri Jul 29 21:08:37 UTC 2011 i686 GNU/Linux Ubuntu 10.04.4 LTS Welcome to Ubuntu! ................................................
Если это не дает что-то похожее на вышеприведенное, мы должны включить SSH-доступ к localhost следующим образом.
Сгенерируйте пару ключей RSA без пароля. (Мы не используем пароль только потому, что тогда он будет запрашивать пароль при каждом взаимодействии Hadoop с узлом.)
hpuser@pushpalanka-laptop:~$ssh-keygen -t rsa -P ""
Затем нам нужно объединить сгенерированный открытый ключ в список авторизованных ключей localhost. Это делается следующим образом. Затем убедитесь, что ‘ssh localhost’ успешен.
hpuser@pushpalanka-laptop:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
Теперь мы готовы перейти на Hadoop. ? Используйте последнюю стабильную версию с
сайта Hadoop, и я использовал hadoop-1.0.3.
Конфигурации Hadoop
Установить Hadoop Home
Поскольку мы устанавливаем JAVA_HOME в начале этого поста, нам нужно также установить HADOOP_HOME. Откройте тот же файл (.bashrc) и добавьте следующие две строки в конце.
export HADOOP_HOME=<absolute path to the extracted hadoop distribution> export PATH=$PATH:$HADOOP_HOME/bin
Отключить IPv6
Поскольку не будет практической необходимости использовать IPv6-адресацию внутри кластера Hadoop, мы отключаем эту функцию, чтобы она была менее подвержена ошибкам. Откройте файл HADOOP_HOME / conf / hadoop-env.sh и добавьте следующую строку.
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
Задать пути и конфигурацию
В тот же файл hadoop-env.sh добавьте также JAVA_HOME.
export JAVA_HOME=<path to the java installation>
Затем нам нужно создать каталог для использования в качестве HDFS (распределенной файловой системы Hadoop). Сделайте каталог в любом месте по вашему выбору и убедитесь, что владельцем каталога является «hpuser». Я буду ссылаться на это как ‘temp_directory’. Мы можем сделать это,
hpuser@pushpalanka-laptop:~$ sudo chown hpuser:hadoop <absolute path to temp_directory>
Теперь мы добавим следующие сегменты свойств в соответствующий файл внутри тегов <configuration> …… </ configuration>.
конф / ядро-site.xml
<property> <name>hadoop.tmp.dir</name> <value>path to temp_directory</value> <description>Location for HDFS.</description> </property> <property> <name>fs.default.name</name> <value>hdfs://localhost:54310</value> <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. </description> </property>
конф / mapred-site.xml
<property> <name>mapred.job.tracker</name> <value>localhost:54311</value> <description>The host and port that the MapReduce job tracker runs at. </description> </property>
конф / HDFS-site.xml
<property> <name>dfs.replication</name> <value>1</value> <description>Default number of block replications. </description> </property>
Приведенное выше значение должно быть определено с учетом приоритета скорости, пространства и отказоустойчивости.
Формат HDFS
Эта операция необходима каждый раз, когда мы создаем новый кластер Hadoop. Если мы выполним эту операцию на работающем кластере, все данные будут потеряны. В основном это создает распределенную файловую систему Hadoop поверх локальной файловой системы кластера.
hpuser@pushpalanka-laptop:~$ <HADOOP_HOME>/bin/hadoop namenode -format 12/09/20 14:39:56 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = pushpalanka-laptop/127.0.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 1.0.3 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1335192; compiled by 'hortonfo' on Tue May 8 20:31:25 UTC 2012 ************************************************************/ ... 12/09/20 14:39:57 INFOnamenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at pushpalanka-laptop/127.0.1.1 ************************************************************/
Если вывод такой, как указано выше, HDFS успешно отформатирован. Теперь мы почти закончили и готовы увидеть действие.
Запуск кластера с одним узлом
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ ./start-all.sh
и ты увидишь,
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ ./start-all.sh starting namenode, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-namenode-pushpalanka-laptop.out localhost: starting datanode, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-datanode-pushpalanka-laptop.out localhost: starting secondarynamenode, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-secondarynamenode-pushpalanka-laptop.out starting jobtracker, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-jobtracker-pushpalanka-laptop.out localhost: starting tasktracker, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-tasktracker-pushpalanka-laptop.out
который запускает несколько узлов и трекеров. Мы можем наблюдать эти процессы Hadoop, используя инструмент jps из Java.
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ jps 5767 NameNode 6619 Jps 6242 JobTracker 6440 TaskTracker 6155 SecondaryNameNode 5958 DataNode
Также мы можем проверить порты, которые Hadoop настроен на прослушивание,
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ sudo netstat -plten | grep java [sudo] password for hpuser: tcp 0 0 0.0.0.0:33793 0.0.0.0:* LISTEN 1001 175415 8164/java .... tcp 0 0 0.0.0.0:60506 0.0.0.0:* LISTEN 1001 174566 7767/java tcp 0 0 0.0.0.0:50075 0.0.0.0:* LISTEN 1001 176269 7962/java
Существует несколько веб-интерфейсов для наблюдения за внутренним поведением, выполнением задания, потреблением памяти и т. Д. Следующим образом.
- http: // localhost: 50070 / — веб-интерфейс NameNode
- http: // localhost: 50030 / — веб-интерфейс JobTracker
- http: // localhost: 50060 / — веб-интерфейс TaskTracker
В настоящее время эта информация не будет отображаться, так как мы не ставили задачи для выполнения, чтобы наблюдать за ходом работы.
Мы можем остановить кластер в любое время с помощью следующей команды.
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ ./stop-all.sh stopping jobtracker localhost: stopping tasktracker stopping namenode localhost: stopping datanode localhost: stopping secondarynamenode
Выполнение работы по уменьшению карты
Давайте попробуем закончить с помощью Hadoop. Мы можем использовать пример подсчета слов, распространяемый с Hadoop, как описано здесь на
вики Hadoop . Вкратце, он принимает некоторые текстовые файлы в качестве входных данных, подсчитывает количество повторений отдельных слов, отображающих каждую строку в маппере, и выводит уменьшенный результат в виде текстового файла.
сначала создайте папку и скопируйте некоторые файлы .txt, содержащие несколько 10000 слов. Мы собираемся посчитать повторения отдельных слов тех.
hpuser@pushpalanka-laptop:~/tempHadoop$ ls -l total 1392 -rw-r--r-- 1 hpuser hadoop 1423810 2012-09-21 02:10 pg5000.txt
Затем перезапустите кластер, используя файл start-all.sh, как было сделано ранее.
Скопируйте пример входного файла в HDFS.
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -copyFromLocal /home/hpuser/tempHadoop/ /user/hpuser/testHadoop
Давайте проверим, правильно ли копируется HDFS,
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -ls /user/hpuser/testHadoop Found 1 items -rw-r--r-- 1 hpuser supergroup 1423810 2012-09-21 02:17 /user/hpuser/testHadoop/pg5000.txt
Теперь входные данные готовы. Давайте запустим карту сокращения работы. Для этого мы используем банку, распространяемую с помощью Hadoop, которая написана для того, чтобы сделать все необходимое, которая позже может обратиться и узнать, как все это делается.
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop jar hadoop*examples*.jar wordcount /user/hpuser/testHadoop /user/hpuser/testHadoop-output 12/09/21 02:24:34 INFO input.FileInputFormat: Total input paths to process : 1 12/09/21 02:24:34 INFO util.NativeCodeLoader: Loaded the native-hadoop library 12/09/21 02:24:34 WARN snappy.LoadSnappy: Snappy native library not loaded 12/09/21 02:24:34 INFO mapred.JobClient: Running job: job_201209210216_0003 12/09/21 02:24:35 INFO mapred.JobClient: map 0% reduce 0% 12/09/21 02:24:51 INFO mapred.JobClient: map 100% reduce 0% 12/09/21 02:25:06 INFO mapred.JobClient: map 100% reduce 100% 12/09/21 02:25:11 INFO mapred.JobClient: Job complete: job_201209210216_0003 12/09/21 02:25:11 INFO mapred.JobClient: Counters: 29 12/09/21 02:25:11 INFO mapred.JobClient: Job Counters 12/09/21 02:25:11 INFO mapred.JobClient: Launched reduce tasks=1 12/09/21 02:25:11 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=17930 12/09/21 02:25:11 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 12/09/21 02:25:11 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 12/09/21 02:25:11 INFO mapred.JobClient: Launched map tasks=1 12/09/21 02:25:11 INFO mapred.JobClient: Data-local map tasks=1 12/09/21 02:25:11 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=14153 12/09/21 02:25:11 INFO mapred.JobClient: File Output Format Counters 12/09/21 02:25:11 INFO mapred.JobClient: Bytes Written=337639 12/09/21 02:25:11 INFO mapred.JobClient: FileSystemCounters 12/09/21 02:25:11 INFO mapred.JobClient: FILE_BYTES_READ=466814 12/09/21 02:25:11 INFO mapred.JobClient: HDFS_BYTES_READ=1423931 12/09/21 02:25:11 INFO mapred.JobClient: FILE_BYTES_WRITTEN=976811 12/09/21 02:25:11 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=337639 12/09/21 02:25:11 INFO mapred.JobClient: File Input Format Counters 12/09/21 02:25:11 INFO mapred.JobClient: Bytes Read=1423810 12/09/21 02:25:11 INFO mapred.JobClient: Map-Reduce Framework 12/09/21 02:25:11 INFO mapred.JobClient: Map output materialized bytes=466814 12/09/21 02:25:11 INFO mapred.JobClient: Map input records=32121 12/09/21 02:25:11 INFO mapred.JobClient: Reduce shuffle bytes=466814 12/09/21 02:25:11 INFO mapred.JobClient: Spilled Records=65930 12/09/21 02:25:11 INFO mapred.JobClient: Map output bytes=2387668 12/09/21 02:25:11 INFO mapred.JobClient: CPU time spent (ms)=9850 12/09/21 02:25:11 INFO mapred.JobClient: Total committed heap usage (bytes)=167575552 12/09/21 02:25:11 INFO mapred.JobClient: Combine input records=251352 12/09/21 02:25:11 INFO mapred.JobClient: SPLIT_RAW_BYTES=121 12/09/21 02:25:11 INFO mapred.JobClient: Reduce input records=32965 12/09/21 02:25:11 INFO mapred.JobClient: Reduce input groups=32965 12/09/21 02:25:11 INFO mapred.JobClient: Combine output records=32965 12/09/21 02:25:11 INFO mapred.JobClient: Physical memory (bytes) snapshot=237834240 12/09/21 02:25:11 INFO mapred.JobClient: Reduce output records=32965 12/09/21 02:25:11 INFO mapred.JobClient: Virtual memory (bytes) snapshot=778846208 12/09/21 02:25:11 INFO mapred.JobClient: Map output records=251352
Пока работа выполняется, если мы опробуем ранее упомянутые веб-интерфейсы, мы сможем наблюдать за ходом и использованием ресурсов в обобщенном виде. Как указано в команде, выходной файл, содержащий количество слов, записывается в / user / hpuser / testHadoop-output.
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -ls /user/hpuser/testHadoop-output Found 3 items -rw-r--r-- 1 hpuser supergroup 0 2012-09-21 02:25 /user/hpuser/testHadoop-output/_SUCCESS drwxr-xr-x - hpuser supergroup 0 2012-09-21 02:24 /user/hpuser/testHadoop-output/_logs -rw-r--r-- 1 hpuser supergroup 337639 2012-09-21 02:25 /user/hpuser/testHadoop-output/part-r-00000
Чтобы увидеть, что находится внутри файла, давайте скопируем его в локальную файловую систему.
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -getmerge /user/hpuser/testHadoop-output /home/hpuser/tempHadoop/out 12/09/21 02:38:10 INFO util.NativeCodeLoader: Loaded the native-hadoop library
Здесь опция getmerge используется для объединения, если имеется несколько файлов, тогда указывается расположение выходной папки в HDFS и желаемое место для вывода в локальной файловой системе. Теперь вы можете перейти к указанной выходной папке и открыть файл результатов, который будет выглядеть следующим образом, в соответствии с вашим входным файлом.
"1 1 "1," 1 "35" 1 "58," 1 "AS". 1 "Apple 1 "Abs 1 "Ah! 1
Теперь мы завершили настройку кластера с одним узлом с помощью Apache Hadoop и запустили задание уменьшения карты. В следующем посте я расскажу, как настроить многоузловой кластер.
Ура!