Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

Apache Hadoop Hbase Cluster

 HADOOP - это свободный фреймворк, разработанный Apache Software Foundation. 
 Представляет собой набор программных средств для распределенного хранения и обработки массивов данных большого объема (BigData). 
 HADOOP следует применять тогда, когда классические методы обработки информации становятся неприменимы. 
 Например, когда простые запросы к вашей SQL базе данных начинают выполняться часами. 
 
  Установка кластера состоит из 3-х отдельных частей:
  1. Установка Apache Hadoop   
  2. Установка Apache Zookeeper
  3. Установка Apache Hbase
  4. Установка Apache Hbase в режиме Standalone
 
 

1. Установка Apache Hadoop

В кластере будет 3 хоста - мастер и два региона. На каждом хосте в файле /etc/hosts пропишем ip (пропишите свои собственные ip-шники):
 

 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'
 


Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье