2015-01-08 3 views
2

Я пытаюсь использовать CDH 5.3.0 для запуска Spark's Thrift Server. Я пытаюсь следовать инструкциям Spark SQL, но я даже не могу использовать опцию --help для успешной работы. На выходе ниже он умирает, потому что он не может найти класс HiveServer2.Spark SQL Thrift Server на CDH 5.3.0

$ /usr/lib/spark/sbin/start-thriftserver.sh --help 
Usage./sbin/start-thriftserver [options] [thrift server options] 
Options: 
    --master MASTER_URL   spark://host:port, mesos://host:port, yarn, or local. 
    --deploy-mode DEPLOY_MODE Whether to launch the driver program locally ("client") or 
           on one of the worker machines inside the cluster ("cluster") 
           (Default: client). 
    --class CLASS_NAME   Your application's main class (for Java/Scala apps). 
    --name NAME     A name of your application. 
    --jars JARS     Comma-separated list of local jars to include on the driver 
           and executor classpaths. 
    --py-files PY_FILES   Comma-separated list of .zip, .egg, or .py files to place 
           on the PYTHONPATH for Python apps. 
    --files FILES    Comma-separated list of files to be placed in the working 
           directory of each executor. 

    --conf PROP=VALUE   Arbitrary Spark configuration property. 
    --properties-file FILE  Path to a file from which to load extra properties. If not 
           specified, this will look for conf/spark-defaults.conf. 

    --driver-memory MEM   Memory for driver (e.g. 1000M, 2G) (Default: 512M). 
    --driver-java-options  Extra Java options to pass to the driver. 
    --driver-library-path  Extra library path entries to pass to the driver. 
    --driver-class-path   Extra class path entries to pass to the driver. Note that 
           jars added with --jars are automatically included in the 
           classpath. 

    --executor-memory MEM  Memory per executor (e.g. 1000M, 2G) (Default: 1G). 

    --help, -h     Show this help message and exit 
    --verbose, -v    Print additional debug output 

Spark standalone with cluster deploy mode only: 
    --driver-cores NUM   Cores for driver (Default: 1). 
    --supervise     If given, restarts the driver on failure. 

Spark standalone and Mesos only: 
    --total-executor-cores NUM Total cores for all executors. 

YARN-only: 
    --executor-cores NUM  Number of cores per executor (Default: 1). 
    --queue QUEUE_NAME   The YARN queue to submit to (Default: "default"). 
    --num-executors NUM   Number of executors to launch (Default: 2). 
    --archives ARCHIVES   Comma separated list of archives to be extracted into the 
           working directory of each executor. 

Thrift server options: 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hive/service/server/HiveServer2 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 
Caused by: java.lang.ClassNotFoundException: org.apache.hive.service.server.HiveServer2 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 13 more 

ответ

2

Как указано ошибкой, класс не находится в пути к классам. К сожалению, установка переменной среды CLASSPATH не будет работать. Единственное решение, которое я мог бы найти было редактировать /usr/lib/spark/bin/compute-classpath.sh и добавьте эту строку (она может идти только в любом месте, но поставить его на одну строку с конца, чтобы понять, что это дополнение):

CLASSPATH="$CLASSPATH:/usr/lib/hive/lib/*" 

Cloudera-х release notes for 5.3.0 явно указывает, что «Spark SQL остается экспериментальной и неподдерживаемой функцией в CDH», поэтому неудивительно, что могут потребоваться такие настройки. Кроме того, this response к аналогичной проблеме в CDH 5.2 предполагает, что кубы Hive намеренно исключаются Cloudera по причинам размера.

+1

Теперь в Spark1.4 нет файла с именем 'compute-classpath.sh', где я должен добавить CLASSPATH? –

1

У меня возникла такая же проблема, но я решил ее по-другому.

Версия cloudera CDH не была 5.3.0. Была версия, предшествующая этой версии, поэтому вы найдете несколько разных путей.

Просто решение было заменить искрообразователь - **. Jar-файл, который поставляется с cloudera CDH другой версией.

Я скачал искру с официальной страницы загрузки. Версия, которую я загрузил, была построена для hadoop 2.4 и более поздних версий. Извлечение загруженного файла и поиск световой сборки - **. Jar.

В установке Cloudera, я искал тот же файл, и я нашел его в этом пути /usr/lib/spark/libe/spark-assembly--.jar

предыдущий путь действительно был символическая ссылка на фактический файл. Я загрузил банку из искры, загрузив ее в тот же путь и сделав символическую ссылку на новую банку (ln -f -s target link).

Все прекрасно работает со мной.

+0

Вам нужно было восстановить Искра? – Tagar

+0

AFAIR no Я сделал точно то, что описано в ответе. – Fanooos

1

/usr/lib/spark/bin/compute-classpath.sh комплекты CLASSPATH="$SPARK_CLASSPATH". На CDH с использованием посылок вы можете добавить улья банки к SPARK_CLASSPATH так:

SPARK_CLASSPATH=$(ls -1 /opt/cloudera/parcels/CDH/lib/hive/lib/*.jar | sed -e :a -e 'N;s/\n/:/;ta') /opt/cloudera/parcels/CDH/lib/spark/sbin/start-thriftserver.sh --help 
+0

compute-classpath.sh не существует в CDH 5.5 .. было ли оно переименовано или просто удалено? другие обходные пути? – Tagar

0

Инструкции от Cloudera Community Forum http://community.cloudera.com/t5/Advanced-Analytics-Apache-Spark/CDH-5-5-does-not-have-Spark-Thrift-Server/m-p/41849#M1758:

git clone https://github.com/cloudera/spark.git 

cd spark 

./make-distribution.sh -DskipTests \ 
    -Dhadoop.version=2.6.0-cdh5.7.0 \ 
    -Phadoop-2.6 \ 
    -Pyarn \ 
    -Phive -Phive-thriftserver \ 
    -Pflume-provided \ 
    -Phadoop-provided \ 
    -Phbase-provided \ 
    -Phive-provided \ 
    -Pparquet-provided 

-Phive и -Phive-thriftserver ключевых фигур там.

Существует запрос на добавление Spark Thrift Server https://issues.cloudera.org/browse/DISTRO-817 , пожалуйста, проголосуйте, если вы хотите увидеть это в CDH.

Смежные вопросы