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