Статьи

Настройка Hadoop Single Node


В этом посте я надеюсь поделиться процедурой установки 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

Существует несколько веб-интерфейсов для наблюдения за внутренним поведением, выполнением задания, потреблением памяти и т. Д. Следующим образом.

Мы можем остановить кластер в любое время с помощью следующей команды.

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 и запустили задание уменьшения карты. В следующем посте я расскажу, как настроить многоузловой кластер.

Ура!