Создание таблицы кустов в 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

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

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

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

корень

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

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

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

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

17/06/29 13:27:08 INFO CatalystWriteSupport: Инициализированная Parquet WriteSupport со схемой 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); необязательный двоичный формат (UTF8); }

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

выбор данных

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

| empid | empname | empage |

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

| 1201 | сатиш | 25 |

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

| 1203 | Амит | 39 |

| 1204 | javed | 23 |

| 1205 | прудви | 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 через putty и пытаюсь увидеть эту таблицу в улье,

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 все еще сохраняются.

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


person Chauhan B    schedule 29.06.2017    source источник


Ответы (1)


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

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

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

Дополнительную информацию можно найти по указанному ниже URL: http://www.coding-daddy.xyz/node/7

person Lakshman Battini    schedule 29.06.2017
comment
Спасибо за ваш ответ @Lakshman Battini, но, сказав это, я просто прошу мой Spark работать в локальном режиме. Теперь я мог заметить, что я пропустил предоставление IP-адреса и порта бережливого сервера улья. Что, когда я обновил свой код, он начал работать в некоторой степени, но потом я начал получать проблемы, связанные с разрешениями. Я обновляю / редактирую свой вопрос с учетом последних изменений. - person Chauhan B; 29.06.2017