Статьи

Хранилище данных с Hadoop + Hbase + Hive + SpringBatch — Часть 2

База кода SVN для этой статьи здесь .

В продолжение части 1 этот раздел охватывает

  1. Настройка Hadoop, Hbase, Hive на новую Ubuntu VM
  2. Запустите Hadoop, Hbase и Hive как сервисы
  3. Настройте пакетный проект Spring и запустите тесты
  4. Некоторые полезные команды / советы

Для начала позвольте мне сказать вам, что выбор Hive заключался в том, чтобы понять, не использовать ли Hive в качестве эквивалента JDBC. Это было больше, чтобы понять, как использовать Hive как мощный аналитический механизм хранилища данных.

Настройка Hadoop, Hbase, Hive на новую Ubuntu VM

Загрузите последние версии Hadoop , Hbase и Hive с веб-сайтов Apache. Вы также можете перейти на веб-сайт Cloudera и получить виртуальную машину Cloudera UBuntu и использовать apt-get install hadoop, hbase и hive. Это не сработало для меня, если вы предприимчивы, вы можете попробовать это. Вы также можете попробовать виртуальные машины MapR. И Cloudera, и MapR имеют хорошую документацию и учебные пособия.

Разархивируйте файл в домашнем каталоге, перейдите в файл .profile и добавьте каталоги bin в путь, как показано ниже,

export HADOOP_HOME=<HADOOP HOME>
export HBASE_HOME=<HBASE HOME>
export HIVE_HOME=<HIVE HOME>
export PATH=$PATH:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin

sudo mkdir -p /app/hadoop/tmp

sudo chown <login user>:<machine name>/app/hadoop/tmp

hadoop namenode -format

Установите переменные окружения HADOOP_HOME, HBASE_HOME и HIVE_HOME.
Запустите ifconfig и получите IP-адрес, это будет что-то вроде, 192.168.45.129

Перейдите в файл etc / hosts и добавьте следующую запись:

192.168.45.129 <machine name>

Запустите Hadoop, Hbase и Hive как сервисы

Перейдите в корневую папку hadoop и выполните следующую команду:

start-all.sh

Откройте браузер и зайдите на http: // localhost: 50060 / откроется консоль администратора hadoop. Если есть какие-то проблемы, выполните команду ниже и посмотрите, есть ли исключения

tail -f $HADOOP_HOME/logs/hadoop-<login username>-namenode-<machine name>.log

Hadoop по умолчанию работает в порту 54310.
Перейдите в корневую папку hbase и выполните следующую команду:

start-hbase.sh
tail -f $HBASE_HOME/logs/hbase--master-.log

Посмотрите, есть ли какие-либо ошибки. Hbase работает в порту 60000 по умолчанию.
Перейдите в корневую папку куста и выполните следующую команду:

hive --service hiveserver -hiveconf hbase.master=localhost:60000 mapred.job.tracker=local

Обратите внимание, что, дав ссылку на hbase, мы интегрировали улей с hbase. Также порт hive по умолчанию — 10000. Теперь запустите hive в качестве клиента командной строки следующим образом:

hive -h localhost

Создайте таблицу семян, как показано ниже,

CREATE TABLE weblogs(key int, client_ip string, day string, month string, year string, hour string,
  minute string, second string, user string, loc  string) row format delimited fields terminated by '\t';

CREATE TABLE hbase_weblogs_1(key int, client_ip string, day string, month string, year string, hour string,
  minute string, second string, user string, loc  string)
  STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
  WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, cf1:client_ip, cf2:day, cf3:month, cf4:year, cf5:hour, cf6:minute, cf7:second, cf8:user, cf9:loc")
  TBLPROPERTIES ("hbase.table.name" = "hbase_weblog");

LOAD DATA LOCAL INPATH '/home/hduser/batch-wordcount/weblogs_parse1.txt' OVERWRITE INTO TABLE weblogs;

INSERT OVERWRITE TABLE hbase_weblogs_1 SELECT * FROM weblogs;

Настройте пакетный проект Spring и запустите тесты.
Для настройки этого проекта получите последний код из SVN, упомянутый в начале. Скачайте Gradle и настройте путь в .profile. Теперь выполните следующую команду для загрузки данных,

gradle -Dtest=org.springframework.data.hadoop.samples.DataloadWorkflowTests test

Запустите джунит ниже, чтобы получить данные анализа,

gradle -Dtest=org.springframework.data.hadoop.samples.AnalyzeWorkflowTests test

hadoopVersion составляет 1.0.2. файл build.gradle выглядит так, как показано ниже,

repositories {     // Public Spring artefacts
  mavenCentral()
  maven { url "http://repo.springsource.org/libs-release" }
  maven { url "http://repo.springsource.org/libs-milestone" }
  maven { url "http://repo.springsource.org/libs-snapshot" }
  maven { url "http://www.datanucleus.org/downloads/maven2/" }
  maven { url "http://oss.sonatype.org/content/repositories/snapshots" }
  maven { url "http://people.apache.org/~rawson/repo" }
  maven { url "https://repository.cloudera.com/artifactory/cloudera-repos/"}
}

dependencies {
  compile ("org.springframework.data:spring-data-hadoop:$version")
  { exclude group: 'org.apache.thrift', module: 'thrift' }
  compile "org.apache.hadoop:hadoop-examples:$hadoopVersion"
  compile "org.springframework.batch:spring-batch-core:$springBatchVersion"
  // update the version that comes with Batch
  compile "org.springframework:spring-tx:$springVersion"
  compile "org.apache.hive:hive-service:0.9.0"
  compile "org.apache.hive:hive-builtins:0.9.0"
  compile "org.apache.thrift:libthrift:0.8.0"
  runtime "org.codehaus.groovy:groovy:$groovyVersion"
  // see HADOOP-7461
  runtime "org.codehaus.jackson:jackson-mapper-asl:$jacksonVersion"
  testCompile "junit:junit:$junitVersion"
  testCompile "org.springframework:spring-test:$springVersion"
}

Конфигурация Spring Data Hadoop выглядит следующим образом:

<configuration>
<!-- The value after the question mark is the default value if another value for hd.fs is not provided -->
  fs.default.name=${hd.fs:hdfs://localhost:9000}
  mapred.job.tracker=local</pre>
</configuration>

<hive-client host="localhost" port="10000" />

Весеннее пакетное задание выглядит так, как показано ниже,

<batch:job id="job1">
  <batch:step id="import">
    <batch:tasklet ref="hive-script"/>
  </batch:step>
</batch:job>

Скрипт Spring Data Hive для загрузки данных, как показано ниже,

<hive-tasklet id="hive-script">
  <script>
LOAD DATA LOCAL INPATH '/home/hduser/batch-analysis/weblogs_parse.txt' OVERWRITE INTO TABLE weblogs;
INSERT OVERWRITE TABLE hbase_weblogs_1 SELECT * FROM weblogs;
</script>
</hive-tasklet>

Скрипт Spring Data Hive для анализа данных, как показано ниже,

<hive-tasklet id="hive-script">
<script>    SELECT client_ip, count(user) FROM hbase_weblogs_1 GROUP by client_ip;   </script>
</hive-tasklet>

Некоторые полезные команды / советы

Для запроса hadoop dfs вы можете использовать любые файловые команды Unix, такие как,

hadoop dfs -ls /
hadoop dfs -mkdir /hbase

Если вы ввели безопасный режим в hadoop и он не запускается, вы можете выполнить следующую команду:

hadoop dfsadmin -safemode leave

Если вы хотите найти некоторые ошибки в файловой системе hadoop, вы можете выполнить следующую команду:

hadoop fsck /