Создание таблицы Hive в HDP с использованием задания Apache Spark

Я написал следующую программу Scala в Eclipse для чтения файла csv из местоположения в HDFS и затем сохранения этих данных в таблицу кустов [я использую изолированную программную среду HDP2.4, работающую на моем VMWare, присутствующем на моей локальной машине]:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext

object HDFS2HiveFileRead {
  def main(args:Array[String]){
    val conf = new SparkConf()
                    .setAppName("HDFS2HiveFileRead")
                    .setMaster("local")

    val sc = new SparkContext(conf)

    val hiveContext = new HiveContext(sc)

    println("loading data") 
    val loadDF = hiveContext.read
                            .format("com.databricks.spark.csv")
                            .option("header","true")
                            .option("delimiter",",")
                            .load("hdfs://192.168.159.129:8020/employee.csv")
    println("data loaded") 
    loadDF.printSchema()

    println("creating table")
    loadDF.write.saveAsTable("%s.%s".format( "default" , "tblEmployee2" ))
    println("table created")

    val selectQuery = "SELECT * FROM default.tblEmployee2"

    println("selecting data")
    val result = hiveContext.sql(selectQuery)

    result.show()}}

Когда я запускаю эту программу из моего Eclipse; с помощью

Запуск от имени -> Приложение Scala

опция: он показывает мне следующие результаты на консоли Eclipse:

Загрузка данных

данные загружены

корень

| - empid: string (nullable = true)

| - empname: строка (nullable = true)

| - empage: string (nullable = true)

создание таблицы

17/06/29 13:27:08 ИНФОРМАЦИЯ CatalystWriteSupport: Инициализированная поддержка записи паркета со схемой Catalyst: { "type": "struct", "fields": [ { "name": "empid", "type": "string", "nullable": true, "metadata": { } }, { "name": "empname", "type": "string", "nullable": true, "metadata": { } }, { "name": "empage", "type": "string", "nullable": true, "metadata": { } } ] } и соответствующий тип сообщения Parquet: message spark_schema {необязательный двоичный empid (UTF8); необязательный двоичный empname (UTF8); необязательное двоичное empage (UTF8); }

таблица создана

выбор данных

+ ----- + -------- + ------ +

| EmpID | EmpName | empage |

+ ----- + -------- + ------ +

| 1201 | Сатиш | 25 |

| 1202 | кришна | 28 |

| 1203 | Amith | 39 |

| 1204 | Джавед | 23 |

| 1205 | prudvi | 23 |

+ ----- + -------- + ------ +

17/06/29 13:27:14 ОШИБКА ShutdownHookManager: Исключительная ситуация при удалении временного каталога Spark: C:\Users\cb\AppData\Local\Temp\spark-c65aa16b-6448-434f-89dc-c318f0797e10 java.io.IOException: Не удалось удалить: C:\Users\cb \ AppData \ Local \ Temp \ spark-c65aa16b-6448-434f-89dc-c318f0797e10

Это показывает, что данные CSV были загружены из нужного расположения HDFS [присутствует в HDP], и таблица с именем tblEmployee2 также была создана в кусте, как я мог читать и видеть результаты в консоли. Я мог бы даже читать эту таблицу снова и снова, выполняя любое искровое задание для чтения данных из этой таблицы.

НО, проблема в том, как только я иду на свой HDP2.4 через шпаклевку и пытаюсь увидеть эту таблицу в улье,

1) Я не мог видеть эту таблицу там.

2) Я полагаю, что этот код создаст управляемую / внутреннюю таблицу в кусте, следовательно, файл csv, присутствующий в данном месте в HDFS, также должен быть перемещен из своего базового местоположения в местоположение метастаза куста, чего не происходит?

3) Я также мог видеть, как папка metastore_db создается в моем Eclipse, означает ли это, что этот tblEmployee2 создается на моей локальной машине / Windows?

4) Как я могу решить эту проблему и попросить мой код создать таблицу кустов в hdp? Есть ли какая-либо конфигурация, которую я здесь пропускаю?

5) Почему я получаю последнюю ошибку в моем исполнении? Любой быстрый ответ / указатель будет оценен.

ОБНОВЛЕНИЕ После долгих раздумий, когда я добавил hiveContext.setConf("hive.metastore.uris","thrift://192.168.159.129:9083")

Код немного изменился, но с некоторыми разрешениями стали появляться проблемы. Теперь я мог видеть эту таблицу [tblEmployee2] в базе данных моего куста по умолчанию, присутствующей в моем VMWare, но она делает это с SparkSQL сама по себе:

17/06/29 22:43:21 WARN HiveContext$$anon$2: Could not persist `default`.`tblEmployee2` in a Hive compatible way. Persisting it into Hive metastore in Spark SQL specific format.

Следовательно, я все еще не могу использовать HiveContext, и мои вышеупомянутые проблемы 2-5 все еще остаются.

С уважением, Бхупеш

1 ответ

Вы запускаете искру в локальном режиме.

 val conf = new SparkConf()
.setAppName("HDFS2HiveFileRead")
                .setMaster("local")

В локальном режиме, когда вы указываете saveAsTable, он пытается создать таблицу на локальном компьютере. Измените вашу конфигурацию для запуска в режиме пряжи.

Вы можете обратиться к приведенному ниже URL-адресу для получения подробной информации: http://www.coding-daddy.xyz/node/7

Другие вопросы по тегам