FastNetMon

Wednesday 23 October 2013

Установка HDFS на базе Cloudera Hadoop 4.4.0 для CentOS 6

Что есть HDFS?

HDFS - это распределенная файловая система. В данной инструкции мы поставим ее в тестовом режиме! Это небезопасно, в боевом режиме Вы обязательно должны настроить HA или копирование на NFS для метаданных.

Пару слов об аппаратной конфигурации - для начала, мы развертываем HDFS на одном сервере с двумя жесткими дисками (иначе вообще вся затея с распределенной ФС становится бессмысленной). В моем примере диски смонтированы как /data/disk1 и /data/disk2.

Конфигурируем hostname и /etc/hosts

В самом-самом начале пути нужно сделать следующее - открыть редактором /etc/sysconfig/network и в поле HOSTNAME вписать корректный хостнейм адрес машины в виде:
HOSTNAME=hadoop.fastvps.ru

Следом открыть файл hosts: /etc/hosts и там вписать/исправить следующее:
88.198.XX.XX  hadoop.fastvps.ru hadoop

Где 89.198.XX.XX - ВНЕШНИЙ IP адрес сервера, НЕ localhost/127.0.0.1.

После этого в обязательном порядке перезагружаемся, чтобы система подхватила обновленный hostname.

Теперь проверяем, чтобы  хостнейм резолвился во внешний IP командой ping (запись в DNS в данный момент не нужна):
 ping -c 1 hadoop.fastvps.ru
PING hadoop.fastvps.ru (89.198.XX.XX) 56(84) bytes of data.
64 bytes from hadoop.fastvps.ru (89.198.XX.XX): icmp_seq=1 ttl=64 time=0.025 ms
--- hadoop.fastvps.ru ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.025/0.025/0.025/0.000 ms

Все, это позволит избежать кучи проблем в будущем. Корректный хостнейм ОЧЕНЬ важен для Hadoop, кривые данные в нем могут привести к очень и очень плачевным последствиям.

Устанавливаем Java

Итак, для работы Cloudera нам нужна Java версии 1.7 (я использовал update 45), так что идем на сайт Oracle и стягиваем там "jre-7-linux-x64.rpm".

Водружаем ее:
yum install -y jre-7-linux-x64.rpm

Проверяем, что все встало корректно:
java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
Устанавливаем Cloudera Hadoop

Стягиваем репо:
wget http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/cloudera-cdh4.repo -O/etc/yum.repos.d/cloudera-cdh4.repo

Ставим все, что нужно для работы Hadoop HDFS (почти 200 мегабайт пакетов):
yum install hadoop-hdfs-namenode hadoop-hdfs-datanode hadoop-client 
Копируем стандартный конфиг для правки:
cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
Теперь нужно настроить кластер, в файле /etc/hadoop/conf.my_cluster/core-site.xml 
В блок confguration вносим следующее (это имя нашего кластера):

<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.fastvps.ru/</value>
</property> 
<property><name>fs.trash.interval</name> <value>10080</value> </property>
Второй параметр отвечает за активацию корзины (и ее автоочистки через неделю после удаления файла). Обращаю внимание, что корзина работает только с hdfs shell, через API файлы сносятся сразу же.

Далее открываем файл /etc/hadoop/conf.my_cluster/hdfs-site.xml и в блок configuration вносим:

<property> <name>dfs.permissions.superusergroup</name>
<value>hadoop</value></property>
<property> <name>dfs.namenode.name.dir</name>
<value>/data/disk1/dfs/namenode
</value> </property> 
<property>
 <name>dfs.datanode.data.dir</name>
 <value>/data/disk1/dfs/datanode,/data/disk2/dfs/datanode</value>
</property>
<property>
<name>dfs.datanode.failed.volumes.tolerated</name>
<value>1</value>
</property>
<property>
 <name>dfs.replication</name>
<value>2</value>
</property> 

Тут мы задаем пути до папок хранения данных namednode (тут будут метаданные) и datanode (тут будут сами данные). С предпоследним параметром интереснее - это предельное число data нод, которые могут отказать на данном сервере. А вот последний параметр задает стандартное число реплик для файлов. Стандартно стоит 3, но это неудобно для тестового стенда.

Создаем указанные папки (предполагаем, что диски 1 и 2 смонтированы в /data/disk1 и /data/disk2 соответственно):
mkdir -p /data/disk1/dfs/namenode
mkdir -p /data/disk1/dfs/datanode
mkdir -p /data/disk2/dfs/datanode

И конфигурируем их права:
chown -R hdfs:hdfs /data/disk1/dfs/namenode /data/disk1/dfs/datanode /data/disk2/dfs/datanode
chmod 700 /data/disk1/dfs/namenode

Теперь форматируем namenode:
sudo -u hdfs hadoop namenode -format

Запускаем namenode:
/etc/init.d/hadoop-hdfs-namenode start

Запускаем  data node:
/etc/init.d/hadoop-hdfs-datanode start

Создаем свою первую папку:
sudo -u hdfs hadoop fs -mkdir  /mydir
Тестируем работу HDFS

Смотрим листинг корневой директории:
sudo -u hdfs hadoop fs -ls /
Found 1 items
drwxr-xr-x   - hdfs hadoop          0 2013-10-24 00:26 /mydir
Кладем файл в HDFS (ВНИМАНИЕ! НЕ забываем, что мы работаем от имени пользователя hdfs, так что файл в локальной ФС должен быть доступен ему на чтение):
sudo -u hdfs hadoop fs -put /tmp/jre-7-linux-x64.rpm /mydir

Убеждаемся, что он лег:
sudo -u hdfs hadoop fs -ls  /mydir
Found 1 items
-rw-r--r--   3 hdfs hadoop   21203924 2013-10-24 00:36 /mydir/jre-7-linux-x64.rpm
Кстати говоря, большой тестовый файл можно взять вот здесь: http://proof.ovh.net/files/ 

Мониторинг HDFS

Его можно осуществлять посредством веб-скрипта: http://IP_адрес_вашей_namenode:50070/dfshealth.jsp

Настройка HDFS Fuse

Так как каждый раз пользоваться hadoop fs неудобно далеко не всегда, я рекомендую использовать Fuse модуль, чтобы смонтировать HDFS как обычную ФС (не забываем, HDFS - не Posix! Блокировки и правки файлов не поддерживаются).
yum install hadoop-hdfs-fuse
Монтируем:
 hadoop-fuse-dfs dfs://hadoop.fastvps.ru:8020 /mnt
Вуаля, тот же файлик доступен как обычная файловая система:
ls -al /mnt/mydir/
итого 11G
drwxr-xr-x 3 hdfs hadoop 4,0K Окт 24 03:30 .
drwxr-xr-x 3 hdfs hadoop 4,0K Окт 24 03:21 ..
-rw-r--r-- 1 hdfs hadoop  10G Окт 24 03:30 10Gio.dat
Отмонтировать его можно стандартно:
umount /mnt
Что дальше?

В следующей публикации я постараюсь поставить второй сервер как datanode, чтобы на практике протестировать функцию отказоустойчивости HDFS

Установка datanode на отдельном сервере

Устанавливаем Java по аналогии с предыдущим сервером, далее также конфигурируем hostname и /etc/hosts. Данный сервер назовем data1-hadoop.fastvps.ru. 

Подразумеваем, что на данном сервере у нас один жесткий диск и он смонтирован в /data/disk1.

Так как мы подошли к вопросу распределенной фермы, то мы должны адрес name node забить в DNS либо же на каждой data node создать следующую запись в hosts (обоих серверов!!! Также нужно добавить хостнейм клиента на name node, то есть они должны знать друг друга! Иначе ничего работать не будет! Лучше всего, сразу внесите записи в DNS до начала тестов, а также убедитесь, что дата ноды и name нода находятся в одном домене второго уровня):
88.198.xx.xx hadoop.fastvps.ru hadoop

Далее ставим hadoop data node:
yum install -y hadoop-hdfs-datanode
Копируем стандартный конфиг для правки:
cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
Теперь нужно настроить кластер, в файле /etc/hadoop/conf.my_cluster/core-site.xml 
В блок confguration вносим следующее (это имя нашего кластера):

<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.fastvps.ru/</value>
</property> 
<property><name>fs.trash.interval</name> <value>10080</value> </property>

Далее открываем файл /etc/hadoop/conf.my_cluster/hdfs-site.xml и в блок configuration вносим:

<property> <name>dfs.permissions.superusergroup</name>
<value>hadoop</value></property>
<property>
 <name>dfs.datanode.data.dir</name>
 <value>/data/disk1/dfs/datanode</value>
</property>
Создаем необходимую папку:
mkdir -p /data/disk1/dfs/datanode

Выставляем права:
chown -R hdfs:hdfs /data/disk1/dfs/datanode

Запускаем  data node:
/etc/init.d/hadoop-hdfs-datanode start

Теперь можно открыть статистику HDFS и смотреть, как блоки нашего 10 гигабайтного файла реплицируются на вновь добавленный сервер.

Как репликация закончится, можно смело отключать второй сервер (отключив сервер с name node Вы выведете кластер из строя, да) и продолжать работать с файловой системой как ни в чем ни бывало!

Ура!

Источник: http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.2.0/CDH4-Installation-Guide/cdh4ig_topic_11_2.html

1 comment :

  1. Thanks for sharing, nice post!

    Tọa lạc tại địa chỉ 61C Tú Xương. P. 7, Quận 3, TP. HCMCasanova là cafe dep tphcm được thiết kế hoàn toàn theo phong cách độc đáo của nước Ý, đây là quán cafe yên tĩnh tphcm không gian cổ điển đẹp hay cafe cappuccino với hương vị tuyệt hảo hay đây là quán quán cafe đẹp ở sài gòn với không gian tuyệt đẹp hay bạn có biết loi ich cua viec uong cafe đối với sức khỏe chưa, hay Casanova Cafe – không gian quán cafe ngồi làm việc lý tưởng của freelancer hay đây là quán cafe chụp ảnh không tính phí tại sài gòn bạn có thể tha hồ chụp ảnh, đây là quan cafe con hem nho cực đẹp bạn không nên bỏ qua hay đây là quán quan cafe tinh nhan o sai gon thích hợp hẹn hò hay đây là quán cafe học nhóm tphcm cực hợp có phòng riêng hay là 1 trong cà phê lãng mạn với đồ uống giá rẻ với thức uống đặc trưng cực ngon là trà đào cam sả uống 1 lần là nghiền hay đây là điểm hẹn cà phê cuối tuần với Casanova Cafe hay meo giup be ngu ngon giúp bé ngủ ngon giấc hay nôi võng giúp bé ngủ ngon hay cafe tổ chức sinh nhật tphcm cực lý tưởng hay những quán cà phê sân vườn đẹp ở sài gòn bạn không nên bỏ qua hay bạn muốn học bài thì quán cafe yên tĩnh học bài ở sài gòn cực thú vị đấy.

    ReplyDelete

Note: only a member of this blog may post a comment.