127.0.0.1 localhost
192.168.56.108 master
192.168.56.109 region1
192.168.56.110 region2
Необходимо на каждом хосте создать пользователя:
addgroup hadoop
adduser --ingroup hadoop hduser - пароль hduser
usermod -a -G sudo hduser
Пакетным менеджером на каждом хосте ставим java:
apt install openjdk-8-jdk-headless
apt install openjdk-8-jre-headless
Ставим ssh-сервер:
apt install openssh-server
Качаем hadoop - на текущий момент это версии 2.4.11:
wget -c 'https://dlcdn.apache.org/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz'
Развернем архив в каталог /user/local/hadoop (каталог не критичен - можете выбрать любое другое место):
chown -R hduser:hadoop /usr/local/hadoop
Реактируем конфиг core-site.xml:
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.temp.dir</name>
<value>/usr/local/hadoop/hadoop_tmp</value>
</property>
Создаем каталог и даем ему права пользователя hduser:
/usr/local/hadoop/hadoop_tmp
chown hduser:hadoop -R /usr/local/hadoop/hadoop_tmp/
Редактируем hdfs-site.xml:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/hadoop_tmp/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:///usr/local/hadoop/hadoop_tmp/hdfs/datanode</value>
</property>
Редактируем yarn-site.xml:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resoutce-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8050</value>
</property>
Редактируем mapred-site.xml:
<property>
<name>mapreduce.job.tracker</name>
<value>master:5431</value>
</property>
<property>
<name>mapred.framework.name</name>
<value>yarn</value>
</property>
Создаем файл /usr/local/hadoop/etc/hadoop/masters с одной строкой:
192.168.56.108
Создаем файл /usr/local/hadoop/etc/hadoop/slaves в три строки:
192.168.56.108
192.168.56.109
192.168.56.110
До сего момента мы все делали на мастере.
Теперь нужно создать пользователя hduser и поставить java на двух других хостах.
Далее - копируем с мастера на другие хосты:
scp -r /usr/local/hadoop/* hduser@region1:/usr/local/hadoop/
scp -r /usr/local/hadoop/* hduser@region2:/usr/local/hadoop/
13. Генерим ключ на мастере.
Делать это нужно, зайдя в систему как hduser
ssh-keygen -t rsa
Копируем с мастера на другие ноды:
ssh-copy-id -i id_rsa.pub hduser@region1
ssh-copy-id -i id_rsa.pub hduser@region2
Аналогичную операцию нужно проделать на остальных нодах, это нужно для того,
чтобы был беспарольный доступ с любого хоста на любой хост в нашем кластере из 3 хостов.
На мастере создать каталоги:
sudo mkdir -p /usr/local/hadoop/hadoop_tmp/hdfs/namenode
sudo mkdir -p /usr/local/hadoop/hadoop_tmp/hdfs/datanode
Назначить владельцем каталога пользователя hduser группы hadooop:
sudo chown hduser:hadoop -R /usr/local/hadoop/hadoop_tmp/
На двух остальных хостах сделать то же самое, но создать только каталог datanode:
sudo mkdir -p /usr/local/hadoop/hadoop_tmp/hdfs/datanode
sudo chown hduser:hadoop -R /usr/local/hadoop/hadoop_tmp/
В файле hadoop-env.sh прописать на мастере:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
В файл /home/hduser/.bashrc добавить на всех нодах:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
Выполнить команду на мастере:
hdfs namenode -format
Если нет ошибок, запустим hdfs и yarn.
Затем то же самое делаем на двух нодах:
start-dfs.sh
start-yarn.sh
На мастере выполняем команду:
jps
Должны получить что-то типа:
2145 SecondaryNameNode
2691 NodeManager
2330 ResourceManager
1918 DataNode
1727 NameNode
2782 QuorumPeerMain
На других хостах:
2592 NodeManager
1860 DataNode
2069 SecondaryNameNode
1407 QuorumPeerMain
2. Установка Apache Zookeeper
Apache Zookeeper - централизованная служба для поддержки информации о конфигурации,
именования, обеспечения распределенной синхронизации и предоставления групповых услуг.
Качаем zookeeper с официального сайта.
На текущий момент стабильная версия - 3.7.0.
Распаковываем в каталог:
/usr/local/zookeeper
Создаем конфиг:
/usr/local/zookeeper/conf/zoo.cfg
следующего содержания:
tickTime=2000
maxSessionTimeout=50000
syncLimit=5
initLimit=300
autopurge.purgeInterval=1
autopurge.snapRetainCount=5
snapCount=200000
clientPort=2181
maxClientCnxns=100
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
server.1=192.168.56.108:2888:3888
server.2=192.168.56.109:2888:3888
server.3=192.168.56.110:2888:3888
Даем права:
chown -R hduser:hadoop /usr/local/zookeeper
Запускаем от пользователя hduser:
./zkServer.sh start
./zkServer.sh status
Удаляем содержимое каталога:
/usr/local/zookeeper/data
Создать в нем файл:
myid
следующего содержания:
1
Клпируем с мастера по другим хостам:
scp -r hduser@master:/usr/local/zookeeper/* hduser@region1:/usr/local/zookeeper/
scp -r hduser@master:/usr/local/zookeeper/* hduser@region2:/usr/local/zookeeper/
Правим файл myid на двух хостах, проставляем 2 и 3.
Запускаем на каждой ноде:
./zkServer.sh start
Проверяем статус - должен быть либо leader, либо follower:
./zkServer.sh status
3. Установка Apache HBase
Apache Hbase — это:
1. колоночно-ориентированная нереляционная база данных - данные хранятся по столбцам,
столбцы можно обьединять в группы, число столбцов неограничено
2. мультиверсионное хранилище - каждый столбец может иметь несколько версий
3. использует распределенную файловую систему HDFS
4. данные хранятся в виде ключ-значение, ключ составной и состоит их 3 частей -
идентификатор строки, идентификатор столбца и тайм-стамп
5. Физически записи отсортированы по первичному ключу
Хранение очень больших таблиц на миллиарды и триллионы записей
Горизонтальное масштабирование путем добавления новых регионов
Репликация данных по кластерам
Основных процессы:
1. Master server - управление, может быть несколько мастер-серверов
2. Region server - может обслуживать один или более одного региона
Каждый регион физически хранит данные отдельно
Состоит из хранилища на hdfs, буфера на запись, буфера на чтение. лога операций
Добавление регионов происходит автоматически по мере накопления данных
3. ZooKeeper - синхронизация сервисов, следит за доступностью регионов
Поддерживает операции -
1. put - добавить или обновить запись
2. get - получение одной записи по первичному ключу
3. scan - получить массив записей
4. delete - можно удалить запись, столбец или группу столбцов
Ограничения стандартны для такого типа:
1. пакетная обработка, в основном это база на чтение
2. Отсутствуют схемы, транзакции
3. Один индекс на таблицу
4. Ограниченный sql
MapReduce - это процесс выполнения запроса, состоит из 2 частей:
1. map - первичное извлечение данных
2. reduce - получение финального значения на основе первичного
Скачиваем Apache Hbase с официального сайта - https://hbase.apache.org/downloads.html.
На текущий момент стабильная версия - 2.4.11
Распаковываем архив в каталог:
/usr/local/hbase
Назначаем пользователя:
chown -R hduser:hadoop /usr/local/hbase
Редактируем файл:
/usr/local/hbase/conf/hbase-env.sh
Добавим строки:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
Раскомментировать^
export HBASE_MANAGES_ZK=false
export HBASE_LOG_DIR=${HBASE_HOME}/logs
Редактируем файл hbase-site.xml
<property>
<name>hbase.master</name>
<value>192.168.56.108:60000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.56.108:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.56.108,192.168.56.109,192.168.56.110</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/hbase/tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false
</property>
В конфиге
regiomservers
должно быть две строки:
192.168.56.109
192.168.56.110
Копируем с мастера на остальные хосты и назначаем права hduser:
scp -r /usr/local/hbase/* hduser@region1:/usr/local/hbase/
scp -r /usr/local/hbase/* hduser@region2:/usr/local/hbase/
На двух регионах меняем файл hbase-site.xml
<property>
<name>hbase.master</name>
<value>192.168.56.108:60000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.56.108:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.56.108,192.168.56.109,192.168.56.110</value>
</property>
<property>
<name>hbase.zookeeper.distributed</name>
<value>true</value>
</property>
На мастере запускаем:
start-hbase.sh
После чего команда:
jps
должна показать, что добавился процесс:
HMaster
Заходим на hbase по командной строке
./hbase shell
4. Установка Apache Hbase в режиме Standalone
Apache Hbase можно установить в упрощенном режиме Standalone.
При этом не нужно городить кластер из 3-х хостов, все ставится на одном хосте.
Для этого нужно скачать и поставить два пакета - сам Apache Hbase и Apache Zookeeper
Алгоритм:
В нашем распоряжении чистый хост с ubuntu
1. Качаем Hbase отсюда, пока работаем от рутового пользователя
https://dlcdn.apache.org/hbase/stable/
На текущий момент это версия 2.4.12
2. Настройка пользователя
addgroup hadoop
adduser --ingroup hadoop hduser - пароль hduser
usermod -a -G sudo hduser
3. Копируем HBase в
/home/hduser/hbase
4. Ставим java
apt install openjdk-8-jdk-headless
apt install openjdk-8-jre-headless
5. В файле
hbase-env.sh
пишем
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
6. В файле
.bashrc
пропишем
export HBASE_HOME=/home/hduser/hbase
export PATH=$PATH:$HBASE_HOME/bin
7. Файл hbase-site.xml будет такого содержания
<property>
<name>hbase.rootdir</name>
<value>file:///home/hduser/HBASE/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hduser/HBASE/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
В каталоге
/home/hduser/HBASE
после запуска HBase появится локальная файловая система для HBase
8. Дадим права
chown -R hduser:hadoop /home/hduser/hbase
9. Качаем zookeeper
https://zookeeper.apache.org/releases.html
На текущий момент это версия 3.7.1
Ставим его в каталог
/home/hduser/zookeeper
Даем права
chown -R hduser:hadoop /home/hduser/zookeeper
Запускаем от имени пользователя hduser
./zkServer.sh start
10. Заходим в систему как hduser и выполняем команду
start-hbase.sh
После чего проверим командой
jps
которая покажет, что запущен демон
HMaster
11. HBase запущен
Заходим в командную оболочку HBase
./hbase shell
Создадим таблицу
create 'test', 'cf'
Проверим, что таблица создана
list
describe 'test'
Добавим данные
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
Прочитаем данные
scan 'test'
get 'test', 'row1'
Удалим таблицу
disable 'test'
enable 'test'
drop 'test'