У нас отличные новости. Мы рады объявить о выходе Big Data Tools — нового плагина для IntelliJ IDEA, который обеспечивает интеграцию со Spark и поддерживает редактирование и запуск Zeppelin-ноутбуков. Теперь вы можете создавать, редактировать и запускать Zeppelin notebooks прямо из IDE. Плагин предоставляет умную навигацию, автодополнение, инспекции и быстрые исправления, а также рефакторинг кода внутри ноутбуков.

Что уже поддерживается

  • Просмотр, создание и удаление ноутбуков
  • Помощь при написании Scala-кода
    • Автодополнение
    • Рефакторинг Rename
    • Экстракт переменной, метода или параметра
    • Переход к декларации
    • Поиск использований

  • Создание и удаление параграфов
  • Запуск параграфов
  • Просмотр вывода параграфов
  • Поддержка базовой визуализации

Пока что помощь при написании кода работает только для Scala. Другие языки будут поддержаны позже. Кроме того, мы не собираемся ограничиваться поддержкой Zeppelin и планируем добавить больше возможностей, которые будут полезны для тех, кто работает с большими данными.

Если вам не терпится увидеть Big Data Tools в действии, посмотрите это короткое видео:


А лучше попробуйте плагин сами! Как это сделать, читайте далее.

Как использовать плагин

  • Убедитесь, что вы используете IntelliJ IDEA Ultimate 2019.2 (обратите внимание, плагин пока не работает с EAP 2019.3).
  • Проверьте, установлены ли плагины BashSupport, Python и Scala (подойдут свежие версии). Пока что их придется устанавливать вручную — мы скоро это исправим.
  • Установите новейшую сборку плагина Big Data Tools.
  • Если все работает как надо, после перезапуска IDE справа появится окно инструментов Big Data Tools. Откройте его, кликните по значку «+» на панели инструментов в окне и выберите Zeppelin.
  • В диалоговом окне подключения Zeppelin укажите параметры для подключения вашего экземпляра Zeppelin (хост, порт, учетные данные и т.д.). Для проверки соединения используйте Test Connection.
  • После настройки конфигурации Zeppelin вы увидите этот экземпляр в окне инструментов вместе с деревом ноутбуков. Теперь вы сможете управлять ноутбуками и открывать их в редакторе.

Что дальше?

Прежде всего, мы не собираемся ограничиваться интеграцией с Zeppelin и Spark, которую мы, конечно, будем улучшать. Мы планируем поддержать больше инструментов для работы с большими данными: добавить интеграцию с распределенными файловыми системами, такими как HDFS и S3, реализовать встроенное средство просмотра файлов Parquet и улучшить поддержку SQL.

Вот примерный план нашей работы в обозримом будущем:

  • Ноябрь 2019: совместимость с IntelliJ IDEA Ultimate 2019.3 EAP.
  • Ноябрь 2019: интеграция с S3 (проводник).
  • Декабрь 2019: базовая поддержка SQL (подсветка, автодополнение, автоформатирование и т.д.).
  • Январь 2020: интеграция с HDFS (проводник) и средство просмотра Parquet-файлов.
  • Февраль 2020: базовая интеграция с Hadoop и Spark (пользовательские интерфейсы YARN, Spark и т.д.).
  • Весна/лето 2020: поддержка Python в Zeppelin-ноутбуках (мы также рассматриваем вопрос о совместимости плагина с PyCharm Professional Edition, сообщим об этом позже).

Это неокончательный план. Мы будем корректировать его на основе ваших отзывов, чтобы быть уверенными, что мы сосредоточены на нужных вещах. Пожалуйста, сообщайте нам об ошибках и делитесь мнением о том, каких фич недостает и как, по-вашему, должна работать та или иная функция.

Что еще важно знать о новом плагине

Плагин Big Data Tools совместим только с IntelliJ IDEA Ultimate и недоступен в Community Edition. Мы еще не знаем, попадет ли он в Community Edition. На данный момент таких планов у нас нет.
То же самое касается и других сред разработки. Мы пока не знаем, будет ли плагин совместим с другими IDE. На данный момент у нас есть только предварительный план добавить совместимость с PyCharm Professional Edition, как только в плагине появится поддержка Python. По мере развития плагина мы сможем лучше понимать, куда нам стоит двигаться в контексте его поддержки в других IDE.

У меня нет лицензии на IntelliJ IDEA Ultimate. Как мне попробовать плагин?

  • Если вы активно участвуете в любом проекте с открытым исходным кодом, связанном с большими данными, напишите нам.
  • Если вы хотите написать о Big Data Tools, свяжитесь с нами, и мы предоставим вам расширенную пробную версию, чтобы вы могли оценить плагин.
  • Если вы не являетесь ни коммиттером, ни блогером, но проявляете интерес к большим данным, обратитесь к нам за расширенной пробной версией (например, до 3 месяцев). Это предложение ограничено.

Как оставить отзыв

Мы очень ждем ваших отзывов о плагине. Любые вопросы вы можете задать в комментариях к этому посту. Замечания и предложения оставляйте в нашем трекере.
Вы также можете поделиться своими впечатлениями о плагине, пройдя короткий опрос. Это займет всего минуту.

Конструктивная критика поможет нам сделать вашу работу со Spark, Zeppelin и большими данными максимально удобной и эффективной. Поэтому не стесняйтесь делиться своими отзывами и предложениями — нам это важно.

P. S. Особенно приятно, что выход плагина совершенно случайно совпал с нашим участием в Spark AI Summit. Так что если вы вдруг окажетесь на этой конференции, обязательно приходите на наш стенд: сможете посмотреть на плагин в действии и поделиться своими впечатлениями.

Комментарии (16)


  1. endymion
    16.10.2019 17:01
    +1

    Все-таки переводить «Notebooks» как ноутбук — не есть хорошо.


  1. sshikov
    16.10.2019 19:33

    Опрос не открывается.


    1. andreycheptsov Автор
      17.10.2019 08:19

      Спасибо, поправили!


  1. sshikov
    16.10.2019 19:55
    +1

    Как Spark + Java 8 + Scala разработчик на Hadoop скажу вот что: нам для работы со Spark более чем хватает Community. Спарк вполне запускается локально на машине разработчика, и вполне может при этом работать с кластером (проблемы при этом — ну разве что правильная настройка Kerberos). У нас Jupiter, и Hue. А еще например Hbase, и Kafka. И Oozie. Кроме паркета мы чего только не используем, из очевидных — Avro и CSV, а еще JSON, к примеру. Scala плагин есть, и он более-менее работает (далеко не идеально, впрочем).

    И вот смотрю я на этот зооопарк, и думаю — а нафига бы мне пригодился такой вот инструмент? И прихожу к выводу, что ни для чего он мне не нужен. Нашим DataScience коллегам — возможно и подошел бы, но они а) пишут на PySpark, то есть на сегодня в пролете, и б) у них Jupiter, а не Цеппелин. Базовая интеграция со Spark на Hedoop… ну хм. И что, отладку на кластере напишете? Авторизацию в Kerberos (IPA), в количестве N штук, несколько кластеров одновременно. Интеграция с и.т.д (например, Hive, но HBase и кафка тоже напрашивается) нужна позарез. Причем со всем и.т.д. одновременно.


    1. Yo1
      16.10.2019 23:32

      а нам бы пригодилось. по данным с кластера красивые отчетики прямо в родной среде вывести.
      зепелин что бы поставить надо админов привлекать, ставить stb, открывать порты. сложно…


      1. andreycheptsov Автор
        17.10.2019 10:18

        Расскажите подробнее про сложности настройки. Используете ли вы Spark? Удобно ли было бы запускать Zeppelin или Spark локально?


        1. Yo1
          17.10.2019 13:48

          у нас на кластере cloudera 5.x, там по дефолту спарк еще из первой ветки. на узлах кластера стоит parcel c 2.x веткой, а на машинках что имеют доступ к узлам кластера похоже не по ставили. т.е. надо или с админами договариваться или самому собирать ванильный, который тоже так просто не собрался.
          и локально че-то не работает, зепелин коверкает похоже логи и даже не понять что у него не так

          2019-10-17 08:48:30 INFO Client:54 - Setting up container launch context for our AM
          2019-10-17 08:48:30 INFO Client:54 - Setting up the launch environment for our AM container
          2019-10-17 08:48:30 INFO Client:54 - Preparing resources for our AM container
          2019-10-17 08:48:32 WARN Client:66 - Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
          2019-10-17 08:48:44 INFO Client:54 - Uploading resource file:/tmp/spark-e2b2fd0e-955d-43b7-a203-d86e7680b38a/__spark_libs__8513377897181943277.zip -> hdfs://censoredfs/user/censored/.sparkStaging/application_1570322815840_17054/__spark_libs__8513377897181943277.zip

          at org.apache.zeppelin.interpreter.remote.RemoteInterpreterManagedProcess.start(RemoteInterpreterManagedProcess.java:205)
          at org.apache.zeppelin.interpreter.ManagedInterpreterGroup.getOrCreateInterpreterProcess(ManagedInterpreterGroup.java:64)
          at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getOrCreateInterpreterProcess(RemoteInterpreter.java:111)
          at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.internal_create(RemoteInterpreter.java:164)
          at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.open(RemoteInterpreter.java:132)
          at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getFormType(RemoteInterpreter.java:299)
          at org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:407)
          at org.apache.zeppelin.scheduler.Job.run(Job.java:188)
          at org.apache.zeppelin.scheduler.RemoteScheduler$JobRunner.run(RemoteScheduler.java:315)
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
          at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:748)

          INFO [2019-10-17 08:49:25,755] ({pool-2-thread-2} VFSNotebookRepo.java[save]:196) - Saving note:2ERC9JRNE
          INFO [2019-10-17 08:49:25,769] ({pool-2-thread-2} SchedulerFactory.java[jobFinished]:120) - Job 20191017-083503_1590331634 finished by scheduler org.apache.zeppelin.interpreter.remote.RemoteInterpreter-spark:shared_process-shared_session
          INFO [2019-10-17 08:55:06,098] ({Exec Default Executor} RemoteInterpreterManagedProcess.java[onProcessComplete]:243) - Interpreter process exited 0


          удобно наверно было бы запускать из идеи в режиме yarn-cluster, т.е. драйвер программа где-то там на кластере жить будет.


          1. andreycheptsov Автор
            17.10.2019 14:02

            Учитывая, что IntelliJ IDEA общается с Zeppelin через HTTP и тот же адрес и порт, который используется в браузере, проблем использования Zeppelin из IDE быть не должно.
            Позже, мы планируем также добавить поддержку мониторинга Spark джоб. Для этого нужно будет открыть хост и порт Spark Job History Server.


      1. sshikov
        17.10.2019 13:21

        Насколько я понял, выполнение все равно на кластере. Почему порты-то вдруг станет легче открывать? А в целом вполне верю, что может пригодится — просто не всем.


    1. andreycheptsov Автор
      17.10.2019 10:17

      Прошу прощение что раньше не ответил. Во-первых, спасибо за обратную связь.
      > Как Spark + Java 8 + Scala разработчик на Hadoop скажу вот что: нам для работы со Spark более чем хватает Community.
      Вполне могу понять. Хотя, если честно, мое мнение, более тесная интеграция со Spark не помешала бы: это и мониторинг джоб и более простой/удобный запуск Spark приложений, и т.п.
      > У нас Jupiter, и Hue.
      Вот прямо сейчас у меня задача понять, как мы можем упростить жизнь разработчиков Spark, которые используют Jupyter.
      > Кроме паркета мы чего только не используем, из очевидных — Avro и CSV, а еще JSON, к примеру.
      Думаю поддержка Avro стоит на очереди. CSV и JSON вроде как уже более или менее поддерживаются.
      > Интеграция с и.т.д (например, Hive, но HBase и кафка тоже напрашивается) нужна позарез.
      Да, желание ближе подружиться с Hive и начать предлагать полезные фичи – есть и, уверен, мы займемся этим в ближайшее время.
      Так или иначе, скажите, если у вас будет как-нибудь время созвониться на полчасика. Я бы с удовольствием подробнее по-расспросил, про потребности. С нас не заржавеет. ;-)
      В любом случае, спасибо огромное за обратную связь.


      1. sshikov
        17.10.2019 13:25

        >Хотя, если честно, мое мнение, более тесная интеграция со Spark не помешала бы: это и мониторинг джоб и более простой/удобный запуск Spark приложений, и т.п.
        Да, само собой. Я говорил исключительно про текущие планы, которые уж так сложилось, слегка не про нас. Что в целом такое может пригодится — тут сомнения может и есть, но они исключительно в том, что задачи эти довольно сложные. Ну например отладка в ярн — это такое себе развлечение, когда вы не знаете ни числа процессов, ни хосты, где они запустились, и вообще ничего. И все обычные методы отладки дефакто не работают.


      1. sshikov
        17.10.2019 13:31

        >> Кроме паркета мы чего только не используем, из очевидных — Avro и CSV, а еще JSON, к примеру.
        Думаю поддержка Avro стоит на очереди. CSV и JSON вроде как уже более или менее поддерживаются.

        В принципе, еще одна интересная тема — это поддержка разных форматов схем. Ну то есть, упрощенно — у авро своя схема, у паркета своя, а у Hive своя. И преобразование между ними, когда это нужно — не всегда простая задача. Hive пытается ее решать, но нам, к примеру, новые версии Hive пока не светят (потому что Hadoop ограничен 2.6, а на нем новые версии далеко не всего работают).


  1. Whiletruefork
    17.10.2019 21:02

    Привет, автор! Пишет архитектор бигдат/микросервисов повелитель. Все это тащить в среду разработки оч хорошо, но мало интересно, больше админские фичи, ну ок если sparksql синтаксис втащите, самое ценное перформанс тюнниг, план запросов и ну вы поняли, поддержку разбора и анализа графа — вот что круто, та инфа, которую неудобно смотреть в консоли, чарты по ней, и пр визуализации. А ставить идею куда в банковский прод что бы историю джобов смотреть, ну зачем. Круто если можно смотреть на то что внутри спарка, а не то что в рестапи, не и5теграшка с ярном или керберосом, разработка крч, а не админство.


  1. kxl
    17.10.2019 21:27

    Имею Apache Zeppelin Version 0.7.3, плагин к нему не коннектится…
    Так-же попробовал более новый, непонятно какой версии, в About пусто, но так-же плагин пишет — Zeppelin Unreachable


    1. andreycheptsov Автор
      17.10.2019 21:34

      Действительно. Пока работает только начиная с 0.8.x. Вот тикет: https://youtrack.jetbrains.com/issue/BDIDE-375
      Планируем в ближайшем апдейте починить


      1. kxl
        17.10.2019 21:50

        второй, вроде, как из 0.8.x… там уже точку надо оставлять в конце строки, чтобы цепочку вызовов по строкам разносить